前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity动画☀️5. 控制摄像机跟随、 Vector3.Lerp、 LookAt()、TransformDirection

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

作者头像
星河造梦坊官方
发布2024-08-14 16:09:32
1020
发布2024-08-14 16:09:32
举报
文章被收录于专栏:星河造梦坊专栏

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

动画展示:

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档