【问题标题】:Unity C# - Rotating more than one object at a time with quaternions isn't workingUnity C# - 使用四元数一次旋转多个对象不起作用
【发布时间】:2022-11-03 13:19:21
【问题描述】:

我有几个大炮对象需要旋转以指向目标并发射炮弹。只要场景中只有一个大炮对象,它就可以正常工作。如果我添加任何额外的佳能,它们只会瞄准 y 轴(向左和向右转动),但它们不会旋转以指向 x 轴上分配的随机角度(向上和向下瞄准)。我完全不明白为什么会发生这种情况。请帮忙? :)

每个大炮都附有一个脚本,其中包含这段代码。我不明白为什么它应该干扰其他大炮脚本......?

private IEnumerator Aim(float durationToRot)
{
    if (rotating)
    {
        yield break;
    }
    rotating = true;

    target = GetLandPoint();
    angle = Random.Range(25, 45);
    Quaternion desiredAngle = Quaternion.Euler(angle, 0, 0);
    Quaternion lookRot = Quaternion.LookRotation(target - transform.position);
    Quaternion lookAngle = Quaternion.Euler(desiredAngle.eulerAngles.x, lookRot.eulerAngles.y, 0);

    turnTime = 0f;
    while (turnTime < durationToRot)
    {
        transform.rotation = Quaternion.Slerp(transform.rotation, lookAngle, turnTime / durationToRot);
        turnTime += Time.deltaTime;

        yield return null;
    }
    transform.rotation = lookAngle;
    rotating = false;
    FireCannon(target);
}

【问题讨论】:

  • 一般来说,您可能不应该使用eulerAngles 作为the values you read back out may be quite different from the values you assigned ... 而不是desiredAngle.eulerAngles.x 为什么不简单地使用angle? ^^
  • 当我在 Slerp 函数中使用角度变量时,我认为角度变量需要采用四元数格式而不是浮点数。 :P 关于使用什么而不是获得 eulerangles 的任何想法?我需要地面位置的 y 轴射击和炮塔角度的 x 轴,然后在 while 循环中对它们进行 Slerp。

标签: unity3d rotation axis quaternions angle


【解决方案1】:

我试过你的脚本,一切正常,也许你在其他地方犯了错误,你的大炮是另一个大炮的孩子,如果是这样,那么尝试使用 localRotation 而不是旋转。

【讨论】:

  • 也谢谢你的回答。当场景中只有一个物体时,它也适用于我,但是当有多个物体时,大炮不会在 x 轴上旋转。真正奇怪的是,每个大炮上的变换信息显示它们应该是旋转的,但它们没有......我尝试使用 localRotation 而不是旋转,但这并没有解决问题。任何其他想法将不胜感激。
【解决方案2】:

谢谢你们的回答,但我找到了我遇到问题的原因。我的加农炮预制件的一部分以某种方式切换为“静态”......天哪......仍然不确定为什么当同一物体的多个实例不起作用时,为什么单个加农炮实例会起作用......奇怪。

【讨论】:

    猜你喜欢
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    相关资源
    最近更新 更多