1. 基础父子关系:最简单的相机跟随方案
刚接触Unity的新手最容易上手的相机跟随方法,就是把相机直接拖到角色对象下成为子物体。这种方法的操作成本几乎为零——你只需要在Hierarchy窗口中将Main Camera拖拽到Player对象下方,运行时相机就会自动跟随角色移动。我最早做2D横版游戏时也这么干过,确实能快速解决问题。
但实际用起来就会发现几个明显的缺陷。最直接的问题是相机完全复制父物体的所有变换。当角色做出翻转动作时,相机也会跟着上下颠倒,这在平台跳跃游戏中尤为致命。另一个痛点是移动表现——相机像焊死在角色身上一样,角色急停时相机也瞬间定格,没有任何缓冲效果,视觉上非常生硬。
csharp复制// 典型父子关系下的相机抖动问题
void Update() {
if(Input.GetKeyDown(KeyCode.Space)) {
transform.localScale = new Vector3(-1, 1, 1); // 角色翻转时相机同步镜像
}
}
这种方案只适合对相机要求极低的原型开发阶段。我曾在一个48小时Game Jam中使用过,当需要给角色添加受伤闪烁效果时,连带着整个屏幕都在闪,最后不得不连夜改成代码控制。如果非要使用,可以给角色添加专门的空物体作为相机挂载点,至少能避免旋转问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 代码控制:平衡灵活性与复杂度的进阶方案
当项目复杂度上升时,我们就需要更精细的相机控制。通过脚本动态计算相机位置,既能保持跟随关系,又能添加各种效果。这里分享两种我实战验证过的代码方案,分别对应不同的性能需求。
2.1 固定距离跟随法
最基础的代码实现是让相机与角色保持恒定距离。在Start()中记录初始偏移量,之后每帧根据角色位置重新计算相机坐标。这种方法在十年前我的第一个RPG项目中用过,优点是计算量极小,适合低端设备。
csharp复制public class BasicFollow : MonoBehaviour {
public GameObject target;
private Vector3 offset;
void Start() {
offset = transform.positio
