实现
获取鼠标移动输入值控制视角旋转。
deltaMouse.x = Input.GetAxisRaw("Mouse X");
deltaMouse.y = Input.GetAxisRaw("Mouse Y");
Vector2 rawFrameVelocity = Vector2.Scale(deltaMouse, Vector2.one * sensitivityRotate);
velocityFrame = Vector2.Lerp(velocityFrame, rawFrameVelocity, 1f / smoothMove);
velocity += velocityFrame;
transform.localRotation = Quaternion.Euler(-velocity.y, velocity.x, 0);
获取键盘输入值控制移动。
moveX = Input.GetAxis("Horizontal");
moveY = Input.GetAxis("Vertical");
Vector3 dirMove = transform.TransformDirection(new Vector3(moveX, 0, moveY));
dirMove = dirMove.normalized;
Vector3 motion = speedMove * Time.deltaTime * dirMove;
controller.SimpleMove(motion);
使用Character Controller 组件来进行移动控制的优势是Character Controller 自带碰撞检测。只需给场景添加碰撞体,移动过程中无需再进行额外的碰撞判断。
Character Controller 的SimpleMove 和Move 区别在于有无重力效果。SimpleMove 有重力效果无法实现跳跃,Move 无重力效果可进行跳跃,也就意味着使用SimpleMove 进行移动时需给地面添加碰撞体。同时SimpleMove 和Move 的返回值也不同,SimpleMove 返回的是当前Character Controller 是否接触到地面,Move 返回的是当前Character Controller 碰撞类型。