Unity3d 使轴在旋转中指向上(单位)

Unity3d 使轴在旋转中指向上(单位),unity3d,rotation,axis,Unity3d,Rotation,Axis,我有一个统一体中的物体,其旋转描述如下: x、 y,z,其中它们都是围绕各自轴从0到360的旋转 现在我想找出哪一个向量最指向上。基本上我有一个六面骰子,我用物理来模拟掷骰子。现在我想找出模具的6个面中哪一个朝上。我可以想象一些相当高级的if语句,围绕着单独检查旋转,但我想知道是否有一个好方法可以做到这一点?正如您所说,您可以直接手动检查旋转 这里有一种基于碰撞器的替代方法:将不可见的儿童游戏对象和单独的触发器碰撞器放置在模具的每个面上,然后每当其中一个与桌面碰撞时,记录面对面的编号 您可以使用

我有一个统一体中的物体,其旋转描述如下: x、 y,z,其中它们都是围绕各自轴从0到360的旋转


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

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


这里有一种基于碰撞器的替代方法:将不可见的儿童游戏对象和单独的触发器碰撞器放置在模具的每个面上,然后每当其中一个与桌面碰撞时,记录面对面的编号

您可以使用以下工具获取面部方向:

  • 转变
  • -转变
  • -对
  • 向前转换
  • -向前转换
您需要将每个方向与相应的面值相关联。面朝上的一面将是与矢量3.up(世界“向上”方向)最大的一面。点积为1表示面直接朝上。请注意,这仅适用于所有方向,因为所有方向都是单位向量

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

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

谢谢,这非常容易理解和实现。尽管除了6个骰子之外,我不需要其他的支持,但是你在这方面提供了建议,这还是很好的。它就像一个符咒。不过我很好奇。用3个if语句怎么做?我的代码只访问3个if语句,但我确实需要使用更多的^^^提示:您可以利用-dot(v)=dot(-v)和立方体骰子的对边加起来等于7这一事实。因此,每对边需要一个if语句,并且可以使用点积的符号和7/2的偏移量来计算面值。我不一定推荐这样做,因为你的代码可能更容易理解,每面只有一个“如果”。好的,谢谢你的澄清^^这是一个非常好的主意,我喜欢简单和创造性,不幸的是我更喜欢数学答案,因此我选择了另一个。尽管如此,我还是非常感谢你的帮助^^@SanderSkovgaardHansen-当然。我也喜欢基于向量数学的解决方案!