这个Unity代码是如何四元数的.LookRotation的工作和它是什么意思?



我已经浏览了Unity的Quaternion.LookRotation文档,但我没有完全理解它是如何工作的。

using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
public Transform target;
void Update()
{
Vector3 relativePos = target.position - transform.position;
// the second argument, upwards, defaults to Vector3.up
Quaternion rotation = Quaternion.LookRotation(relativePos, Vector3.up);
transform.rotation = rotation;
}
}

一种可视化旋转的方法是用三个垂直的轴-ex。四元数是一种更紧凑的表示,但您仍然可以将其视为具有三个轴。

LookRotation将其中一个旋转轴对准给定方向,但只有一个方向剩下一个自由度,即其他两个旋转轴。

这就是"向上"向量的作用,它锁定了另一个轴,并迫使它垂直于方向和向上向量。第三个旋转轴总是垂直于两者,所以我们有三个垂直的轴,即一个完整的旋转。

你也可以用叉乘做类似的事情,因为它产生了一个垂直于另外两个向量的向量。伪代码:

var xDir = direction;
var zDir= xDir.CrossProduct(upVector)
var yDir = zDir.CrossProduct(xDir)
var matrix = CreateARotationMatrixFromAxises(xDir, yDir, zDir)
var quaternion = CreateQuaternionFromRotationMatrix(matrix)

注意方向和上矢量不能平行,否则你会得到一些错误。

初学者和业余程序员绝对没有理由接触四元数。Unity应该把它从文档中删除。

您需要的只是LookAt命令。幸运的是,它非常容易使用。

假设你有一个tree,你想让你的角色看,就这么简单:

transform.LookAt(tree);

相关内容

最新更新