C# Unity 2D:WaitForSeconds()延迟不是';行不通
我试图在C# Unity 2D:WaitForSeconds()延迟不是';行不通,c#,unity3d,C#,Unity3d,我试图在player.healthDisplay.color=color.green和player.healthDisplay.color=color.white但此时返回新的WaitForSeconds(5)和 player.healthDisplay.color=color.white无效 这是我的密码: public void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player"))
player.healthDisplay.color=color.green代码>和player.healthDisplay.color=color.white
但此时返回新的WaitForSeconds(5)代码>和
player.healthDisplay.color=color.white代码>无效
这是我的密码:
public void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag("Player"))
{
StartCoroutine(ColorChange());
}
}
IEnumerator ColorChange()
{
player.health++;
Instantiate(effect, transform.position, Quaternion.identity);
Destroy(gameObject);
player.healthDisplay.color = Color.green;
//until here code the code is working
yield return new WaitForSeconds(5);
player.healthDisplay.color = Color.white;
}
如果您阅读了monobhavior.startcroutine
文档,其中说明:
“当MonoBehavior被销毁或者MonoBehavior所连接的游戏对象被禁用时,协同程序也会停止。当MonoBehavior被禁用时,协同程序不会停止。”[]
因此,有一个简单的解决方法:
IEnumerator ColorChange()
{
player.health++;
Instantiate(effect, transform.position, Quaternion.identity);
gameObject.SetActive(false);
player.healthDisplay.color = Color.green;
yield return new WaitForSeconds(5);
player.healthDisplay.color = Color.white;
Destroy(gameObject);
}
如果您想知道为什么player.healthDisplay.color=color.green
仍然有效
“实际对象销毁始终延迟到当前更新循环之后,但始终在渲染之前完成。”[]您正在销毁包含此脚本的游戏对象
Destroy(gameObject);
// color changing code, etc..
一旦游戏对象被销毁,该脚本将不再运行
您可以做的是(如果您需要立即销毁此游戏对象),将脚本添加到健康显示中,以处理颜色更改