我在3D Unity场景中有一些对象绕着Vector3.Zero上的一个大球体旋转。它们可以沿垂直于表面的任何方向移动,并且面向行进方向:
通过计算其下方球面上的表面法线并使用Quaternion.LookRotation,将它们的旋转设置为垂直于每帧:
perpendicularRotation = Quaternion.LookRotation(Vector3.Cross(transform.right, normal), normal);
rigidbody.MoveRotation(perpendicularRotation);
这很好地确保了它们始终以形状的底部面向球体表面的方式围绕球体运行。
我不知道如何增加旋转角度,特别是我希望形状的前端在移动时指向下方45度(想想直升机在向前移动时,鼻子指向下方)以提高速度):
基本上,我要做的是在形状的局部空间中创建旋转。如果它们在单个框架中与Vector3.forward完全对齐,我将执行以下操作:
newRotation = Quaternion.Euler(45, 0, 0) * rigidBody.Rotation
但是由于垂直旋转它们的欧拉角遍布整个位置,并且由于我需要将其欧拉角固定旋转(即,它不会保持每帧旋转45度,所以在移动时仅保持45度)我不确定如何在其相对方向上增加向下旋转。旋转确定后,我可以按原始的“前进”方向处理运动。
我尝试了Quaternion和Vector3方法的如此众多的组合,以至于很难记住它们,可能不值得在此处张贴一堆无用的注释代码!我想我可能已经把这个复杂化了。