【发布时间】:2019-12-27 15:36:10
【问题描述】:
我正在使用协程来管理我游戏中通电的冷却时间。当玩家与加速道具发生碰撞时,他们将获得效果并开始冷却,因此他们在一定时间内无法再次使用它。
我正在使用协程来管理这些冷却时间 - 将 gameObject 设置为 false,等待冷却时间,然后将 gameObject 设置回 true。
我的代码:
IEnumerator RespawnTime ()
{
gameObject.SetActive(false);
Debug.Log("disabled");
yield return new WaitForSeconds(3f);
gameObject.SetActive(true);
Debug.Log("enabled");
}
private void OnCollisionEnter2D (Collision2D collision)
{
// Health stuff goes in here.
Debug.Log("Health regen!");
// Start cooldown
StartCoroutine(RespawnTime());
}
然而,游戏对象一旦被禁用就再也不会被激活。我认为问题不在于产量,因为注释掉 SetActive 语句会导致两个调试消息都在正确的时间显示。
编辑:
对不起,我没有澄清。我知道协程不能在禁用的GameObjects 上运行。我制作了一个PowerUpManager 脚本,但它不起作用。代码:
在PowerUp 脚本中,在OnCollisionEnter2D 方法中
StartCoroutines(PowerUpManager.RespawnTime(gameObject))
在PowerUpManager 脚本中
public static IEnumerator RespawnTime(GameObject powerUp)
{
powerUp.SetActive(false);
yield return new WaitForSeconds(3f);
powerUp.SetActive(true);
}
【问题讨论】:
-
coroutines禁用对象也被禁用。你必须在其他游戏对象中运行这个协程。