使轴向上旋转(Unity)

时间:2015-03-15 16:48:02

标签: unity3d rotation axis

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

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

2 个答案:

答案 0 :(得分:2)

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

  • 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,如果你聪明),如果声明找到最大可能是最好的方式。如果您正在考虑一般情况,即支持任何模具形状和面数,您可以存储一个结构列表,其中lambda表达式表示面部方向+面值,然后使用Linq Max()。

答案 1 :(得分:0)

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

这是一种替代的基于对撞机的方法:在模具的每个面上放置具有单独触发器碰撞器的不可见儿童游戏对象,然后每当其中一个与桌面碰撞时,记录面部相对侧的数量。