2017-02-01 3 views
0

Ich arbeite gerade an einem Spiel in Unity und kann nichts erledigen. Ich will es so, dass, wenn die Eingabe x Mal gedrückt wird (Ein Nahkampfangriff), der Charakter stoppt, bis Du einen weiteren Knopf x-mal drückst, d. H. 10 mal. Der Spieler sollte in der Lage sein, dreimal zu attackieren, aber wenn er dies tut, tritt der Charakter in einen Zustand des "falschen Todes" ein, in dem er nicht mehr in der Lage ist, mit dem Spieler zu gehen oder einen Nahkampfangriff auszuführen. Zu diesem Zeitpunkt sollte der Spieler 10 Mal einen anderen Schlüssel treffen und dann kann der Spieler wieder im Nahkampfangriff gehen. Ich dachte, ich könnte das mit einer einfachen if-and-else-Anweisung realisieren, habe es aber bisher nicht geschafft. Aus irgendeinem Grund wird mein anderer Teil sofort ausgeführt, anstatt 5 Mal den Nahkampfangriff auszuführen.Wenn die Eingabe x mal gedrückt wird, mache etwas.

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class MeleeCounter : MonoBehaviour { 

    public int attackNumber = 0; 

    public GameObject meleeHitbox; 

    // Update is called once per frame 
    void Update() { 
     if (attackNumber < 5 && Input.GetButtonDown ("Fire3")) 
     { 
      attackNumber++; // increment the counter 
      meleeHitbox.gameObject.SetActive (true); 
      Debug.Log ("Attack"); 
     } 
     if (Input.GetButtonUp ("Fire3")) { 
      meleeHitbox.gameObject.SetActive (false); 
     } 
     else 
     { 
      GetComponent<PlayerController>().enabled = false; 
      Debug.Log ("Too many attacks"); 
      // Here should come a script that if i.e. Fire4 is pressed 10 times reset attackNumer to 0; and set PlayerController to true. 
     } 
    } 
} 

Antwort

3

Es scheint, dass Sie Ihre Bedingungen etwas durcheinander gebracht haben. Wie es derzeit geschrieben wird, wird Ihr Code den else-Block immer dann ausführen, wenn Input.GetButtonUp ("Fire3") falsch ist (aka. Wann auch immer Fire3 nicht gerade veröffentlicht wurde), unabhängig davon, wie oft der Spieler angegriffen hat; Die beiden if-Anweisungen, die Sie geschrieben haben, sind unabhängig voneinander.

Die else-Anweisung sollte wirklich an die attackNumber angehängt werden, nicht das Ergebnis von Input.GetButtonUp ("Fire3"). Darüber hinaus möchten Sie möglicherweise das Player-Skript direkt nach dem Angriff deaktivieren, sobald die attackNumber aktualisiert wurde.

Hier ist der Code um ein wenig gemischt, die näher sein sollte, was Sie erreichen wollen:

void Update() { 
    // Only bother checking for Fire3 if attacks can still be made 
    if (attackNumber < 5) 
    { 
     if (Input.GetButtonDown ("Fire3")) 
     { 
      attackNumber++; // increment the counter 
      meleeHitbox.gameObject.SetActive (true); 
      Debug.Log ("Attack"); 

      // Detect when too many attacks are made only if an attack was just made 
      if (attackNumber == 5) { 
       GetComponent<PlayerController>().enabled = false; 
       Debug.Log ("Too many attacks"); 
      } 
     } 
    } 
    // If attacks can't be made, then check for Fire4 presses 
    else 
    { 
     // Here should come a script that if i.e. Fire4 is pressed 10 times reset attackNumer to 0; and set PlayerController to true. 
    } 

    // Allow disabling of the hitbox regardless of whether attacks can be made, so it isn't left active until after the player is enabled again 
    if (Input.GetButtonUp ("Fire3")) { 
     meleeHitbox.gameObject.SetActive (false); 
    } 
} 

hoffe, das hilft! Lass es mich wissen, wenn du irgendwelche Fragen hast.

Verwandte Themen