Unity 角色朝向目标 / 动态转向动画

在Unity中我们通常会改变角色或物体的朝向,一般实现朝向的方法可以视为静态和动态两种过程。具体是指:

  1. 静态过程,即角色的朝向在一个Update帧中就完成,rotation 是立刻就改变的;
  2. 动态过程,即角色的朝向在多个帧中持续实现的过程,表现为连续的动画过程;

一、静态角色转向

Unity中角色的静态转向主要使用 Transform.LookAt(目标位置)

1.1 C# 脚本

//***初始化
public Transform Player; 		// 需要修改方向的物体或角色 
public Transform LookTarget; 	// 需要朝向的目标

//***修改Player朝向
Player.transform.LookAt(LookTarget.position);

1.2 Unity 实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 修改

有时候我们期望物体只是朝向这个目标,旋转只在X和Z轴,不涉及Y轴。我们只需要将LookAt 目标位置的Y值,设置为Player自身的Y值即可。

//***修改Player朝向
Player.transform.LookAt(LookTarget.position);

在这里插入图片描述

二、动态角色转向

Unity中角色的动态连续转向过程一般要在持续一段时间中,以增量的形式不断累加,以达到持续的效果。主要会使用到 Quaternion.Slerp( Quaternion a, Quaternion b, float t ),以及协程 StartCoroutine(协程函数名) + IEnumerator(协程函数名) 来实现。

2.1 C# 脚本

//*** 5.0f * Time.deltaTime 速度完成转向
Player.rotation = Quaternion.Slerp(Player.rotation, //1-5 Group 先后随机转向Guide
                                Quaternion.LookRotation(new Vector3( LookTarget.position.x - Player.position.x,0, LookTarget.position.z - Player.position.z)),
                                5.0f * Time.deltaTime);
// 使用协程完成每次
 bool turnArround = false;  //  bool类型标识          
 
 //***实现功能---每次按下 T 键,完成转向 
 void Update()
    {
        if (Input.GetKeyDown(KeyCode.T))  // 触发条件---键盘T键按下
        {
            turnArround = true; 
        }
        if (turnArround == true)
        {
            StartCoroutine(TurnArround());
        }
    }

    IEnumerator TurnArround() //*** 5.0f * Time.deltaTime 速度完成转向
    {
        Player.rotation = Quaternion.Slerp(Player.rotation, //1-5 Group 先后随机转向Guide
                                Quaternion.LookRotation(new Vector3( LookTarget.position.x - Player.position.x,0, LookTarget.position.z - Player.position.z)),
                                5.0f * Time.deltaTime);

        yield return new WaitForSeconds(1f);
        turnArround = false; 
    }

2.2 Unity 实现

每次键入T键,Player完成连续转向动作。效果如下。
在这里插入图片描述

写在最最最后

其实,每次实现一些功能后,后面自己在做还是会有点忘记,虽然内容都比较基础,但还是想把它记下来,下次再做到的时候会更方便,也希望能够帮助到你~
以后,会把在研究过程中遇到的方法总结一下,写博客分享给大家,多多关注,一起努力!

  • 14
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值