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

3D 相机控制(旋转与缩放)

3D 相机控制完成。下一课做 3D 场景搭建。

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

🎯本节学习目标

  • 实现环绕旋转
  • 实现滚轮缩放
  • 实现鼠标旋转

🚀课程导读

“转视角、拉近拉远”——3D 动作/策略游戏必备。本课实现环绕相机。

鼠标环绕旋转

按住鼠标转视角。

  1. 【目标】按住右键/鼠标拖动时,相机围绕角色旋转。
  2. 【结构】Player → CameraPivot(旋转点)→ Main Camera。
  3. 【脚本 OrbitCamera】
  4. public Transform target; // 角色
  5. public float distance = 5f;
  6. private float yaw = 0f, pitch = 30f;
  7. void Update() {
  8. if (Input.GetMouseButton(1)) { // 按住右键
  9. yaw += Input.GetAxis("Mouse X") * 3f;
  10. pitch -= Input.GetAxis("Mouse Y") * 3f;
  11. pitch = Mathf.Clamp(pitch, -80f, 80f);
  12. }
  13. // 应用旋转
  14. transform.rotation = Quaternion.Euler(pitch, yaw, 0);
  15. transform.position = target.position - transform.forward * distance;
  16. }
  17. 【说明】yaw 左右、pitch 上下(Clamp 防翻);相机看向角色。
  18. 【距离】distance 控制远近。
  19. 【平滑】用 Lerp 平滑跟随旋转。
  20. 【测试】按住右键拖动,视角环绕角色。
  21. 【注意】pitch Clamp 避免上下翻转。
  22. 【完成】视角“自由”了!
💡
环绕相机 = yaw/pitch 两个角度 → 旋转 + 位置 = 目标 - 前方×距离。

滚轮缩放与自动跟随

拉近拉远。

  1. 【缩放】滚轮改变 distance:
  2. float scroll = Input.GetAxis("Mouse ScrollWheel");
  3. distance -= scroll * 2f;
  4. distance = Mathf.Clamp(distance, 2f, 20f);
  5. 【平滑缩放】distance = Mathf.Lerp(distance, targetDistance, Time.deltaTime * 5f);
  6. 【自动跟随】目标移动时相机跟着:
  7. transform.position = Vector3.Lerp(transform.position, desiredPos, Time.deltaTime * 5f);
  8. 【看向目标】transform.LookAt(target) 或维持角度。
  9. 【碰撞】相机穿墙时自动拉近(射线检测,进阶)。
  10. 【完整】“环绕+缩放+平滑”三合一。
  11. 【注意】移动角色时相机要跟随(平滑追)。
  12. 【完成】专业第三人称相机完工!
相机三控:右键环绕、滚轮缩放、Lerp 平滑。一套代码通用。

常见错误与排查

错误:相机穿墙看到内部?
原因:没做碰撞检测
解决:加相机射线:撞墙时把 distance 缩短到墙面距离。

动手练习

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

  • 实现鼠标环绕相机
  • 实现滚轮缩放
  • 加平滑跟随

本节小结

3D 相机控制完成。下一课做 3D 场景搭建。

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

← 上一课3D 角色移动与动画整合