unity 旋转和万向锁
# 分析这篇爬虫爬取的技术博客html ## 动态欧拉角与万向锁现象 使用动态欧拉角会出现万向锁现象;静态欧拉角不存在万向锁的问题。 一个典型的万向锁问题可以表述如下:先heading45°再pitch90°,这与先pitch90°再bank45°是等价的。事实上,一旦选择±90°作为pitch角,就会导致第一次旋转和第三次旋转等价,整个旋转表示系统被限制在只能绕竖直轴旋转,丢失了一个表示维度。 ## 死锁的原因 xyz 的选转,必须要存在轴的父子关系,才能选转。这种关系的存在,必然就会导致当俩个轴重合时,出现选转卡死。 ## 使用四元素解决旋转问题 使用四元数可以避免万向锁现象,并且方便显示为欧拉角形式。 ```csharp using UnityEngine; using System.Collections; public class RotateSample : MonoBehaviour { public GameObject prefab_ST; public GameObject prefab_STParent; public float RotateSpeed = 3; void Start() { SetPrefab(); } public void SetPrefab() { prefab_ST.transform.SetParent(leftHand.transform); prefab_ST.transform.localPosition = Vector3.zero; prefab_ST.transform.localRotation = Quaternion.identity; } public void font() { isFont = true; isCE = false; isFushi = false; isBack = false; } public void ce() { isCE = true; isFont = false; isFushi = false; isBack = false; } public void fushi() { isFushi = true; isCE = false; isFont = false; isBack = false; } public void back() { isBack = true; isFushi = false; isCE = false; isFont = false; } } 代码解释
SetPrefab方法用于设置prefab_ST的父对象和位置。font,ce,fushi,back方法分别控制不同的旋转动作。
通过使用四元数,可以避免万向锁现象,并且方便地进行旋转操作。