2016-05-31 2 views
0

Ich versuche, ein Ball-Tutorial (https://unity3d.com/learn/tutorials/projects/roll-ball-tutorial) auf eine andere Weise zu vervollständigen, indem Sie zwei Bälle hinzufügen. So können zwei Spieler das Spiel spielen. Aber das Problem, das ich gegenüberstelle, ist, dass ich die bevorzugten Schlüssel für den zweiten Spieler so konfigurieren will, wie der erste Spieler die traditionellen Pfeiltasten benutzt und der zweite Spieler w, a, s, d benutzt, um sich links unten nach rechts zu bewegen ... meine Cis-Code für den ersten Spieler ist dies ...Verwenden von bevorzugten Tasten, um einen Player in Einheit zu verschieben

using UnityEngine; 
using System.Collections; 

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);    //Values for movement vector 3 takes three arguments like x y z for positions. 

    rb.AddForce (movement * speed); 
} 
} 

Lassen Sie mich wissen, ob jemand Lösung

+0

Der Ball bewegt sich nicht nach oben oder unten. Du meinst vorwärts, rückwärts, links und rechts? – Programmer

+0

Verschieben ist nicht das Problem, das Problem besteht darin, verschiedene Tasten für die Bewegung für jeden Spieler einzustellen, so dass beide Spieler separate Steuerung auf der gleichen Tastatur haben. – Sami

Antwort

2

Beantwortet Ähnliche Fragen here.

Die einfachste Lösung, die erfordert, dass Sie Ihre Schlüsselsteuerelemente nicht ändern, ist die Verwendung von Input.GetAxis at-all. Ermitteln Sie jeden Tastendruck mit Input.GetKey() und deren keycodes Enum. Problem gelöst! Ordnen Sie nun die beiden Kugeln aus dem Editor zu. Sie können es leicht ändern, um mit einem Ball zu arbeiten, wenn Sie das wollen.

using UnityEngine; 
using System.Collections; 

public class PlayerController : MonoBehaviour 
{ 
    public float speed = 80.0f; // Code for how fast the ball can move. Also it will be public so we can change it inside of Unity itself. 
    public Rigidbody player1RB; //Player 1 Rigidbody 
    public Rigidbody player2RB; //Player 2 Rigidbody 


    //Player 1 Code with aswd keys 
    void Player1Movement() 
    { 
     if (Input.GetKey(KeyCode.A)) 
     { 
      player1RB.AddForce(Vector3.left * speed); 

     } 

     if (Input.GetKey(KeyCode.D)) 
     { 
      player1RB.AddForce(Vector3.right * speed); 

     } 

     if (Input.GetKey(KeyCode.W)) 
     { 
      player1RB.AddForce(Vector3.forward * speed); 

     } 

     if (Input.GetKey(KeyCode.S)) 
     { 
      player1RB.AddForce(Vector3.back * speed); 

     } 
    } 

    //Player 2 Code with arrow keys 
    void Player2Movement() 
    { 
     if (Input.GetKey(KeyCode.LeftArrow)) 
     { 
      player2RB.AddForce(Vector3.left * speed); 

     } 

     if (Input.GetKey(KeyCode.RightArrow)) 
     { 
      player2RB.AddForce(Vector3.right * speed); 

     } 

     if (Input.GetKey(KeyCode.UpArrow)) 
     { 
      player2RB.AddForce(Vector3.forward * speed); 

     } 

     if (Input.GetKey(KeyCode.DownArrow)) 
     { 
      player2RB.AddForce(Vector3.back * speed); 

     } 
    } 

    // Update is called once per frame 
    void FixedUpdate() 
    { 
     Player1Movement(); 
     Player2Movement(); 
    } 
} 
1

haben Sie mehr Eingänge in edit -> project settings -> Input definieren können. Um weitere Eingaben hinzuzufügen, erhöhen Sie einfach den Größenwert und konfigurieren Sie die neuen Werte. Geben Sie mindestens den Namen und die Schlüssel für die neuen Eingaben ein. Zuletzt, rufe in deinem Code die neuen Eingänge für Spieler 2 mit den Namen auf, die du in den Projekteinstellungen angegeben hast.

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

    // example for player 2 
    float moveHorizontalPlayer2 = Input.GetAxis("HorizontalPlayer2"); 
    float moveVerticalPlayer2 = Input.GetAxis("VerticalPlayer2"); 

    Vector3 movement = new Vector3 (moveHorizontalPlayer2 , 0.0f, moveVerticalPlayer2); 

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

Sie müssen jedoch sicherstellen, dass die vordefinierten Eingaben alternative Schlüssel enthalten, die Sie aus diesen entfernen müssen, wenn Sie sie für Ihre verwenden möchten. Nicht ganz sicher, aber ich denke, horizontal und vertikal sind jeweils für a/d/links/rechts und s/w/down/up konfiguriert. –

Verwandte Themen