Bootstrap

Unity保姆级教程之旋转的四元数

本文仅作学习笔记交流分享,不做任何商业用途

本文结合unity官方手册,unity唐老狮,unity麦扣的教程等知识,如有不足还请斧正

1.什么是四元数

四元数_百度百科 (baidu.com),四元数的本质是几个实数和几个虚数的结合

其创造源于对复数以及矩阵的某些问题,但是在下面方向应用比较广泛

2.什么是万向节死锁

万向节死锁说白了就是在欧拉角的三个自由量x,y,z下

一个物体在旋转中会造成其中两个轴的重叠

变成两个轴了,那就没办法同时旋转三个自由量了呗

无伤理解欧拉角中的“万向死锁”现象_哔哩哔哩_bilibili

3.unity中的四元数

Quaternion - Unity 脚本 API (unity3d.com)

3.1 欧拉角与四元数互相转换

其实该说不说,transform组件的静态方法rotation的x y z 信息就是四元数

但是唐老狮为了更方便做好前期的理解,先讲了欧拉角

//欧拉角转四元数
Vector3 euler = this.transform.eulerAngles;//这行代码获得挂在该脚本的对象的欧拉角
Quaternion quater = Quaternion.Euler(euler);
Quaternion quater1 = Quaternion.Euler(0,0,0);
//四元数转欧拉角
print( quater.eulerAngles);

3.2对比物体间的旋转角度 Quaternion.Angle

这个方法是用来比对物体之间角度偏移的,也就是当前物体与目标物体之间的角度

你可以在update函数里这么写:

注意声明一个公共transform对象

public Transform target;
 float angle = Quaternion.Angle(transform.rotation, target.rotation);
 Debug.Log("角度" + angle);

我把脚本挂在了右边这个球上面 ,将左边这个图形挂在到了脚本上的target上面 ,运行试试旋转左边的图形,观察输出窗口

3.3 直接绕轴旋转角度 Quaternion.AngleAxis

4.其他静态方法请参考官方手册

;