在我的游戏中,收起一个球而又错过一个球只会在重置球之前给您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;
}
}
答案 0 :(得分:1)
您的代码中发生的是oneCollected的值几乎立即更改。 您可以使用协程或Invoke等待几秒钟,然后将oneCollected的值更改为false。
您可以创建一个函数来重置oneCollected的值。
public void ResetOneCollected()
{
oneCollected = false;
}
然后使用Invoke调用它。在您的onCollision检测方法内部,替换
oneCollected = false;
与
Invoke("ResetOneCollected", 1);
,这将在1秒钟后调用ResetOneCollected方法。