【问题标题】:Don't rotate z-axis while rotating around Vector3.up and Vector3.left围绕 Vector3.up 和 Vector3.left 旋转时不要旋转 z 轴
【发布时间】:2019-05-17 03:46:48
【问题描述】:

我有一个航天飞机,我想在Vector3.up 和Vector3.left 上发送rotate,以便玩家可以使用航天飞机向上/向下和向左/向右看。

这是我使用的代码:

// Rotate the ship
transform.Rotate(Vector3.up, distX * rotateSpeed * Time.deltaTime, Space.Self);
transform.Rotate(Vector3.left, distY * rotateSpeed * Time.deltaTime, Space.Self);

其中distX 是旋转强度值,基于Mouse X - 轴,rotateSpeed 只是旋转速度值。

但是,如果我使用这个脚本来旋转我的船,它也会被 z 轴旋转。

我不知道它为什么这样做。这些是我的代码中(目前)唯一与 Shuttle 旋转有关的行。

我尝试过将Vector3.up 替换为transform.up 和Vector3.left 替换为transform.right(在第二种情况下也将distY 更改为-distY),但也没有用。

【问题讨论】:

  • 您可能应该开始使用 四元数 而不是欧拉角旋转,原因如下。
  • @MickyD 类似于:transform.rotation = new Quaternion(transform.rotation.x + (distX * rotateSpeed * Time.deltaTime), transform.rotation.y + (distY * rotateSpeed * Time.deltaTime) ), 0, 变换.旋转.w); ? - 我得到了一些非常奇怪的结果

标签: c# unity3d


【解决方案1】:

您可以将欧拉值 0 分配给 z,这样您就可以限制 z 轴的旋转:

    distX = Input.GetAxis("Vertical") * rotateSpeed * Time.deltaTime;
    distY = Input.GetAxis("Horizontal") * rotateSpeed * Time.deltaTime;       
    transform.rotation = Quaternion.Euler(distX, distY, 0f);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2011-08-22
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多