本文仅作学习笔记交流分享,不做任何商业用途
本文结合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上面 ,运行试试旋转左边的图形,观察输出窗口