插值公式Lerp:
public static Vector3 Lerp(Vector3 a, Vector3 b, float t)
{
t = Mathf.Clamp01(t);
return new Vector3(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t, a.z + (b.z - a.z) * t);
}
初始位置:由相机位置减去玩家位置得到。
用Vector3.Lerp插值保持之间跟随
LookRotation方法始终绕Y轴终看向玩家
下面代码展示:
public class CameraFollow : MonoBehaviour {
private Transform player;//跟随玩家
private Vector3 pos;
private float smooth = 3f;
// Use this for initialization
void Start () {
player = GameObject.FindWithTag("Player").transform;
//初始位置
pos =transform.position-player.position;
}
// Update is called once per frame
void Update () {
//位置跟随
transform.position = Vector3.Lerp(transform.position,pos+player.position,Time.deltaTime*smooth);
//旋转跟随
Quaternion q = Quaternion.LookRotation(transform.position-player.position,Vector3.up);
Quaternion.Slerp(transform.rotation,q,Time.deltaTime*smooth);
}
}