2016-05-06 7 views
0

Ich versuche, eine einfache Steuerung für meine Kamera in Unity zu implementieren. Erfolgreich reagiere ich auf gedrücktes w, a, s, d und bewege die Kamera. Ich möchte auch eine Drehung implementieren (später Drehung mit der Maus, aber zuerst eine Drehung mit den Tasten e und q). Ich habe dieses Skript geschrieben, um meine Kamera zu aktualisieren, aber das Problem: Wenn Sie umdrehen, funktioniert der Update-Prozess für meine Schlüssel w, a, s und d nicht richtig. F. e. Ich möchte nach links gehen, aber ich gehe nach rechts. Ich habe keine Ahnung, wie ich dieses Problem lösen kann. Kann mir jemand eine Idee geben? Hier ist mein Quellcode. Ich hoffe du verstehst was mein Problem ist.Unity 5 Kontrolle über wasd mit Rotation

 float translation_v = -(Input.GetAxis ("Vertical")) * 4.0F * Time.deltaTime; 
    camera.transform.position += new Vector3 (0, 0, translation_v); 
    float translation_h = -(Input.GetAxis ("Horizontal")) * 4.0F * Time.deltaTime; 
    camera.transform.position += new Vector3 (translation_h, 0, 0); 
    float rotation = -(Input.GetAxis ("Rotate_Player")) * 4.0F * Time.deltaTime * 10F; 
    camera.transform.Rotate(new Vector3(0F, rotation, 0F)); 
    Vector3 pos = camera.transform.position; 
    pos.y = terrain.GetComponent<Terrain>().SampleHeight(camera.transform.position)+1; 
    camera.transform.position = pos; 
+0

So akzeptieren Sie Antworten auf SO http://i.stack.imgur.com/uqJeW.png Versuchen Sie es bei zwei Ihrer anderen Fragen. Ich garantiere Ihnen, dass es funktioniert. Wenn Sie damit fertig sind, antworten Sie mir und ich zeige Ihnen, warum Ihr Code nicht funktioniert. Sonst, viel Glück. – Programmer

Antwort

0

Zuerst Unity verfügt über Standard-Komponenten für die erste Person, Controller und Sie haben es nicht von Grund auf neu zu machen, überprüfen Assets -> Import Package -> Charaktere.

Angenommen, Sie tun es für Bildungszwecke und wollen es nur selbst implementieren: so weit ich es verstanden habe, möchten Sie in Richtung der Kamera bewegen. Also, was Sie brauchen, ist der Wert, den Sie camera.transform.position durch aktuelle Kameradrehung hinzufügen zu multiplizieren, das heißt statt

camera.transform.position += new Vector3 (0, 0, translation_v); 

Verwendung

camera.transform.position += (camera.transform.rotation * new Vector3 (0, 0, translation_v)); 

und gleiche gilt für horizontal. Sie können auch erwägen, das Rotationsupdate vor der Positionsaktualisierung zu verschieben. Der endgültige Code würde wie folgt aussehen:

float rotation = -(Input.GetAxis ("Rotate_Player")) * 4.0F * Time.deltaTime * 10F; 
camera.transform.Rotate(new Vector3(0F, rotation, 0F)); 

float translation_v = -(Input.GetAxis ("Vertical")) * 4.0F * Time.deltaTime; 
camera.transform.position += (camera.transform.rotation * new Vector3 (0, 0, translation_v)); 
float translation_h = -(Input.GetAxis ("Horizontal")) * 4.0F * Time.deltaTime; 
camera.transform.position += (camera.transform.rotation * new Vector3 (translation_h, 0, 0)); 

Vector3 pos = camera.transform.position; 
pos.y = terrain.GetComponent<Terrain>().SampleHeight(camera.transform.position)+1; 
camera.transform.position = pos; 
Verwandte Themen