首页 文章

Unity v.4:旋转导致跳跃

提问于
浏览
1

我有一个非常简单的飞机模型可以在x和y方向上移动,而海洋滚动使它看起来好像飞机正在飞行 . 每当飞机移动时,我都会调整它的滚动和俯仰 .

我在对象脚本中计算并维护位置,滚动和俯仰 . 每个更新步骤我都会将它们重新分配给对象的Unity属性 .

问题出现在我试图添加桶滚动效果的地方 . 这段代码工作正常:

transform.Translate(position - transform.position);

    Vector3 rotChange = new Vector3 (-pitch, 0, -roll) -                 
                    transform.rotation.eulerAngles;

    transform.Rotate (rotChange);

只要我将所有旋转保持在-30度之内 . 当飞机进行滚筒滚动时,它会使用以下内容更新每个步骤:

velocity = new Vector3 (barrelRollDirections.x * barrelRollXSpeed,        
                barrelRollDirections.y * barrelRollYSpeed, 0);

    roll += barrelRollTurnSpeed * Time.deltaTime;
    if (roll < -(fullRotation/2)) {
        roll += fullRotation;
    }
    if (roll > (fullRotation/2)) {
        roll -= fullRotation;
    }

有趣的是,当我这样做时,如果平面没有沿x轴或y轴移动,旋转平面实际上是可以正常工作的 . 但如果它是,它会跳到整个地方,只有在滚动结束后才会重新出现在正确的最终位置 .

我尝试了很多方法来解决这个问题:

  • 使用Quaternion.Euler将我想要的方向转换为四元数,并将其直接赋值给transform.rotate . 这并没有解决任何问题,它也会导致飞机在其运动范围内抖动和抖动 .

  • 在四元数中保存平面的初始方向,然后,每个更新步骤,将初始旋转重新分配给平面,然后调用Transform.Rotate(new Vector3(-pitch,0,-roll)) . 我认为这可以解决我的问题,如果它是像万向节锁,从那时我只是,每一步,应用旋转小于180度 . 但没有骰子 .

1 回答

  • 0

    编辑:我找到了!在提出这个问题之后,我想我会在等待答案后继续研究不同的对象 . 在那里我发现transform.Translate函数根据它们的旋转在不同的方向上移动对象 . 当我改为简单地重新分配位置时,它工作正常 . 与往常一样,与其他人交谈的行为有助于解决问题 .

相关问题