U
Unity
星辰学院
首页
课程表
章节导览
第 1 课
返回主站
首页
/
第 14 章 · 3D 游戏进阶
/
第 230 课
LESSON 230 · 3D 游戏进阶
3D 相机控制(旋转与缩放)
3D 相机控制完成。下一课做 3D 场景搭建。
⏱ 约 14 分钟
📊 难度:
入门
🗂 第 14 章 · 3D 游戏进阶
📍 第 230 / 300 课
课程进度
230 / 300
🎯
本节学习目标
实现环绕旋转
实现滚轮缩放
实现鼠标旋转
🚀
课程导读
“转视角、拉近拉远”——3D 动作/策略游戏必备。本课实现环绕相机。
◆
鼠标环绕旋转
按住鼠标转视角。
【目标】按住右键/鼠标拖动时,相机围绕角色旋转。
【结构】Player → CameraPivot(旋转点)→ Main Camera。
【脚本 OrbitCamera】
public Transform target; // 角色
public float distance = 5f;
private float yaw = 0f, pitch = 30f;
void Update() {
if (Input.GetMouseButton(1)) { // 按住右键
yaw += Input.GetAxis("Mouse X") * 3f;
pitch -= Input.GetAxis("Mouse Y") * 3f;
pitch = Mathf.Clamp(pitch, -80f, 80f);
}
// 应用旋转
transform.rotation = Quaternion.Euler(pitch, yaw, 0);
transform.position = target.position - transform.forward * distance;
}
【说明】yaw 左右、pitch 上下(Clamp 防翻);相机看向角色。
【距离】distance 控制远近。
【平滑】用 Lerp 平滑跟随旋转。
【测试】按住右键拖动,视角环绕角色。
【注意】pitch Clamp 避免上下翻转。
【完成】视角“自由”了!
💡
环绕相机 = yaw/pitch 两个角度 → 旋转 + 位置 = 目标 - 前方×距离。
◆
滚轮缩放与自动跟随
拉近拉远。
【缩放】滚轮改变 distance:
float scroll = Input.GetAxis("Mouse ScrollWheel");
distance -= scroll * 2f;
distance = Mathf.Clamp(distance, 2f, 20f);
【平滑缩放】distance = Mathf.Lerp(distance, targetDistance, Time.deltaTime * 5f);
【自动跟随】目标移动时相机跟着:
transform.position = Vector3.Lerp(transform.position, desiredPos, Time.deltaTime * 5f);
【看向目标】transform.LookAt(target) 或维持角度。
【碰撞】相机穿墙时自动拉近(射线检测,进阶)。
【完整】“环绕+缩放+平滑”三合一。
【注意】移动角色时相机要跟随(平滑追)。
【完成】专业第三人称相机完工!
✅
相机三控:右键环绕、滚轮缩放、Lerp 平滑。一套代码通用。
⚠
常见错误与排查
⛔
错误:
相机穿墙看到内部?
原因:
没做碰撞检测
解决:
加相机射线:撞墙时把 distance 缩短到墙面距离。
★
动手练习
课后小任务(做出来才算真的学会)
实现鼠标环绕相机
实现滚轮缩放
加平滑跟随
✓
本节小结
3D 相机控制完成。下一课做 3D 场景搭建。
标记为已完成
完成打卡后,主站会实时更新你的学习进度 🎯
← 上一课
3D 角色移动与动画整合
下一课 →
3D 场景搭建(原型制作)
↑