unity3d 为什么我的Unity代码中没有延迟?

qq24tv8q  于 2023-03-03  发布在  其他
关注(0)|答案(2)|浏览(202)

我目前正在编写两个脚本:一个在接触两秒后摧毁一个目标,另一个激活下一个目标。虽然我已经使用了协程和调用,但我仍然没有得到延迟。有什么想法吗?“FootballContact”脚本连接到足球,“TargetActivate 1”脚本连接到第一个目标
Football Contact Script
TargetActivate1 Script
我试着使用一个协程来延迟目标被销毁,但是我的新“TargetActivate 1”脚本使得目标的激活与目标被销毁的时间重叠--使得销毁/激活过程即时。结果,我试着在新脚本上使用相同的协程函数--它不起作用。互联网上说我不能同时运行两个协程,所以我把协程改成了“invoke”。它还是不起作用,我很困惑下一步该怎么做。我很感激任何帮助!:)

wlsrxk51

wlsrxk511#

对这两个脚本都使用IEnumerator以简化操作😁
它不起作用的原因是,您需要将要在延迟之后运行的代码放在IEnumerator函数中。
协程的工作原理是,当你调用StartCoroutine时,IEnumerator函数将被调用,并且独立于你调用它的方法运行。因此,StartCoroutine下的任何代码都将照常运行。
例如,对于FootballContact脚本,代码应如下所示:

private IEnumerator Delay(){
  yield return new WaitForSeconds(2f);
  DestroyObject(target);
}
enxuqcxy

enxuqcxy2#

destroy代码本身有延迟,但是如果你想要一个更专业的方法,请阅读关于Async的文章。

Destroy(gameObject, 2f);

异步示例:

private async void OnTriggerEnter(Collider other)
{
    Debug.Log("Before Wait!");
    await Task.Delay(2000); // in milliseconds.
    Debug.Log("After Wait!");
}

相关问题