Как я могу создать таймер обратного отсчета бомбы? - PullRequest
0 голосов
/ 08 декабря 2018

Я делаю игру Unity, в которой используются бомбы и взрывы.Я хочу ограничить игрока способностью устанавливать только 1 бомбу каждые 3 секунды, первая бомба взорвется, а затем игрок сможет установить другую, таймер, который я создал для этого, похоже, не работает.

Когда я играю в игру, игрок может заложить бомбу, но больше не может устанавливать бомбы после ожидания более 3 секунд.Правильна ли для этого логика времени?

public class CombatController : MonoBehaviour {

    //public GameObject enemy;
    [SerializeField]
    public GameObject Bomb;
    public GameObject Explosion;
    public int timer = 0;


    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {

        BombKeyPress ();   //Check if the user wants to plant the bomb.     
    }


    //Method BombKeyPress - This method will activate logic for our bombkeypress.
    public void BombKeyPress ()
    {

        if(Input.GetKeyUp(KeyCode.Space)) {
            BombDrop ();

        }

    }

    //Method BombDrop - This method will instantiate our bomb.
    private void BombDrop () 
    {
        //If the timer is not counting, allow the player to drop another.
        if (Bomb && timer <=0) {
            Instantiate (Bomb, this.gameObject.transform.position, Quaternion.identity); //Make New Bombs
            timer = 3; //Set our bomb timer to 3 seconds.

            //Countdown our bombtimer.
            for (int i = 3; i <= 0; i--) {
                timer = i;
                print(i);
            }

            //BombExplosion(); //Now blow up our bomb

        }   

    } 

}

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Вы можете использовать класс Time.Это довольно просто.

Объявите две переменные BombRate и NextBombTime, как показано ниже:

[SerializeField]
private float BombRate=0.5f;// Tweak to value to your requirement.
private float NextBombTime=0f;

Итак, в вашей функции Bomb вы можете получить что-то вроде этого:

void Bomb (){
if(Time.time>NextBombTime){
NextBombTime=Time.time+BombRate;
//Do your bomb stuff here
}
}

Вы также можете использовать сопрограммы, если хотите.

Надеюсь, это поможет.

0 голосов
/ 08 декабря 2018

Вам нужно использовать сопрограмму, чтобы взорвать бомбу, чтобы вы могли написать что-то вроде:

//public GameObject enemy;
[SerializeField]
public GameObject Bomb;
public GameObject Explosion;
public float timer = 0;

private float currentTime;
private bool canBomb = true;


// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
        BombKeyPress ();   //Check if the user wants to plant the bomb.   
}
IEnumerator BombExplosionTimer()
{
    yield return new WaitForSeconds(timer);
    BombExplosion();
    canBomb = true;
}

public void BombExplosion()
{

    //Put your Bomb explosion logic here
}


//Method BombKeyPress - This method will activate logic for our bombkeypress.
public void BombKeyPress ()
{

    if(Input.GetKeyUp(KeyCode.Space) && canBomb) {
        canBomb = false;
        BombDrop ();
        StartCoroutine(BombExplosionTimer());
    }
}



//Method BombDrop - This method will instantiate our bomb.
public void  BombDrop () 
{
    //If the timer is not counting, allow the player to drop another.

        Instantiate (Bomb, this.gameObject.transform.position, Quaternion.identity); //Make New Bombs
        timer = 3; //Set our bomb timer to 3 seconds.

} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...