unity3d————四元数常用方法

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

 结果:

(运行前)

                                                                        (运行后)

分析:

  1. Quaternion.LookRotation:
    • Quaternion.LookRotation(Vector3 forward)是一个静态方法,它接受一个Vector3参数,表示在世界空间中向前(即Z轴正方向)的向量,然后返回一个Quaternion旋转,这个旋转可以使一个对象的Z轴正方向对准这个向量。
    • 在您的代码中,lookB.position - lookA.position计算的是从lookAlookB的向量,这个向量表示了lookA需要朝向的方向。
    • 因此,Quaternion.LookRotation(lookB.position - lookA.position)计算的是一个旋转,这个旋转可以使lookA的Z轴正方向(通常认为是“前方”)对准lookB

 

 

 

 

 

 

上一篇:Open AI 的智能代理—


下一篇:15分钟学 Go 第 45 天 : 使用Docker容器