2016-02-12 3 views
2

Я хочу повернуть свою 3d модель на основе касания плеера в направлении x и y. Так что я обнаруживаю горизонтальное и вертикальное касание.Ограничить вращение 3d модели в Unity 3d

Но в этом я хочу ограничить вращение направления. Для этого я попробовал несколько кодов и задал предложения на других форумах. В настоящее время никаких предложений для меня не работает.

В принципе, я не хочу вращение направления z. Следующий образ дает вам больше идей, где все происходит неправильно. Модель полностью повернута в направлении z. Я хочу остановить это.

enter image description here

Вот мои несколько попыток достичь то же самое.

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

EDIT: Я попытался с ограничением Rigidbody во вращение г. Так что мой инспектор выглядит примерно так.

enter image description here

EDIT: После обсуждения развития игры чата. У меня следующий вид кода:

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

попробовать этот http://stackoverflow.com/questions/32813626/constrain-pitch-yaw-roll/32846982#32846982 – minorlogic

+0

Действительно, я не могу в состоянии понять выше ссылке. – Siddharth

+0

Можете ли вы уточнить, что вы подразумеваете под «любым другим направлением»? –

ответ

0

После ваших комментариев, похоже, что вам, возможно, понадобится начать новый.

Основываясь на том, что я понимаю, попробуйте это:

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); 

, и тогда я предложил бы добавил:

public float yRotSpeed; 
public float xRotSpeed; 

, как поля вашего сценария, так что вы можете регулировать скорость вращения в пределах двигатель единства в будущем.

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); 
    }