第一种方式(Vector3.SmoothDamp())。
这种跟随方式在平滑时的效果感觉好一些。
将FollowTarget.cs挂载在相机上,再指定一个相机想要跟随的物体,将其赋给共有属性targetTrans。
public class FollowTarget : MonoBehaviour
{
public Transform targetTrans;
private float lerpTime = 0.5f;
Vector3 velocity = Vector3.zero;
private void Update()
{
if(targetTrans !=null)
{
Vector3 pos = Camera.main.WorldToViewportPoint(targetTrans.position);
Vector3 offset = targetTrans.position - Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, pos.z));
Vector3 destination = transform.position + offset;
destination.x = 0;
if (destination.y > transform.position.y)
{
transform.position = Vector3.SmoothDamp(transform.position, destination, ref velocity, lerpTime);
}
//Vector3 cameraPos = transform.position;
//if (destination.y > transform.position.y)
//{
// cameraPos.y = Mathf.Lerp(transform.position.y, destination.y, lerpTime);
//}
//transform.position = cameraPos;
}
}
}
第二种方式(Mathf.Lerp())
这种方式的平滑效果感觉要生硬一些
public class FollowTarget : MonoBehaviour
{
public Transform targetTrans;
private float lerpTime = 0.5f;
Vector3 velocity = Vector3.zero;
private void Update()
{
if(targetTrans !=null)
{
Vector3 pos = Camera.main.WorldToViewportPoint(targetTrans.position);
Vector3 offset = targetTrans.position - Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, pos.z));
Vector3 destination = transform.position + offset;
//destination.x = 0;
//if (destination.y > transform.position.y)
//{
// transform.position = Vector3.SmoothDamp(transform.position, destination, ref velocity, lerpTime);
//}
Vector3 cameraPos = transform.position;
if (destination.y > transform.position.y)
{
cameraPos.y = Mathf.Lerp(transform.position.y, destination.y, lerpTime);
}
transform.position = cameraPos;
}
}
}