LookAt方法是自身的z轴指向某位置,相当于是自身到目标位置的方向
是通过轴向和旋转四元数计算出轴向的旋转
/// <summary>
/// 轴向朝向目标点的Quaternion
/// </summary>
/// <param name="observer">Transform</param>
/// <param name="target">目标点</param>
/// <param name="directionAxis">朝向目标的轴向</param>
/// <returns></returns>
Quaternion AxisLookAt(Transform observer, Vector3 target, Vector3 directionAxis)
{
Quaternion rotation = observer.rotation;
Vector3 targetDir = target - observer.position;
///指定哪根轴朝向目标,自行修改Vector3的方向
Vector3 fromDir = observer.rotation * directionAxis;
///计算垂直于当前方向和目标方向的轴
Vector3 axis = Vector3.Cross(fromDir, targetDir).normalized;
///计算当前方向和目标方向的夹角
float angle = Vector3.Angle(fromDir, targetDir);
///将当前朝向向目标方向旋转一定角度,这个角度值可以做插值
return Quaternion.AngleAxis(angle, axis) * rotation;
}