2017-01-24 2 views
0

Ich rotiere die Kamera mit Gyroskopeingang in Einheit, weil ich möchte, dass der Spieler sich das x, y anschaut. Aber irgendwie gibt es auch Rotation in z. Wie behalte ich die Z-Rotation bei 0, während zumindest die glatte Rotation in x und y ich jetzt habe?Wie kann ich die Drehung in z meiner Kamera sperren, während ich die Kamera mit einem mobilen Gyroskop einspeise?

Wurden googeln, aber haben keine Lösungen gefunden, die die tatsächlich halten z auf 0

Hier ist der Code ich für eine Rotation verwenden, ist es an der Kamera angebracht.

private void Start() 
{ 
    _rb = GetComponent<Rigidbody>(); 
    Input.gyro.enabled = true; 
} 

private void Update() 
{ 
    float gyro_In_x = -Input.gyro.rotationRateUnbiased.x; 
    float gyro_In_y = -Input.gyro.rotationRateUnbiased.y; 

    transform.Rotate(gyro_In_x, gyro_In_y, 0); 
} 

Antwort

1

Meine Vermutung ist das Problem kommt aus der transform.rotation *= Quaternion.Euler(gyro_In_x, gyro_In_y, 0); Linie. Der Versuch, den Rotationswert einstellen, anstatt es zu multiplizieren:

private void Start() 
{ 
    _rb = GetComponent<Rigidbody>(); 
    Input.gyro.enabled = true; 
} 

private void Update() 
{ 
    Vector3 previousEulerAngles = transform.eulerAngles; 
    Vector3 gyroInput = -Input.gyro.rotationRateUnbiased; //Not sure about the minus symbol (untested) 

    Vector3 targetEulerAngles = previousEulerAngles + gyroInput * Time.deltaTime * Mathf.Rad2Deg; 
    targetEulerAngles.z = 0.0f; 

    transform.eulerAngles = targetEulerAngles; 

    //You should also be able do it in one line if you want: 
    //transform.eulerAngles = new Vector3(transform.eulerAngles.x - Input.gyro.rotationRateUnbiased.x * Time.deltaTime * Mathf.Rad2Deg, transform.eulerAngles.y - Input.gyro.rotationRateUnbiased.y * Time.deltaTime * Mathf.Rad2Deg, 0.0f); 
} 

Hope this,

+0

leider nur bemerkte ich in Update verwendet den falschen Code hilft. Die Minus-Symbole basieren auf dem folgenden Tutorial: https://www.youtube.com/watch?v=8ugE1HQPA9g – RomeoTheWizard

+0

Nun, ich denke, mit 'Rotate()' kann auch unerwünschte Drehung auf der Z-Achse (könnte falsch sein) : Hat meine Lösung (manipuliere 'Transform.eulerAngles' direkt) dein Problem gelöst? – Kardux

+1

Ja, danke das funktioniert! Ich benutze diesen Code stattdessen tut es das gleiche, ist aber viel kürzer und klarer zu mir, falls jemand es wissen möchte. float gyro_In_x = -Input.gyro.rotationRateUnbiased.x; float gyro_In_y = -Input.gyro.rotationRateUnbiased.y; transform.eulerAngles + = neuer Vector3 (gyro_In_x, gyro_In_y, 0.0f); – RomeoTheWizard

Verwandte Themen