Quaternion.LookRotation

Quaternion.LookRotation的输入是一个前方向量和一个上方向量,它们都是Vector3类型的。前方向量表示物体的z轴(蓝色箭头)要指向的方向,上方向量表示物体的y轴(绿色箭头)要尽量接近的方向。如果不指定上方向量,就默认使用Vector3.up(世界坐标系的y轴)。

Quaternion.LookRotation的输出是一个四元数,它表示一个旋转。这个旋转可以让物体的z轴(蓝色箭头)指向前方向量,y轴(绿色箭头)尽量接近上方向量。四元数是一种用来表示旋转的数学对象,它有四个分量:x,y,z和w。你可以把四元数赋值给物体的rotation属性,或者用它来做其他的旋转计算。

我可以用一个例子来帮你理解。假设你有一个飞机的模型,它的z轴是蓝色箭头,y轴是绿色箭头,x轴是红色箭头。你想让飞机的蓝色箭头指向一个目标点,而且飞机的绿色箭头尽量保持垂直于地面。你可以用Quaternion.LookRotation函数来实现这个效果,具体的步骤如下:

  • 首先,计算飞机的位置和目标点的位置的差向量,这个向量就是飞机的前方向量。
  • 然后,定义一个上方向量,表示飞机的上方。你可以使用Vector3.up,也就是世界坐标系的y轴,或者使用其他的向量,比如地面的法向量。
  • 最后,调用Quaternion.LookRotation函数,传入前方向量和上方向量,得到一个四元数,表示一个旋转。把这个旋转赋值给飞机的rotation属性,就可以让飞机的蓝色箭头指向目标点,绿色箭头尽量接近上方向量。

代码:

// You can also use transform.LookAt

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;
    }
}

猜你喜欢

转载自blog.csdn.net/u010087338/article/details/131873525