2017-12-22 8 views
0

Ich versuche ein Spiel in Unity zu erstellen, wo sich der Spieler nur in die Richtung bewegen kann, aber der folgende Code erlaubt es dem Spieler sich in allen 4 zu bewegen Richtungen. (Dies ist für ein 3D-Projekt)Wie man einen Spieler nur in 1 Richtung bewegt (Unity)

Jede Hilfe wäre willkommen! Vielen Dank!

public class PlayerController : MonoBehaviour { 

    public float speed; 

    private Rigidbody rb; 

    void Start() { 
     rb = GetComponent<Rigidbody>(); 
    } 

    void FixedUpdate() { 
     float moveHorizontal = Input.GetAxis("Horizontal"); 
     float moveVertical = Input.GetAxis("Vertical"); 

     Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); 

     rb.AddForce(movement * speed); 
    } 
} 
+0

was muss versucht werden, um es zu erreichen? Ihr Code erlaubt dem Spieler buchstäblich, sich horizontal und vertikal zu bewegen. Verstehen Sie den Code, den Sie gepostet haben, und dann werden Sie verstehen, wie Sie erreichen können, was Sie wollen. –

Antwort

0

Aus dem Code, den Sie gepostet haben, weiß ich nicht, wo Sie die Ausrichtung des Spielers speichern. Ich nehme jedoch an, dass es als Quaternion gespeichert ist. Wenn Sie ein Spieler Rotation quaternion playerRotation genannt haben, dann können Sie diese (Warnung - ungetestet) tun:

Vector3 input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); 
Vector3 normal = playerRotation * Vector3.forward; 
Vector3 movement = Vector3.Dot(normal, input) * input; 

Wenn das Spiel der ersten Person ist, dann können Sie eine Abkürzung nehmen und Camera.current.transform.forward nur stattdessen von der normal Vektor.

Dadurch wird die Eingangsrichtung auf die Normale mit der Ausrichtung des Spielers projiziert, sodass Ihre Bewegungskraft nur in dieser Richtung wirken kann.

Verwandte Themen