在短时间内检测到两个碰撞

时间:2018-09-17 17:33:44

标签: unity3d timer boolean

在我的游戏中,收起一个球而又错过一个球只会在重置球之前给您1分。如果您在短时间内收集了两者,您将获得10分。我曾尝试实现计时器,但无法获得任何有效的方法(以下代码未包含其中之一)。

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 :(得分:1)

您的代码中发生的是oneCollected的值几乎立即更改。 您可以使用协程或Invoke等待几秒钟,然后将oneCollected的值更改为false。

您可以创建一个函数来重置oneCollected的值。

public void ResetOneCollected()
{
    oneCollected = false;
}

然后使用Invoke调用它。在您的onCollision检测方法内部,替换

oneCollected = false;

Invoke("ResetOneCollected", 1);,这将在1秒钟后调用ResetOneCollected方法。


您可以看一下文档。
Invoke
Wait for seconds using Coroutine