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

xiaoxiao2021-02-28  10

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

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

 

动画展示:

我是橙子va 认证博客专家 XR博主 前端框架 U3D开发者,AR/MR研究方向。有过联想VR项目开发、影创MR开发,也在杭电当过讲师,给网易AR上架过项目。是国内某知名电影及电视剧观众。个人联系方式:skode@foxmail.com
转载请注明原文地址: https://www.6miu.com/read-2450386.html

最新回复(0)