在Unity中,不使用子对象的方式让相机跟随物体移动,我们通过编写脚本来实现。下面放一个从工程中摘出来的的C#脚本示例,用于将相机绑定到一个Target对象上并跟随其移动:
using UnityEngine;
public class FollowCamera : MonoBehaviour
{
public Transform target; // 目标物体的Transform引用
public Vector3 offset; // 相机相对于目标物体的偏移量
private Vector3 targetPosition; // 目标物体的当前位置
private void Start()
{
// 自动获得场景中事先布置的的偏移
offset = this.transform.position - target.position;
}
void LateUpdate()
{
// 获取目标物体的当前位置
targetPosition = target.position;
// 计算相机的新位置
Vector3 newPosition = targetPosition + offset;
// 将相机移动到新位置
transform.position = newPosition;
}
}
将上述脚本绑定到Camera物体上,Target选择要追踪的物体,即可完成跟随。如果是想要渐近的跟随,可以选择使用Lerp函数
特别注意的是,摄像机放在 LateUpdate() 生命周期函数中更为合适
。在 Update() 和 LateUpdate() 之间,Unity隐藏地进行了动画的渲染之类的动作,我们自然是希望在正确渲染之后进行摄像机的帧画面采集的。这部分一般专门用于控制摄像机位移。
图-在 LateUpdate()下更新摄像机位置
图-在 Update()下更新摄像机位置(细微振动)