四元数(Quaternion)和欧拉角(Eulerangle)这两个老朋友我们在游戏开发的时候会非常,非常频繁的使用他们。然而有时候我会混淆他们的定义以及用法,所以今天写一篇博客,来总结一下,夯实基础。
1.首先我们还是要了解一下定义,这位大神写的非常好,非常专业,非常全面!请务必读完这位大神的文章再读此篇博客!
https://blog.csdn.net/AndrewFan/article/details/62057519
2.然后是API和主要用途
首先是Quaternion。
然后我们都知道,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变量
返回的是四元数
返回的是四元数
返回的是四元数
返回的是四元数,与上一个的区别是可以控制旋转速率,我更习惯于把这个当做translate的那种类型的API用,而上面那个我用来计算角度。
这个通常用来控制相机的跟随,或者人物的注视方向。
public Transform target;
void Update() {
Vector3 relativePos = target.position - transform.position;
Quaternion rotation = Quaternion.LookRotation(relativePos);
transform.rotation = rotation;
}
****************************************************************************************************************************************
然后对于欧拉角,Unity中并没有专门的API,所以这里我们用transform和rigidbody相关的API进行讨论。
这个很不常用,因为他时常会导致意想不到的副作用,我建议使用rotation
通过上面几个例子,我们可以发现,欧拉角可以看成一个Vector3变量,对应的旋转顺序和法则可以从博客开始的大神文章得知。
好了,这篇博客到此为止,祝大家天天进步!