【发布时间】:2019-02-03 08:15:35
【问题描述】:
我正在制作一款玩家可以攀爬任何表面的游戏。
当玩家与表面碰撞时,我会得到该碰撞的法线。这是玩家“向上”向量应对齐的方向:
现在,unity 提供了一种方便的方法来将两个向量转换为旋转:
Quaternion.LookRotation(forward, up);
它需要一个向上向量和一个向前向量。正如我提到的,我已经有了向上向量。我的问题是如何获得前向向量。
我目前的解决方案是通过在法线中翻转某个轴来计算前向向量:
normal = collision.contacts[0].normal;
Vector3 forward = Vector3.zero;
forward = new Vector3(0, -normal.z, normal.y);
transform.rotation = Quaternion.LookRotation(forward, normal);
这在大多数情况下看起来都不错:
但是当玩家与法线只有 x 值的表面发生碰撞时,前向矢量为 0,0,0:
我知道我还必须考虑法线的 x 分量以避免这种情况,但我不确定在哪里插入。
更多地考虑这个基于 Unity 的问题,它涉及引擎提供的数学函数,而不是纯粹的数学相关问题。但任何答案当然是受欢迎的。
【问题讨论】:
标签: unity3d math rotation quaternions euler-angles