Unity基础篇:四元数(Quaternion)和欧拉角(Eulerangle)讨论

四元数(Quaternion)和欧拉角(Eulerangle)这两个老朋友我们在游戏开发的时候会非常,非常频繁的使用他们。然而有时候我会混淆他们的定义以及用法,所以今天写一篇博客,来总结一下,夯实基础。

1.首先我们还是要了解一下定义,这位大神写的非常好,非常专业,非常全面!请务必读完这位大神的文章再读此篇博客!

https://blog.csdn.net/AndrewFan/article/details/62057519

2.然后是API和主要用途

首先是Quaternion。

Unity基础篇:四元数(Quaternion)和欧拉角(Eulerangle)讨论_第1张图片

然后我们都知道,Unity里面的Transform组件里的Rotation是四元数,但是他是以欧拉角(Vector3)的形式展现在我们面前,目的就是为了方便我们修改。因此,我们给Rotation直接赋值的时候,也只能用Quaternion赋值。意识到这点很重要。

当然,硬要给Rotation赋值也是可以的,不过要用到Quaternion.eulerAngles这个API。

例如


public class ExampleClass : MonoBehaviour {

    public Quaternion rotation = Quaternion.identity;

    void Example() {

        rotation.eulerAngles = new Vector3(0, 30, 0);

        print(rotation.eulerAngles.y);

    }

}

 

下面介绍几个四元数的常用API,返回值类型有的不为四元数,请多加注意

返回的是一个float变量

Unity基础篇:四元数(Quaternion)和欧拉角(Eulerangle)讨论_第2张图片

返回的是四元数

Unity基础篇:四元数(Quaternion)和欧拉角(Eulerangle)讨论_第3张图片

返回的是四元数

Unity基础篇:四元数(Quaternion)和欧拉角(Eulerangle)讨论_第4张图片

返回的是四元数

Unity基础篇:四元数(Quaternion)和欧拉角(Eulerangle)讨论_第5张图片

返回的是四元数,与上一个的区别是可以控制旋转速率,我更习惯于把这个当做translate的那种类型的API用,而上面那个我用来计算角度。

Unity基础篇:四元数(Quaternion)和欧拉角(Eulerangle)讨论_第6张图片

这个通常用来控制相机的跟随,或者人物的注视方向。

Unity基础篇:四元数(Quaternion)和欧拉角(Eulerangle)讨论_第7张图片

public Transform target;

    void Update() {

        Vector3 relativePos = target.position - transform.position;

        Quaternion rotation = Quaternion.LookRotation(relativePos);

        transform.rotation = rotation;

    }

 

****************************************************************************************************************************************

然后对于欧拉角,Unity中并没有专门的API,所以这里我们用transform和rigidbody相关的API进行讨论。

Unity基础篇:四元数(Quaternion)和欧拉角(Eulerangle)讨论_第8张图片

Unity基础篇:四元数(Quaternion)和欧拉角(Eulerangle)讨论_第9张图片

这个很不常用,因为他时常会导致意想不到的副作用,我建议使用rotation

Unity基础篇:四元数(Quaternion)和欧拉角(Eulerangle)讨论_第10张图片

通过上面几个例子,我们可以发现,欧拉角可以看成一个Vector3变量,对应的旋转顺序和法则可以从博客开始的大神文章得知。

好了,这篇博客到此为止,祝大家天天进步!

你可能感兴趣的:(Unity相关)