我目前正在编写两个脚本:一个在接触后两秒后摧毁一个目标,另一个激活下一个目标。尽管我对两者都使用了协程和调用,但我仍然没有延迟。有什么想法吗? “FootballContact”脚本连接到足球,“TargetActivate1”脚本连接到第一个目标
我尝试使用协程来延迟目标被销毁,但我的新“TargetActivate1”脚本使目标的激活与目标被销毁的时间重叠——使销毁/激活过程即时进行。因此,我尝试在新脚本上使用相同的协程函数——它没有用。网上说我不能同时运行两个协程,所以我将协程更改为“调用”。它仍然不起作用,我对下一步该怎么做感到很困惑。感谢您的帮助! :)
对两个脚本使用 IEnumerator 以使其更容易😁
它不起作用的原因是因为您需要在 IEnumerator 函数中放置您想在延迟后运行的代码。
协程的工作原理是,当您调用 StartCoroutine 时,IEnumerator 函数将被调用,并且独立于您调用它的方法运行。因此,StartCoroutine 下的任何代码都将照常运行。
例如,对于您的 FootballContact 脚本,代码应如下所示:
private IEnumerator Delay(){
yield return new WaitForSeconds(2f);
DestroyObject(target);
}
销毁代码本身有延迟,但如果你想要更专业的方法,请阅读
Async
。
Destroy(gameObject, 2f);
异步示例:
private async void OnTriggerEnter(Collider other)
{
Debug.Log("Before Wait!");
await Task.Delay(2000); // in milliseconds.
Debug.Log("After Wait!");
}