首页/ 第 14 章 · 3D 游戏进阶/ 第 227 课
LESSON 227 · 3D 游戏进阶

第一人称控制器 FPS

第一人称控制器完成。下一课做第三人称控制器。

⏱ 约 16 分钟📊 难度:入门🗂 第 14 章 · 3D 游戏进阶📍 第 227 / 300 课
课程进度
227 / 300

🎯本节学习目标

  • 实现鼠标视角
  • 实现 WASD 移动
  • 掌握 Character Controller

🚀课程导读

“我是角色的眼睛”——第一人称是 3D 最经典视角。本课做完整 FPS 控制器。

Character Controller

3D 角色“胶囊”。

  1. 【创建】空对象 Player → Add Component → Character Controller(角色控制器组件)。
  2. 【说明】CharacterController 是“简化角色”:自带碰撞、步进、爬坡,不用于物理刚体。
  3. 【参数】Radius(半径 0.5)、Height(高度 2)、Center(中心)。
  4. 【移动】controller.Move(move * speed * Time.deltaTime);
  5. 【重力】Move 需要手动重力:move.y -= gravity * Time.deltaTime;
  6. 【判断落地】controller.isGrounded。
  7. 【跳跃】if (controller.isGrounded && Input.GetKeyDown(KeyCode.Space)) move.y = jumpSpeed;
  8. 【完整脚本】
  9. public float speed = 6f, gravity = 20f, jumpSpeed = 8f;
  10. CharacterController cc; Vector3 move;
  11. void Update() {
  12. if (cc.isGrounded) { move.x = Input.GetAxis("Horizontal") * speed; move.z = Input.GetAxis("Vertical") * speed;
  13. if (Input.GetKeyDown(KeyCode.Space)) move.y = jumpSpeed;
  14. }
  15. move.y -= gravity * Time.deltaTime;
  16. move = transform.TransformDirection(move); // 相对朝向
  17. cc.Move(move * Time.deltaTime);
  18. }
  19. 【注意】CharacterController 不与刚体混用(会冲突)。
  20. 【测试】WASD 移动、空格跳。
  21. 【完成】角色“能走能跳”。
  22. 【说明】TransformDirection 把局部方向转世界,让移动跟随朝向。
💡
CharacterController = 3D 角色的“胶囊体控制”:Move + isGrounded + 手动重力。FPS 标配。

鼠标视角

“转头”看世界。

  1. 【鼠标旋转】鼠标移动控制相机旋转:
  2. public float mouseSensitivity = 2f;
  3. public Transform cameraHolder; // 相机挂点
  4. private float xRot = 0f;
  5. void Update() {
  6. float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity;
  7. float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity;
  8. // 左右旋转身体
  9. transform.Rotate(Vector3.up * mouseX);
  10. // 上下旋转相机(限制范围防后翻)
  11. xRot -= mouseY; xRot = Mathf.Clamp(xRot, -90f, 90f);
  12. cameraHolder.localRotation = Quaternion.Euler(xRot, 0, 0);
  13. }
  14. 【结构】Player(身体,旋转 Y)下挂 CameraHolder(相机,旋转 X)。
  15. 【隐藏光标】锁鼠标:
  16. Cursor.lockState = CursorLockMode.Locked;
  17. Cursor.visible = false;
  18. 【取消锁定】Esc 打开菜单时解锁(第 162 课暂停)。
  19. 【灵敏度】鼠标灵敏度按手感调。
  20. 【测试】鼠标转头、身体转向,像 FPS。
  21. 【注意】CameraHolder 只在 X 轴旋转,身体在 Y 轴。
  22. 【完成】第一人称视角完整!
第一人称 = 身体转 Y + 相机转 X(Clamp 防翻)+ 锁光标。三件套。

常见错误与排查

错误:鼠标转视角很怪/角色后翻?
原因:旋转轴搞混或 Clamp 没做
解决:身体 Rotate(Y)、相机 localRotation Euler(xRot,0,0) 且 Clamp(-90,90)。

动手练习

课后小任务(做出来才算真的学会)

  • 用 CharacterController 做移动跳跃
  • 做鼠标视角控制
  • 锁/解锁光标

本节小结

第一人称控制器完成。下一课做第三人称控制器。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课3D 游戏进阶入门