2017-12-29 22 views
-2

Ich versuche, 3 verschiedene Angriffe in der Einheit zu spielen, wenn der Benutzer mehrmals hintereinander den gleichen Boden drückt, ändert sich der Angriff. habe ich versucht, diesen Code, es ist ok aber nicht die Anzahl der AngriffMulti attack in unity

if (Input.GetKeyDown(KeyCode.Q) && attTraking == 0) 
{ 
    anim.SetTrigger(attackOneToHash); 
    attTraking = 1; 
} 

else if (Input.GetKeyDown(KeyCode.Q) && attTraking == 1) 
{ 
    anim.SetTrigger(attackTwoToHash); 
    attTraking = 2; 

} 

else if (Input.GetKeyDown(KeyCode.Q) && attTraking == 2) 
{ 
    anim.SetTrigger(attackThreeToHash); 
    attTraking = 0; 
} 

Dann füge ich sonst und es versäumt, auf 0 den Code attTraking gesetzt verfolgen die erste IF-Anweisung zu beenden.

+0

es ist eine Klasse fehlgeschlagen – AMA91

Antwort

1

Sie haben nicht die gesamte Klasse angezeigt, so ist es schwer zu sagen.

Dennoch meine Vermutung ist, dass attTraking zurückgesetzt wird jedes Mal auf Null, weil

  • Sie erklären es lokal für die Funktion (es auf Klassenebene deklariert werden soll)
  • Sie es auf Null zurückgesetzt Irgendwie bevor die Methode die Zeit hat, ein zweites/drittes Mal aufgerufen zu werden.

Wenn Sie eine andere Anweisung wie folgt hinzufügen ein:

else 
{ 
    attTraking = 0; 
} 

dann attTracking auf Null bei jeder Aktualisierung zurückgesetzt werden, wenn die Taste ‚Q‘ nicht gedrückt wird (die vollständig Ihre Logik ungültig von „die Taste mehrmals drücken“

1

Pac0 Antwort für Ihr Szenario richtig ist, aber ich wollte nur in läuten und sagen, dass es einen besseren Weg, dies zu tun ..

int maxCount = 2; 
int attCount = 0; 
public int[] AttackTriggers; //Add the trigger ID's to the array via the editor. 
public float attackResetTime = 1.0f; //Will take one second to reset counter. 

if(Input.GetKeyDown(KeyCode.Q)) 
{ 
    anim.SetTrigger(AttackTriggers[attCount]); 
    attCount++; 
    if(attCount > maxCount) 
    { 
    attCount = 0; 
    } 
} 

Aber dann müssen Sie überprüfen, ob Sie Ihren attCount zurück auf 0 zurücksetzen sollten, wenn der Benutzer nicht Q in einer bestimmten Zeit gedrückt hat. Dies kann mit Coroutines erreicht werden.

public IEnumerator ResetAttCount() 
{ 
    yield return new WaitForSeconds(attackResetTime); 
    attCount = 0; 
} 

Jetzt können wir die Zählung basierend auf der Zeit zurückzusetzen, aber wir müssen noch sicherstellen, dass wir starten und die Koroutine an den richtigen Stellen zu stoppen, also lassen Sie uns die if-Anweisung ein wenig Original ändern:

if(Input.GetKeyDown(KeyCode.Q)) 
{ 
    StopCoroutine(ResetAttCount()); 
    anim.SetTrigger(AttackTriggers[attCount]); 
    attCount++; 
    if(attCount > maxCount) 
    { 
    attCount = 0; 
    } 
} 

und dann lassen Sie uns eine weitere Erklärung für die Veranstaltung Key Up hinzufügen:

if(Input.GetKeyUp(KeyCode.Q)) 
{ 
    StartCoroutine(ResetAttCount()); 
} 

Nein jetzt sind wir erfolgreich den Reset des Angriffs Zeitzählung durch den Timer beginnt, wenn die Taste losgelassen wird und Stoppen nachdem die Taste innerhalb einer Sekunde erneut gedrückt wurde.

+1

Ich versuchte nur zu erklären, warum OPs Antwort falsch war. Ihre Antwort liefert eine tatsächliche Lösung, +1 – Pac0

Verwandte Themen