Unity动画☀️5. 控制摄像机跟随、 Vector3.Lerp、 LookAt()、TransformDirection

2024-08-14 16:09:32 浏览数 (4)

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);
	}
}

动画展示:

大家还有什么问题,欢迎在下方留言!

0 人点赞