1.单位四元数
- 单位四元数是一个模长为1的四元数,通常表示为q = w + xi + yj + zk,其中w、x、y、z是实数,且满足w² + x² + y² + z² = 1。它也可以表示为q = [w, v],其中v = (x, y, z)是三维空间中的矢量,w是标量。
- 在Unity中,单位四元数用于表示物体的旋转状态,通过Quaternion类来实现。
代码示例:
public Transform obj;
void Start()
{
print(Quaternion.identity);
Instantiate(obj, Vector3.zero, Quaternion.identity);
}
运行结果:
生成了一个位于(0,0,0)的单位四元数Cude
2.插值运算
public class siyausnhuchangyonff : MonoBehaviour
{
public Transform target;
//public Transform A;
public Transform B;
void Start()
{
}
void Update()
{
//插值运算,无限接近,由快到慢,变成目标的旋转角度
B.transform.rotation = Quaternion.Lerp(B.transform.rotation, target.rotation, Time.deltaTime);
}
}
结果:由快到慢过程的旋转
(运行前)
(运行后 一模一样的角度)
public class siyausnhuchangyonff : MonoBehaviour
{
public Transform target;
public Transform A;
private float time;
private Quaternion start;
void Start()
{
start = A.rotation;
}
void Update()
{
if(A.rotation != target.rotation)
{
time = 0;
start = A.rotation;
}
time += Time.deltaTime;
A.rotation = Quaternion.Slerp(start, target.rotation, time);
}
}
(匀速)
3.public static Quaternion LookRotation(Vector3 forward);
public class siyausnhuchangyonff : MonoBehaviour
{
public Transform lookA;
public Transform lookB;
void Update()
{
Quaternion q = Quaternion.LookRotation(lookB.position - lookA.position);
lookA.rotation = q;
}
}
结果:
(运行前)
(运行后)
分析:
-
Quaternion.LookRotation:
-
Quaternion.LookRotation(Vector3 forward)
是一个静态方法,它接受一个Vector3
参数,表示在世界空间中向前(即Z轴正方向)的向量,然后返回一个Quaternion
旋转,这个旋转可以使一个对象的Z轴正方向对准这个向量。 - 在您的代码中,
lookB.position - lookA.position
计算的是从lookA
到lookB
的向量,这个向量表示了lookA
需要朝向的方向。 - 因此,
Quaternion.LookRotation(lookB.position - lookA.position)
计算的是一个旋转,这个旋转可以使lookA
的Z轴正方向(通常认为是“前方”)对准lookB
。
-