通过Uinty实现角色移动、视角旋转以及跳跃
一、创建一个新的Unity3d项目
二、创建角色模型和地面
创建一个Capsule模型,命名为Player;再创建一个Plane模型作为地面。

三、在Inspector面板中调整Player属性
重置Player的位置
在Player中添加CharacterController组件

将MainCamera移到Player中,作为子对象并重置MainCamera的位置

调整完成后一个人物的基本模型就制作好了,如图所示

三、为Camera添加视角旋转脚本
在Hierarchy面板下单击Main Camera,在其Inspector面板下点击Add Component添加一脚本,命名为CameraController

打开CameraController脚本复制这个代码到里面,具体内容可以自己看一下改进
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| using System.Collections; using System.Collections.Generic; using UnityEngine;
public class CameraController : MonoBehaviour { public Transform Playertranforms; private float mouseX, mouseY; public float mouseSpeed; public float xRotation; private void Update() { mouseX = Input.GetAxis("Mouse X") * mouseSpeed * Time.deltaTime; mouseY = Input.GetAxis("Mouse Y") * mouseSpeed * Time.deltaTime;
xRotation -= mouseY; xRotation = Mathf.Clamp(xRotation, -70f, 70f); Playertranforms.Rotate(Vector3.up * mouseX); transform.localRotation = Quaternion.Euler(xRotation, 0, 0); } }
|
接下来Ctrl+S保存脚本,回到Unity中,将Hierarchy面板下的Player拖拽至MainCamera中Inspector面板下CameraController的脚本中,设置鼠标灵敏度为200,操作如下图

四、为Player添加移动脚本
在Hierarchy面板下单击Player,在其Inspector面板下点击Add Component添加一脚本,命名为PlayerController,内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| using System.Collections; using System.Collections.Generic; using UnityEngine;
public class PlayerController : MonoBehaviour { private CharacterController characterController; [Header("人物基础属性")] public float moveSpeed; public float jumpSpeed;
private float horizontalMove, verticalMove;
private Vector3 dir;
public float gravity; private Vector3 player; [Header("地面检测")] public Transform groundCheck; public float checkRadius; public LayerMask groundLayer; public bool isGrounded; private void Start() { characterController = GetComponent<CharacterController>(); }
private void Update() { Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false;
isGrounded = Physics.CheckSphere(groundCheck.position, checkRadius, groundLayer);
if (isGrounded && player.y < 0) { player.y = -1f; }
horizontalMove = Input.GetAxis("Horizontal") * moveSpeed; verticalMove = Input.GetAxis("Vertical") * moveSpeed;
dir = transform.forward * verticalMove + transform.right * horizontalMove; characterController.Move(dir * Time.deltaTime);
if (Input.GetButtonDown("Jump") && isGrounded) { player.y = jumpSpeed; }
#region//自由落体计算方法 player.y -= gravity * Time.deltaTime; characterController.Move(player * Time.deltaTime); #endregion } }
|
回到Unity中,将Hierarchy面板下设置PlayerController的参数,各项设置如下

其中需要创建一个空物体,命名为GroundCheck,并且作为Player的子物体,同时调整其的位置,放置在底部

添加一个新的层级,用于作为地面进行判断

五、结语
到此为止,第一人称移动的功能就已经实现了,代码中有些内容可以根据自己需求更改。
运行效果如下
