Ich möchte eine First-Person-Kamera erstellen, die sich mit der Maus dreht.
Ich habe mir die Input.GetAxis Scripting API-Seite angesehen und einen Beispielcode gefunden, den ich am Ende meines Beitrags eingefügt habe. Als ich es ausprobierte, stellte ich fest, dass es zwar die gleiche Grundfunktionalität hat, die ich mir erhofft hatte, die Kamera jedoch nicht parallel zur xz-Ebene hält, insbesondere wenn die Maus im Kreis bewegt wird. Nach einer Weile würde sich die Kamera in einem merkwürdigen Winkel befinden und der Player wäre völlig durcheinander!
Gibt es eine schnelle Lösung für diesen Code, die die Kamerabewegung irgendwie einschränken würde, oder gibt es eine bessere Möglichkeit, die Kamera zu drehen?
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public float horizontalSpeed = 2.0F;
public float verticalSpeed = 2.0F;
void Update() {
float h = horizontalSpeed * Input.GetAxis("Mouse X");
float v = verticalSpeed * Input.GetAxis("Mouse Y");
transform.Rotate(v, h, 0);
}
}
Antworten:
Das Problem ist, dass Sie die vorhandene Rotation aktualisieren, anstatt sie selbst zu verfolgen und bei jedem Update zu ersetzen.
Wenn Sie die Rotation aktualisieren, wird Ihre neue Rotation mit der alten Rotation kombiniert, was zu unerwartetem Verhalten führt.
Die Lösung besteht darin, Ihre akkumulierte Rotation zu verfolgen und die Rotation bei jeder Aktualisierung mit Ihren neuen Werten vollständig zurückzusetzen.
Gutschrift wo fällig, fand ich die Antwort hier: Unity Answers: Wie-sperren-oder-setzen-die-Kameras-Z-Drehung-auf-Null
Arbeitscode:
Hauptunterschiede:
quelle
Was ist, wenn Sie die Kamera zu einem leeren Spielobjekt machen? Dann verwalten Sie mit einem Skript die Drehung des leeren Spielobjekts relativ zum UP-Vektor. (MouseX) Mit einem anderen Skript, das dem Kamera-Spielobjekt zugeordnet ist, verwalten Sie die Rotation relativ zum rechten Vektor (MouseY).
quelle