2016-04-14 7 views
1

Ich mache eine Wall-Runner Art von Spiel, wo ich meinen Charakter brauche, um die Wände zu wechseln, wenn die Maustaste gedrückt wird. Ich habe es mit der Schwerkraft arbeiten lassen, aber es gab unerwünschte Effekte. Daher arbeite ich jetzt mit transform.position, aber jetzt bewegt sich der Charakter nur für einen Bruchteil einer Sekunde (ich nehme an, die transform.position wird nur aktiviert, während die Maustaste gedrückt wird).Unity - Ändere die Richtung entlang der x-Achse, wenn GetMouseButtonDown

Wie kann ich die Richtung beim Mausklick ändern, anstatt nur etwas zu bewegen? Benötige ich eine Art While-Schleife oder wo bin ich?

Meine Klasse:

//Variables used by the Player 
public int flyingSpeed; 
bool rightWall = true; 
bool inAir = false; 

// Use this for initialization 
void Start() { 
} 

// Update is called once per frame 
void Update() { 
//Constantly moves the Players position along the Y-axis 
    if (inAir == false) { 
     if (Input.GetMouseButtonDown (0) && rightWall == true) { 
      transform.position += Vector3.left * flyingSpeed * Time.deltaTime; 
      rightWall = false; 
      inAir = true; 
     } else if (Input.GetMouseButtonDown (0) && rightWall == false) { 
      transform.position += Vector3.right * flyingSpeed * Time.deltaTime; 
      rightWall = true; 
      inAir = true; 
     } 
    } 
} 

void OnCollisionEnter2D(Collision2D coll) { 
    inAir = false; 
} 

Antwort

0

Die Input.GetMouseButtonDown Methode nur true zurück auf den ersten Frame, dass die Schaltfläche geklickt wird, so dass Ihre bewegenden Operationen nur einmal ausgeführt werden, was nicht ausreicht, um die Wände zu wechseln.

zwischen den Wänden wechseln, können Sie eine der folgenden Möglichkeiten:

  1. Bewegen Sie den Spieler sofort, wenn die Maus, indem transform.position
  2. Machen Sie eine Funktion, die, wenn der Spieler auf prüft geklickt wird, die rechte oder linke Wand (rufen wir WallCheck). Dann wird der rightWall Wert der Maus jedes Mal ändern wird clicked.And dann fügen Sie diese zu Ihrer Update-Methode

    if (WallCheck() != rightWall) transform.position += rightWall ? Vector3.left : Vector3.right * flyingSpeed * Time.deltaTime;

Verwandte Themen