赞
踩
在Unity中我们通常会改变角色或物体的朝向,一般实现朝向的方法可以视为静态和动态两种过程。具体是指:
Unity中角色的静态转向主要使用 Transform.LookAt(目标位置)。
//***初始化
public Transform Player; // 需要修改方向的物体或角色
public Transform LookTarget; // 需要朝向的目标
//***修改Player朝向
Player.transform.LookAt(LookTarget.position);
有时候我们期望物体只是朝向这个目标,旋转只在X和Z轴,不涉及Y轴。我们只需要将LookAt 目标位置的Y值,设置为Player自身的Y值即可。
//***修改Player朝向
Player.transform.LookAt(LookTarget.position);
Unity中角色的动态连续转向过程一般要在持续一段时间中,以增量的形式不断累加,以达到持续的效果。主要会使用到 Quaternion.Slerp( Quaternion a, Quaternion b, float t ),以及协程 StartCoroutine(协程函数名) + IEnumerator(协程函数名) 来实现。
//*** 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; }
每次键入T键,Player完成连续转向动作。效果如下。
其实,每次实现一些功能后,后面自己在做还是会有点忘记,虽然内容都比较基础,但还是想把它记下来,下次再做到的时候会更方便,也希望能够帮助到你~
以后,会把在研究过程中遇到的方法总结一下,写博客分享给大家,多多关注,一起努力!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。