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

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

  • 一、静态角色转向
    • 1.1 C# 脚本
    • 1.2 Unity 实现
    • 1.3 修改
  • 二、动态角色转向
    • 2.1 C# 脚本
    • 2.2 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 实现

Unity 角色朝向目标 / 动态转向动画_第1张图片
Unity 角色朝向目标 / 动态转向动画_第2张图片
Unity 角色朝向目标 / 动态转向动画_第3张图片

1.3 修改

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

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

Unity 角色朝向目标 / 动态转向动画_第4张图片

二、动态角色转向

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完成连续转向动作。效果如下。
Unity 角色朝向目标 / 动态转向动画_第5张图片

写在最最最后

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

你可能感兴趣的:(unity,c#,游戏开发)