在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()下更新摄像机位置(细微振动)