2017-02-01 17 views
0

В настоящее время я работаю над игрой в Unity и не могу что-то сделать. Я хочу, чтобы при нажатии клавиши x раз (A ближняя атака) персонаж останавливался до тех пор, пока вы не нажмете еще одну кнопку в течение x раз, то есть 10 раз. Игрок должен иметь возможность атаковать, т. Е. 3 раза, но когда он это делает, персонаж переходит в состояние «поддельной смерти», в котором он больше не может ходить или атаковать ближнего боя с игроком. В это время игрок должен нажать еще один ключ в течение 10 раз, а затем игрок сможет снова пройти атаку в ближнем бою. Я думал, что могу понять это с помощью простого выражения if и else, но до сих пор не работал. По какой-то причине моя другая часть выполняется немедленно, а не после атаки в ближнем бою в 5 раз.Когда ввод нажат x раз что-то сделать

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. 
     } 
    } 
} 

ответ

3

Кажется, вы несколько перепутали свои условия. Как это написано в настоящее время, ваш код будет выполнять блок else всякий раз, когда Input.GetButtonUp ("Fire3") является ложным (иначе. Когда Fire3 не только был выпущен), независимо от того, сколько раз игрок атаковал; два написанных вами заявления независимы друг от друга.

Заявление else должно быть действительно прикреплено к attackNumber, а не к результату Input.GetButtonUp ("Fire3"). Кроме того, вы можете отключить скрипт игрока сразу после того, как была сделана атака, после обновления attackNumber.

Вот код перемешивается вокруг немного, который должен быть ближе к тому, что вы хотите достичь:

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); 
    } 
} 

Надеется, что это помогает! Дайте знать, если у вас появятся вопросы.

 Смежные вопросы

  • Нет связанных вопросов^_^