Coroutine在OnTriggerEnter内不工作



我看到了一些类似的问题,但实际上我看不出哪里做错了。基本上,在关卡失败之前我需要休息一下。

public static int point;
public static int health;
void Awake()
{
point = 0;
health = 3;
}
void OnTriggerEnter(Collider other)
{
if(other.gameObject.tag == "coin")
{
point ++;
EventManager.OnCoinPickUp.Invoke();
Coin.SharedInstance.DisposeOnTrigger(other);
}
else if(other.gameObject.tag == "Obstacle")
{
health --;
EventManager.OnPreLevelFail.Invoke();
if(health == 0)
{
StartCoroutine(WaitBeforeFail());
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex + 1);
}
}
}
IEnumerator WaitBeforeFail()
{
yield return new WaitForSeconds( 1.5f );
EventManager.OnLevelFail.Invoke();
}

它不起作用,所以我很感激你的帮助。

实际情况是,您正在启动协同程序,它实际上会等待1.5秒,然后调用OnLevelFail。您的问题来自于这样一个事实,即更改场景的代码不在协同程序中。因此协同程序被执行,但在那之后场景立即发生变化。如果你把场景的代码放在协同程序中,你就不会有问题,场景会在1.5秒内改变。

你看,启动一个协同程序正是这样,而且只是这样——启动它。它不需要等待,就可以继续执行下面的代码。等待发生在协同游戏本身内部。

最新更新