我知道有一百万个关于旋转的问题,我尝试了很多东西,但我似乎无法解决这个问题。旋转父轴附近的困难
我能想到正确解释它的唯一方法是用一些描绘得很差的图表,所以在这里!
我有一个父对象,子对象(在这里它被表示为,其中相对的面加起来7的模具),在该图中的轴是父母X,Y,Z方向
启动点:
我希望孩子对象有两个方法,我会打电话给RotateZ
和RotateX
。 RotateZ
和RotateX
应该以90度的步长围绕父母Z和X轴旋转子骰子。
RotateX:
RotateZ:
我目前拥有的代码是这样
void RotateZ(int value) {
transform.rotation *= Quaternion.AngleAxis(90f * value, pivot.transform.forward);
}
void RotateX(int value) {
transform.rotation *= Quaternion.AngleAxis(90f * value, pivot.transform.right);
}
我要指出的是支点的父对象
这似乎工作的伟大,如果孩子开始于(0, 0, 0)
旋转,一边喊RotateZ
或RotateX
与(0, 0, 0)
起点的伟大工程。例如,如果我拨打RotateX
,然后RotateZ
,则会出现此问题。
在初始RotateX
之后,它会看起来像这样,给孩子轮换(90, 0, 0)
。
然后,RotateZ
后所期望的结果是这样的:
而是我结束了这一点:
我真的很茫然,我做错了什么。我有一种感觉,我已经达到了欧拉角所能做到的极限,我需要学习四元数来防止这个问题。我需要什么旋转功能才能获得理想的结果?
你有一个壮观的问题。 **由于任何原因,切勿使用Quaternion。**在Unity手册中提到它们是非常令人困惑的;它们仅用于特定的内部使用,与任何正常的游戏编程完全无关。无论如何,你正在寻找的是** RotateAround **。享受 – Fattie
请注意,您可能只想设置.eulerAngles。 – Fattie
@JoeBlow我最初使用欧拉角度,并有完全相同的问题。我知道他们不会做这项工作的欧拉角度有限制,这就是四元数存在的原因。我认为这可能是其中的一种情况,这就是为什么我尝试切换实施的原因。我知道他们更容易混淆,使用起来也更简单,但如果碰上万向节锁,您没有选择,只能使用它们,我不认为您从不使用它们的观点是正确的。 – GP89