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

问题描述 投票:0回答:2

我目前正在编写两个脚本:一个在接触后两秒后摧毁一个目标,另一个激活下一个目标。尽管我对两者都使用了协程和调用,但我仍然没有延迟。有什么想法吗? “FootballContact”脚本连接到足球,“TargetActivate1”脚本连接到第一个目标

Football Contact Script

TargetActivate1 Script

我尝试使用协程来延迟目标被销毁,但我的新“TargetActivate1”脚本使目标的激活与目标被销毁的时间重叠——使销毁/激活过程即时进行。因此,我尝试在新脚本上使用相同的协程函数——它没有用。网上说我不能同时运行两个协程,所以我将协程更改为“调用”。它仍然不起作用,我对下一步该怎么做感到很困惑。感谢您的帮助! :)

unity3d
2个回答
1
投票

对两个脚本使用 IEnumerator 以使其更容易😁

它不起作用的原因是因为您需要在 IEnumerator 函数中放置您想在延迟后运行的代码。

协程的工作原理是,当您调用 StartCoroutine 时,IEnumerator 函数将被调用,并且独立于您调用它的方法运行。因此,StartCoroutine 下的任何代码都将照常运行。

例如,对于您的 FootballContact 脚本,代码应如下所示:

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

0
投票

销毁代码本身有延迟,但如果你想要更专业的方法,请阅读

Async

Destroy(gameObject, 2f);

异步示例:

private async void OnTriggerEnter(Collider other)
{
    Debug.Log("Before Wait!");
    await Task.Delay(2000); // in milliseconds.
    Debug.Log("After Wait!");
}
© www.soinside.com 2019 - 2024. All rights reserved.