Unity中关于旋转的API解释和使用

Unity中的旋转的API解释和使用

Unity中关于旋转主要是有欧拉角和四元数两种方式,每种方式的简单介绍可以参考我之前写的总结。
时间不是很充裕,要看的东西很多,所以有别人写好的就不在重新总结了,直接借用别人的文章。
https://blog.csdn.net/wwlcsdn000/article/details/79421612
接下来,我们单独看这两种的方式的介绍。

欧拉角

下边这篇文章我感觉写的非常的好了,列举了欧拉角的解释以及对万向锁的更清晰的描述。
https://blog.csdn.net/ronintao/article/details/52236210

四元数

下边的这篇文章,写了四元数的各种理解和创建方式。
但是第一种,我感觉写的有问题,方向的判断的其中一种 前方上方矢量界定法 理解并不对
https://www.cnblogs.com/driftingclouds/p/6626183.html
案例里边是我的测试代码.
已经做好了详细的注释,场景中自行创建4个立方体去查看效果。

public class QuaternionAPI : MonoBehaviour 
{

    public Transform m_t1;
    public Transform m_t2;
    public Transform m_t3;

    public Transform m_t4;
    void Start () 
    {
        //前方上方矢量界定法的实际上方会重新计算   
        //他的脸朝向哪儿  他的头顶朝向哪儿  两个参数的意义  请注意如果给定两个参数先判断是否正交 
        //如果正交才需要对齐  不正交的话默认是模型空间的正上方Y轴  请注意这个相交的意义 主要是判断第二个参数和Z轴是否相交 
        //因为第二个是基于模型空间来讲
        //第一个参数的对齐哪个方向是相对于世界空间来讲 第二个参数是定义哪个是向上的方向 是相对于模型空间来讲

        //m_t1.transform.rotation = Quaternion.LookRotation(Vector3.forward, Vector3.up);
        //m_t2.transform.rotation = Quaternion.LookRotation(Vector3.forward, new Vector3(0.5f, 0.5f, 0));
        //m_t3.transform.rotation = Quaternion.LookRotation(Vector3.forward, new Vector3(0.5f, -0.5f, 0));

        //m_t4.transform.rotation = Quaternion.LookRotation(Vector3.forward);

        //m_t1.transform.rotation = Quaternion.LookRotation(new Vector3(0, 0.5f, 0.5f), Vector3.up);
        //m_t2.transform.rotation = Quaternion.LookRotation(new Vector3(0, 0.5f, 0.5f), new Vector3(0, 0.5f, -0.5f));
        //m_t3.transform.rotation = Quaternion.LookRotation(new Vector3(0, 0.5f, 0.5f), new Vector3(0, 0.5f, 0.5f));

        //m_t4.transform.rotation = Quaternion.LookRotation(new Vector3(0, 0.5f, 0.5f));

        m_t1.transform.rotation = Quaternion.LookRotation(new Vector3(0, 0.5f, 0.5f), Vector3.up);
        m_t2.transform.rotation = Quaternion.LookRotation(new Vector3(0, 0.5f, 0.5f), new Vector3(0.5f, 0.5f, 0));
        m_t3.transform.rotation = Quaternion.LookRotation(new Vector3(0, 0.5f, 0.5f), new Vector3(-0.5f, 0.5f, 0));

        m_t4.transform.rotation = Quaternion.LookRotation(new Vector3(0, 0.5f, 0.5f));

        //旋转量的4种表示形式
        //这些都是相对于世界空间来说
        //Quaternion q1=Quaternion.Euler(90, 0, 0);//绕X轴旋转 90度
        //Quaternion q2 = Quaternion.LookRotation(Vector3.down);//人朝向下方
        //Quaternion q3 = Quaternion.AngleAxis(90,Vector3.right);//绕右边的轴 X轴旋转90度
        //Quaternion q4 = Quaternion.FromToRotation(Vector3.up, Vector3.forward);//将上方 旋转到 前方

        //Quaternion q1 = Quaternion.Euler(0, 90, 0);//绕Y轴旋转 90度   注意旋转的正方向
        //Quaternion q2 = Quaternion.LookRotation(Vector3.right);//人朝向左方
        //Quaternion q3 = Quaternion.AngleAxis(90, Vector3.up);//绕上边的轴 Y轴旋转90度
        //Quaternion q4 = Quaternion.FromToRotation(Vector3.left, Vector3.forward);//将上方 旋转到 前方

        //Quaternion q1 = Quaternion.Euler(0, 0, 0);
        //Quaternion q2 = Quaternion.LookRotation(Vector3.forward);//人朝向左方


        //showQ("q1",q1);
        //showQ("q2",q2);
        //showQ("q3",q3);
        //showQ("q4",q4);
    }

四元数的使用方式
https://jingyan.baidu.com/article/4ae03de3dbbac83eff9e6b00.html
https://blog.csdn.net/u014086857/article/details/51777112

猜你喜欢

转载自blog.csdn.net/wwlcsdn000/article/details/80047864