【发布时间】: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