禁用 GameObject 但继续 运行 Coroutine

Disable GameObject but continue to run Coroutine

我有一个 BonusController 脚本作为 Bonus 游戏对象的一个​​组件。此 Bonus 必须在碰撞时被摧毁,但必须 "act" 几秒钟。我为此启动了一个协程,但脚本停止了执行(我认为这是因为我将 gameObject 设置为非活动状态)。这是BonusController的代码:

void OnTriggerEnter2D(Collider2D col)
{
    StartCoroutine(speedUp(1));
    gameObject.SetActive(false);
}

IEnumerator speedUp(float seconds)
{
    Debug.Log("before");
    yield return new WaitForSeconds(seconds);
    Debug.Log("after"); // <--- This is never called
}

如何在删除对象的同时不停止协程脚本的执行?

您不能只禁用 mesh renderercollider 吗?这样游戏对象仍然存在,但用户将看不到它。

你不能拉动你站立的地面。 :)

只需禁用 SpriteRenderer,因为您正在使用 2D 方法。并保持对象活动并启用。

{
    StartCoroutine(speedUp(1));
    //gameObject.SetActive (false);
    GetComponent<SpriteRenderer> ().enabled = false;
    GetComponent<Collider2D> ().enabled = false;
    // Above line will deactivate the first collider it will find.
}

IEnumerator speedUp(float seconds)
{
    Debug.Log("before");
    yield return new WaitForSeconds(seconds);
    Debug.Log("after"); // <--- This is never called
}

为了在一段时间后销毁对象,在yield之后在协程内部调用destroy。

yield return WaitForSeconds(second);
Destroy(this);

现在它被正确销毁并释放内存,而不是仍然在那里,不可见,但占用资源。