我想根据玩家在 x 和 y 方向上的触摸来旋转我的 3d 模型。所以我正在检测水平和垂直触摸。
但在这我想限制z方向的旋转。为此,我尝试了多个代码并在其他论坛中提出建议。目前没有任何建议对我有用。
基本上,我不希望 z 方向旋转。下图给你更多的想法,哪里出了问题。模型完全旋转到 z 方向。我想阻止这一切。
这是我多次尝试实现相同的目标。
void Update ()
{
// If there are two touches on the device...
if (Input.touchCount == 1 && GameManager.Instance.IsGameStart) {
// Store currnet touch.
Touch touch = Input.GetTouch (0);
// transform.RotateAround (transform.position, Vector3.up, - touch.deltaPosition.x Time.deltaTime 15f);
// transform.RotateAround (transform.position, Vector3.right, touch.deltaPosition.y Time.deltaTime 15f);
// transform.RotateAround (transform.position, Vector3.forward, 0f);
// transform.Rotate (Vector3.up, -touch.deltaPosition.x Time.deltaTime 10f, Space.World);
// transform.Rotate (Vector3.right, touch.deltaPosition.y Time.deltaTime 5f, Space.World);
// transform.Rotate (Vector3.forward, 0f, Space.World);
myRigidbody.MoveRotation (myRigidbody.rotation Quaternion.Euler (Vector3.right touch.deltaPosition.y Time.deltaTime 5f));
myRigidbody.MoveRotation (myRigidbody.rotation Quaternion.Euler (Vector3.up -touch.deltaPosition.x Time.deltaTime 10f));
}
}
上面的每个块都代表了限制 z 方向的独特努力。现在请给我一些建议来实现同样的目标。
以及我在 Unity 论坛上进行 的基于触摸的 3d 模型旋转的讨论
编辑:我尝试在 z 旋转中限制刚体。所以我的检查员看起来像这样。
编辑:在讨论游戏开发聊天室之后。我有以下类型的代码:
float prevZ = transform.eulerAngles.z;
transform.Rotate (Vector3.up, -touch.deltaPosition.x Time.deltaTime 10f, Space.World);
transform.Rotate (Vector3.right, touch.deltaPosition.y Time.deltaTime 5f, Space.World);
Vector3 modelVec = transform.eulerAngles;
modelVec.z = prevZ;
transform.eulerAngles = modelVec;
我刚刚接近解决方案,但现在我的高尔夫球球模型无法从顶部或底部侧阻力移动超过 180 度。我刚刚达到 180 度左右,它只是向任何其他方向旋转。