标签:
这里主要讲三个函数 , 一个自动跟随函数 和 两个指向旋转函数 , 这三个函数在游戏角色创建过程中会经常用到:
这个是跟随函数 和 欧拉角旋转函数
public class GensuiZhixiang : MonoBehaviour { //公共属性 //定义跟随主体的Transform Transform m_transform; //定义被跟随(指向)物体的Transform public Transform target; //跟随类 //定义跟随主体的移动速度 float m_speed = 10f; //指向类 //定义跟随主体的转向角度 float m_rotSpeed = 120f; // Use this for initialization void Start () { //获取自身Transform m_transform = this.transform; } // Update is called once per frame void Update () { //调用跟随函数 Follow(); //调用指向函数 LookAt(); } //跟随函数 void Follow() { //定义跟随主体原来的位置(还没有跟随移动) Vector3 oldPosition = m_transform.position; //定义被跟随物体的的位置 Vector3 targetPosition = target.position; //得到XYZ轴上的向量 float x = Mathf.MoveTowards(oldPosition.x, targetPosition.x, m_speed * Time.deltaTime); float y = Mathf.MoveTowards(oldPosition.y, targetPosition.y, m_speed * Time.deltaTime); float z = Mathf.MoveTowards(oldPosition.z, targetPosition.z, m_speed * Time.deltaTime); //把得到的向量赋给跟随主体 实现跟随 m_transform.position = new Vector3(x,y,z); } //指向函数 void LookAt() { //定义指向主体原来的角度(还没有旋转) Vector3 oldOEuler = m_transform.eulerAngles; //指向主体坐标 转向 被指向物体 m_transform.LookAt(target.transform); //得到面向物体的欧拉角(只需要XY就能实现指向了) float eulerX = Mathf.MoveTowardsAngle(oldOEuler.x, m_transform.eulerAngles.x, m_rotSpeed * Time.deltaTime); float eulerY = Mathf.MoveTowardsAngle(oldOEuler.y, m_transform.eulerAngles.y, m_rotSpeed * Time.deltaTime); //把得到的旋转量赋给主体 实现指向 m_transform.eulerAngles = new Vector3(eulerX, eulerY, 0); } }
这个是 四元数旋转函数
public class QuaternionLookat : MonoBehaviour { //定义被指向主体的Transform Transform m_transform; //定义被指向物体的Transform public Transform target; // Use this for initialization void Start () { //初始化给主体赋Transform m_transform = this.transform; } // Update is called once per frame void Update () { //调用旋转函数 QuaterLook(); } //四元数旋转函数 void QuaterLook() { //定义一个三维变量 用来表示从本体 到 客体的向量 Vector3 pos = target.position - m_transform.position; //用四元数的LookRotation() 获得转向的四元数 Quaternion m_rotation = Quaternion.LookRotation(pos); //把得到的旋转量 赋给旋转本体 实现指向旋转 (注意这里的.localRotation 而不是.rotation 因为前者能实现旋转 后者不行) m_transform.localRotation = m_rotation; } }
欧拉角旋转函数 和 四元数旋转函数 都能实现实时指向旋转 但是四元数的效果更好 细节也更细腻
标签:
原文地址:http://www.cnblogs.com/qiaogaojian/p/5917475.html