猿问

随着时间的推移旋转GameObject

我是新手,我尝试开始使用Unity Engine。


有人可以解释一下,Quaternion.Slerp怎么样?因为我想以不同的角度90,180和270旋转一些物体。我可以在下面看到我的代码。不幸的是,当我添加180度时,对象会做出疯狂的事情,而不是将旋转放到(0,180,180)这个游戏对象。我想得到(180,0,0)


    public float speed = 0.1F;

    private float rotation_x;

    void Update()

    {

        if (Input.GetButtonDown("Fire1"))

        {

            rotation_x = transform.rotation.eulerAngles.x;

            rotation_x += 180;

        }

        transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(rotation_x, transform.eulerAngles.y, transform.eulerAngles.z), Time.time * speed);


    }


慕村9548890
浏览 539回答 3
3回答

牛魔王的故事

在此之前,你不能在这样的欧拉角上添加180,这主要是造成问题的原因。你最好直接使用quaternion,或者在变换本身上工作。您可以将四元数视为空间方向。与已经说过的相反,如果可以的话,我建议学习如何使用它们。但是,我建议不要使用欧拉角......因为它们会采用不同的写作惯例,有时会失败。如果你想了解详情,你可以看看'万向节锁'。简单地说slerp或lerp(分别代表球面线性插值或线性插值)是一种在方向A和B之间进行插值(从一个方向到另一个方向,通过在协程或其他任何地方将t从0增加到1)的方法两者之间的区别在于slerp给你从A到B的最短路径。最后,当t = 1时,lerp(A,B,t)和slerp(A,B,t)会给你B.在您的情况下,如果您想立即将空间中的对象旋转到特定方向,我建议您使用Quaternion.AngleAxis,这是以数学方式描述四元数的最前向方法。如果你想要添加一个旋转,比如说实际方向是90°(两者之间没有动画),你可以这样做:transform.rotation * = Quaternion.AngleAxis(axis_of_rotation,angle)或使用transform.rotate(取决于参数,它可以是右乘,或左:本地或世界变换)。程序员的回答是详细说明如何为变换设置动画。但我确实建议你自己研究四元数,因为它会让你全面了解空间变换。
随时随地看视频慕课网APP
我要回答