Unity之第一人称角色控制

2024-01-31 16:52

本文主要是介绍Unity之第一人称角色控制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

第一人称角色控制

😴1、准备工作

📺2、鼠标控制摄像机视角

🎮3、角色控制

😃4.杂谈 


第一人称角色控制

专栏Unity之动画和角色控制-CSDN博客的这一篇也有讲到角色控制器,是第三人称视角的,以小编目前掌握的Unity知识来看第一人称和第三人称只不过是摄像机摆放的位置不同而已。


最开始学Unity的时候小编最想实现的就是角色控制这一功能,通过近一步学习鼠标晃动就可以实现视角的旋转,也可以通过跳跃跳到石头上去,我们一起来看。

下面我们来实现这一实例。

1、准备工作

先把我们的场景导入进来:

Low-Poly Simple Nature Pack,资源商店免费的资源。然后打开下图框中的文件就是我们要用到的场景了。 


实例我们还是用胶囊来代表玩家,新建一个胶囊Player,把摄像机移动到玩家第一人称的位置。并把摄像机放到Player下面形成一个整体:

2、鼠标控制摄像机视角

准备工作做好后进入正题,编写鼠标控制视角的脚本并挂载到摄像机上:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class FPSCamera : MonoBehaviour
{//获取玩家位置信息public Transform player;//获取鼠标移动的值private float mouseX, mouseY;//鼠标增加灵敏度public float mouseSensitivity;private float xRotation;private void Update(){//获取鼠标上下、左右移动的值mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;xRotation -= mouseY;xRotation = Mathf.Clamp(xRotation, -70f, 70f); //限制鼠标上下旋转范围player.Rotate(Vector3.up * mouseX);//相机上下旋转transform.localRotation = Quaternion.Euler(xRotation,0,0);}
}

这样鼠标控制视角旋转就实现了。

3、角色控制

我们删除胶囊本身的碰撞器组件CapsuleCollider,挂载角色控制组件CharacterController,并新建实现移动的脚本挂载到Player中。

创建一个空对象GroundCheck,把它放到Player最底部位置,这里用空对象来检测与地面的碰撞。

给地面设置图层Ground

编写实现Player角色控制脚本:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;//给玩家挂载 Character Controller 组件
public class FPSMove : MonoBehaviour
{private CharacterController cc;//移动速度public float moveSpeed;//跳跃速度public float jumpSpeed;//定义获得按键值的两个变量private float horizontalMove, verticalMove;private Vector3 dir;//手动实现重力public float gravity;private Vector3 velocity;//创建空对象放到玩家最底部用来检测碰没碰到地面,把空对象挂上来//检测点的中心位置public Transform groundCheck;  //检测点的半径public float checkRadius;//需要检测的图层public LayerMask groundLayer;//布尔值存储Physics.CheckSphere的返回值,判断是否与地面发生碰撞public bool isGround;private void Start(){ //获取玩家挂载的角色控制组件cc = GetComponent<CharacterController>();}private void Update(){//检测玩家是否在地面上,如果定义的球体和物体发生碰撞返回trueisGround = Physics.CheckSphere(groundCheck.position, checkRadius, groundLayer);if (isGround && velocity.y < 0){velocity.y = -2f;}//获得移动按键的值horizontalMove = Input.GetAxis("Horizontal") * moveSpeed;verticalMove   = Input.GetAxis("Vertical") * moveSpeed;dir = transform.forward * verticalMove + transform.right * horizontalMove;//实现移动cc.Move(dir * Time.deltaTime);//每秒减去重力的值不断下降,手动实现重力velocity.y -= gravity * Time.deltaTime;cc.Move(velocity * Time.deltaTime);//判断是否按下跳跃键if (Input.GetButtonDown("Jump") && isGround) {//给玩家一个向上的速度velocity.y = jumpSpeed;}}
}

把空对象的值赋到groundCheck中,检测碰撞的图层换为Ground,并根据自己的喜好调整移动速度等参数值,这样我们的第一人称角色控制就实现了。

小编还复习了初中重力物理公式(doge.jpg)G=mg。其中g是重力加速度,通常g取9.8,小编这里给10

4.杂谈 

跟着飞羽老师学完基础部分感觉依然有好多知识,如果想实现某一功能的话可以进行针对性的学习。这篇第一人称角色控制就是这样,好在网上资料很多。

顺便想一下:角色控制有了;动画的使用也有所了解;像Unity之动画和角色控制-CSDN博客把它们结合到一起就可以实现移动的同时又做出相应的动作,又有好玩的了。


小编改了一下,点击鼠标释放技能播放挥手动画和技能特效,把跳跃和动画也加到实例中,《绿洲大镖客之重生我是闪电侠》v0.2(doge.jpg)

本篇内容就先讲到这里,拜拜┏(^0^)┛

这篇关于Unity之第一人称角色控制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/664435

相关文章

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用