我想根据玩家在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论坛上运行的讨论 Touch based rotation of 3d model
编辑:我试过在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度左右,它只是向任何其他方向旋转。
答案 0 :(得分:0)
好的评论之后,听起来你可能需要重新开始。
根据我的理解,试试这个:
[535, 136, 573, 579, 276, 63, 718, 345, 577, 574, 802]
然后我建议添加:
Vector3 rotation = new Vector3();
rotation.y = -touch.deltaPosition.x * Time.deltaTime * yRotSpeed;
rotation.x = touch.deltaPosition.y * Time.deltaTime * xRotSpeed;
rotation.z = 0;
transform.Rotate(rotation);
作为脚本的字段,以便您可以在将来调整单位引擎内的旋转速度。
答案 1 :(得分:0)
就这样做。
// private variables
private Vector3 inputRotation; // difference of input mouse pos and screen mid point
private Vector3 mouseinput;
// Update is called once per frame
void Update() {
FindPlayerInput();
}
void FindPlayerInput()
{
mouseinput = Input.mousePosition;
mouseinput.z = 0; // for no rotation in z direction
inputRotation = mouseinput - new Vector3(Screen.width * 0.5f, Screen.height * 0.5f,0);
ProcessMovement();
}
void ProcessMovement(){
transform.rotation = Quaternion.LookRotation(inputRotation);
}