有一个时钟的手,玩家一旦开始旋转(拖动)CCW直到他完成一个完整的旋转 . (没有提升阻力)
当玩家开始旋转时,我试图将旋转锁定到仅CCW方向 . 我从以下链接获得了帮助:[检测方向] [1] @ BobBobson108
这是实际发生的事情的gif:Demo
void OnMouseDrag()
{
//rotation
Vector3 mousePos = Input.mousePosition;
mousePos.z = 5.23f;
Vector3 objectPos = Camera.main.WorldToScreenPoint(transform.position);
mousePos.x = mousePos.x - objectPos.x;
mousePos.y = mousePos.y - objectPos.y;
angle = Mathf.Atan2(mousePos.y, mousePos.x) * Mathf.Rad2Deg;
transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle - 90f));
hand_vector = transform.up;
cross_product = Vector3.Cross(ref_vector, hand_vector);
dot_product = Vector3.Dot(cross_product, transform.forward*-1);
//Debug.Log("Hand Vector: " + hand_vector);
//Debug.Log("Ref Vector: " + ref_vector);
Debug.Log(cross_product);
Debug.Log(dot_product);
}
我试图调试交叉积的值,但是即使当玩家开始向后旋转时,合成矢量的方向似乎也是相同的 .
此外,只有当玩家从默认位置(即12点)开始沿CW方向旋转时,叉积矢量才改变方向 .
我在使用四元数和旋转方面的经验非常少 . 任何帮助都将非常有帮助 . 谢谢 !!!
2 回答
使用http://docs.unity3d.com/ScriptReference/Vector3.Angle.html函数获取角度的值 . 您应该根据方向获得正/负值 .
如果符号不是您想要的正确方向,则可以锁定旋转 .
我设法找到了上述问题的解决方案 . 在这里,我发布我的解决方案,以防将来遇到类似情况的任何人 .
我正在设置方向bools使用这个:
希望这可以帮助 !!!