首先声明target为需要跟随的物体
public Transform target;
之后因为是缓动,肯定要声明一个移动速度和缓动系数
public float moveSpeed=5;
public float spring = 0.01f;
因为是2D摄像机,所以一个轴是不需要动的,也不需要旋转操作。我们这里以俯视相机为例,此时相机从上往下看,旋转属性为
然后在LateUpdate函数里编写代码,因为摄像机追踪需要发生在物体移动后。
我们这里是y轴不需要动,先算出和目标物体的偏移
offset.y = this.transform.position.y-target.transform.position.y;
因为要有一个缓动效果,所以还要计算出和目标物体的距离
float distance = Vector3.Distance(this.transform.position, target.position + offset);
最后是关键的移动摄像机的代码,Vector3.MoveTowards函数,从当前位置移动到目标位置,移动步长不能超过第三个参数。
我们这里的目标位置是target.position+offset,即,x,z和目标物体同步,再加上偏移,所以锁定到了物体上方。
移动步长采用固定距离加上缓动距离distance*spring,达到了一定的缓动效果,如果要缓动更明显,可以调大spring参数
this.transform.position = Vector3.MoveTowards(this.transform.position, target.position+offset, distance*spring+moveSpeed*Time.deltaTime);
完整代码如下
using UnityEngine;
public class CameraTrack : MonoBehaviour
{
public Transform target;
public float moveSpeed=5;
public float spring = 0.01f;
private Vector3 offset = Vector3.zero;
void LateUpdate()
{
offset.y = this.transform.position.y-target.transform.position.y;
float distance = Vector3.Distance(this.transform.position, target.position + offset);
this.transform.position = Vector3.MoveTowards(this.transform.position, target.position+offset, distance*spring+moveSpeed*Time.deltaTime);
}
}
将此代码挂载到摄像机上,赋值要跟随的物体,即可完成一个简易的2D缓动追踪相机
调整参数后可以得到如下效果