1

我在播放器对象中有以下代码:

function Start () 
{
    GUI = GameObject.FindWithTag("GUI").GetComponent(InGameGUI);
}

function OnCollisionEnter(hitInfo : Collision)
{
    if(hitInfo.relativeVelocity.magnitude >= 2) //if we hit it too hard, explode!
    { 
        Explode();
    }
}

function Explode() //Drop in a random explosion effect, and destroy ship
{
    var randomNumber : int = Random.Range(0,shipExplosions.length);
    Instantiate(shipExplosions[randomNumber], transform.position, transform.rotation);
    Destroy(gameObject);

    GUI.Lose();
}

我的 GUI.Lose() 函数如下所示:

function Lose()
{
    print("before yield");
    yield WaitForSeconds(3);
    print("after yield");
    Time.timeScale = 0;
    guiMode = "Lose";
}

当调用explode 函数时,会调用松散函数,我看到打印出消息“before yield”。我等了三秒钟,但我从来没有看到“屈服后”消息。

如果我取出产量,该功能将按预期工作,减去 3 秒的等待时间。

这是在 Unity 4 上的。这段代码直接来自我认为是在 Unity 3.5 上创建的教程。我假设代码在 Unity 3.5 中有效,因为网站上没有评论询问为什么产量不起作用。

我做错了什么愚蠢的事情?

4

2 回答 2

4

您需要使用StartCoroutine,如下所示:

function Explode() //Drop in a random explosion effect, and destroy ship
{
    var randomNumber : int = Random.Range(0,shipExplosions.length);
    Instantiate(shipExplosions[randomNumber], transform.position, transform.rotation);
    Destroy(gameObject);

    // Change here.
    yield StartCoroutine(GUI.Lose());

    // Or use w/out a 'yield' to return immediately.
    //StartCoroutine(GUI.Lose());
}
于 2013-04-29T14:01:36.147 回答
0

你也可以考虑在你的 Lose 函数上使用一个简单的 Invoke。

function Start () 
{
    GUI = GameObject.FindWithTag("GUI").GetComponent(InGameGUI);
}

function OnCollisionEnter(hitInfo : Collision)
{
    if(hitInfo.relativeVelocity.magnitude >= 2) //if we hit it too hard, explode!
    { 
        Explode();
    }
}

function Explode() //Drop in a random explosion effect, and destroy ship
{
    var randomNumber : int = Random.Range(0,shipExplosions.length);
    Instantiate(shipExplosions[randomNumber], transform.position, transform.rotation);
    Destroy(gameObject);
    Invoke("YouLose", 3.0f);
}

function YouLose()
{
    GUI.Lose();
}
于 2013-05-02T22:36:11.893 回答