Как создать штраф времени с сопрограммой в Unity? - PullRequest
0 голосов
/ 07 июня 2018

Я работаю над 2D-игрой в Unity.Игра ограничена 60 секундами.Я хотел бы иметь бомбу замедленного действия, которая вызывает сокращение времени, когда игрок поражает бомбу.

В моем сценарии у меня есть логическое значение, которое называется "hitDetect", и я использую Coroutine() для обратного отсчета.

Я пытался подтолкнуть бомбу к правой стороне, когда игрок ударил бомбу, а затем проверить, происходит ли столкновение, с помощью следующих кодов:

void OnCollisionEnter2D(Collision2D bombcol)
{
    if(bombcol.gameObject.tag == "Enemy")
    {
        bombcol.gameObject.GetComponent<Rigidbody2D>().AddForce(transform.right * hitForce);
    }
    hitDetect = true;
}

Это моя Coroutine() функциячто дает мне возможность иметь игру, которая успешно ограничена 60 секундами, за исключением штрафа времени:

IEnumerator LoseTime()
{
    while (true) {
        yield return new WaitForSeconds (1);
        timeLeft--; 
        if (hitDetect == true)
        {
            timeLeft= timeLeft - 5;
        }
    }
}

Я также установил "hitDetect" как ложное в стартовом теле.

void Start () 
    {
        StartCoroutine("LoseTime");
        hitDetect = false;
    } 

Однако эти методы не приводят меня к успеху.Когда игрок ударил бомбу, штраф времени не работает.Где моя ошибка?Чтобы вы посоветовали?

1 Ответ

0 голосов
/ 07 июня 2018

Я бы порекомендовал рассчитать время в функции Update().Таким образом, вы можете быть уверены, что hitDetect наблюдается каждый кадр, и штраф устанавливается только один раз, если вы сбрасываете hitDetect после вычитания штрафа.

public bool hitDetect = false;
public float timeLeft = 60.0f;
public float penaltyTime = 5.0f;

void Start(){
    timeLeft = 60.0f;
    hitDetect = false;
}

void Update(){
    timeLeft -= Time.deltaTime;
    if(hitDetect){
        timeLeft -= penaltyTime;

        // reset the hit!
        hitDetect = false;
    }

    if(timeLeft < 0.0f){
        // end game?
    }
}

С этим кодом ваше время вычитается один раз из значения штрафаесли hitDetect установлено true вашим столкновением.

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

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