让轴在旋转中指向上方(Unity)

Getting the axis pointing up in a rotation (Unity)

我有一个统一的对象,它的旋转描述如下: x, y, z,它们都是围绕各自轴旋转 0 到 360。

现在我试图找出哪个向量指向最多。基本上我有一个 6 面骰子,我在上面使用物理学来模拟掷骰子。我现在想找出骰子的 6 个面中的哪一个面朝上。我可以想象一些相当高级的 if 语句,围绕着单独检查旋转,但我想知道是否有好的方法来做到这一点?

如您所说,您可以直接手动检查旋转。

这是另一种基于碰撞器的方法:将带有单独触发碰撞器的不可见子游戏对象放在骰子的每个面上,然后每当其中一个与 table 表面碰撞时,记录相反的数量脸的一侧。

您可以通过以下方式获取面部方向:

  • transform.up
  • -transform.up
  • transform.right
  • -transform.right
  • transform.forward
  • -transform.forward

您需要将每个方向与适当的面值相关联。朝上的一侧将是 Dot Product 与 Vector3.up(世界“向上”方向)最大的一侧。点积 1 表示面朝上。请注意,这仅适用于所有方向都是单位向量。

Vector3.Dot(Vector3.up, transform.up);

考虑到它只有 6 个(如果你聪明的话可以是 3 个)if 语句来找到最大值,这可能是最好的方法。如果您正在考虑一般情况,即支持任何模具形状和面数,您可以存储一个结构列表,其中包含表示面方向 + 面值的 lambda 表达式,然后使用 Linq Max()。