Обнаружение двух столкновений за короткий промежуток времени - PullRequest
0 голосов
/ 17 сентября 2018

В моей игре сбор одного шара и пропуск другого даст вам только одно очко перед сбросом шара. Если вы соберете оба за короткий промежуток времени, вы получите десять очков. Я пытался реализовать таймеры, но не смог получить ничего, что работает (один из них не включен в приведенный ниже код).

bool oneCollected = false;
bool twoCollected = false;
public void OnCollisionEnter2D(Collision2D collision) {
    if (collision.gameObject.name == "ball1" && oneCollected == false) {
        oneCollected = true;
        ball1.transform.position = new Vector2(Random.Range(-5.25f, 5.25f), 7);
        Color newColor = new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f), 1f);
        count += 1;
        oneCollected = false;
    } if (collision.gameObject.name == "ball2" && twoCollected == false) {
        twoCollected = true;
        ball2.transform.position = new Vector2(Random.Range(-5.25f, 5.25f), 7);
        count += 1;
        twoCollected = false;
    } if (oneCollected && twoCollected) {
        ball1transform.position = new Vector2(Random.Range(-5.25f, 5.25f), 7);
        ball2.transform.position = new Vector2(Random.Range(-5.25f, 5.25f), 7);
        count += 10;
        oneCollected = false;
        twoCollected = false;
    }
}

1 Ответ

0 голосов
/ 17 сентября 2018

Что происходит в вашем коде, так это то, что значение oneCollected изменяется практически мгновенно. Вы можете использовать Coroutine или Invoke, чтобы подождать несколько секунд, прежде чем изменить значение oneCollected на false.

Вы можете создать функцию, которая сбрасывает значение oneCollected.

public void ResetOneCollected()
{
    oneCollected = false;
}

А затем вызвать его с помощью Invoke. Внутри вашего метода обнаружения onCollision замените

oneCollected = false; с

Invoke("ResetOneCollected", 1); это вызовет метод ResetOneCollected через 1 секунду.


Вы можете взглянуть на документы.
Invoke
Подождите несколько секунд, используя сопрограмму
...