1️⃣ 我们将Player的Tag设置为Player
方便我们通过C#的FindGameObjectWithTag()方法找到PlayerTransform位置信息,来对Camera的Transform进行设置
2️⃣ 给Camera添加代码
a、Lerp(a,b,f) ,返回 (1-f)*a b*f ,即当f为0时返回的是a;f为1时,返回的是b
Lerp()通过Update()每帧不断更新自身位置,来线性地不断接近目标位置(即使目标位置不再改变,但当前位置还未到达,但Update还在运行,是Update保证Lerp能一直运行下去的,接近目标位置)
b、 transform.LookAt(gameObject.position)
使游戏对象看向gameObject的transform的position;
c、世界坐标to局部坐标
player.TransformDirection(offset);
释义:offset为世界坐标,player为局部坐标,在运行游戏时,局部坐标会和世界坐标不一致,导致摄像头不在固定的方向上, 将offset世界坐标转换成player的局部坐标,只有保持方向的一致性,摄像头方向才不会发生变化
局部坐标to世界坐标
参考文章1、文章2
代码语言:javascript复制using UnityEngine;
public class FollowTarget : MonoBehaviour {
private Transform player;
private Vector3 offset;
Vector3 targetPosition;
float smoothing = 3;
void Start () {
player = GameObject.FindGameObjectWithTag("Player").transform;
offset = transform.position - player.position; //当前位置-player的位置
}
void LateUpdate () {
targetPosition = player.position player.TransformDirection(offset);
transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * smoothing);
//transform.position = targetPosition;
transform.LookAt(player.position);
}
}
动画展示:
大家还有什么问题,欢迎在下方留言!