Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
252 views
in Technique[技术] by (71.8m points)

c# - Unity 2D: WaitForSeconds() delay isn't working

I'm trying to add a delay between player.healthDisplay.color = Color.green; and player.healthDisplay.color = Color.white; but at the moment yield return new WaitForSeconds(5); and player.healthDisplay.color = Color.white; aren't working.

Here's my code:

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;
}
question from:https://stackoverflow.com/questions/66052635/unity-2d-waitforseconds-delay-isnt-working

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You are destroying the gameobject which has this script on it.

Destroy(gameObject);
// color changing code, etc..

Once the gameobject has been destroyed this script will no longer run.

What you can do instead (if you need this gameobject to be destroyed immediately) is add a script to health display that will handle the color change.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...