在3D开发中经常需要计算面朝物体的角度转向。
Quaternion.LookRotation 主要是将向量,和以某个轴为朝上的方向,来生成一个四元数(用于表示旋转方向)。
Quaternion.Slerp 球形(弧形)插值计算,大部分时候应用于四元数。在从一个旋转值旋转到另外一个旋转值的时候可以使用。
代码如下:
/// <summary>
/// 面向物体.
/// </summary>
/// <param name="originalGameObject">原始gameObject.</param>
/// <param name="targetGameObject">目标gameObject.</param>
public static void faceToObj (GameObject originalGameObject, GameObject targetGameObject)
{
Vector3 lookPos = targetGameObject.transform.position - originalGameObject.transform.position;
lookPos.y = 0;
Quaternion rotation = Quaternion.LookRotation (lookPos);
originalGameObject.transform.rotation = Quaternion.Slerp (originalGameObject.transform.rotation, rotation, Time.deltaTime * 30.0f);
}
首先计算两个GameObject的方向向量,然后将方向向量以Y轴为Up,转换为四元数旋转量。最后通过插值变化,将当前的旋转量旋转到指定的旋转量上,完成平滑的旋转。