C#中有没有不用协程的延迟执行的方法?

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

我需要延迟脚本中的某些内容,但我无法使用

coroutine
,因为我需要执行的行依赖于从所写入的
Collider2D other
函数中读取参数
OnTriggerEnter2D

有没有办法在不使用

Destroy(other.gameObject);
的情况下延迟线路
coroutine
的运行?这将在其编写的方法内部工作,不需要外部 IEnumerator 函数?

有问题的

OnTriggerEnter2D
函数:

    void OnTriggerEnter2D(Collider2D other) 
    {
        if (other.tag == "Enemy")
        {
            // Needs to be delayed
            Destroy(other.gameObject);
            
        }
        if (other.tag == "Button")
        {
            Debug.Log("button hit");
            door.MakeSpriteInvisible();
        }
        Destroy(gameObject);
    }

我尝试了普通的协程,但我需要在

OnTriggerEnter2D
中定义的“other”参数来运行该行。如果有一种方法可以访问从另一个函数传递到一个函数的参数,这也可以工作。

c# unity-game-engine coroutine
1个回答
0
投票

首先,

Destroy
方法在销毁之前有一个带有延迟的覆盖。您可以在API参考中查看。

此外,您始终可以使用任何参数启动协程,例如

...
    StartCoroutine(MyAwesomeRoutine(1f));
...

IEnumerator MyAwesomeRoutine(float justSomeParameter)
{
...
}

您还可以在 API 参考

中找到它
© www.soinside.com 2019 - 2024. All rights reserved.