显示对象5秒并加载新场景

时间:2015-12-24 16:35:59

标签: unity3d

我正在制作手机游戏,我需要在销毁对象后显示短信5秒钟。我尝试使用yield waitforseconds但是不起作用。我也尝试过使用Invoke功能。我用行代码SceneManager.LoadScene(“__ Main1”)创建了一个单独的函数;但我有同样的问题。

我想显示我的文字5秒钟,然后加载新场景。

这是我现在的代码:

void OnTriggerEnter2D (Collider2D other)
    {


        if (other.gameObject.CompareTag ("bomb")) {
            other.gameObject.SetActive (false);
            Destroy (this.gameObject);
            scoretext.SetActive (true); //this text need to be displayed for 5 seconds after destroying game object
            SceneManager.LoadScene ("__Main1");

        }

我希望有人可以帮忙解决这个问题。感谢。

2 个答案:

答案 0 :(得分:2)

你无法破坏对象并在其上启动协同程序。您需要引用此文本的其他对象,并在执行协程时保持活动状态。

编辑:

更确切地说:

void OnTriggerEnter2D (Collider2D other)
{
    if (other.gameObject.CompareTag ("bomb")) {
        other.gameObject.SetActive (false);

        scoretext.SetActive (true); //this text need to be displayed for 5 seconds after destroying game object
        waitEndDisable.WaitAndDisable(scoretext); // here we go ;)
        Destroy (this.gameObject);
    }

在其他脚本上,这是在活动 GameObject:

上运行
public void WaitAndDisable(GameObject obj)
{
    StartCoroutine(WaitAndDisableCoroutine(obj));    
}

IEnumerator WaitAndDisableCoroutine(GameObject obj)
{
    yield return new WaitForSeconds(5f);
    SceneManager.LoadScene ("__Main1");
    obj.SetActive(false);
}

正如您在主脚本中所看到的,您需要使用 WaitAndDisable 方法引用该脚本。确保此对象处于活动状态(gameObject.activeSelf == true)。

答案 1 :(得分:0)

您可以使用Enumerator等待几秒钟。

void OnTriggerEnter2D (Collider2D other)
{
    if (other.gameObject.CompareTag ("bomb")) 
    {
        other.gameObject.SetActive(false);
        StartCoroutine(Foo());
    }
}

IEnumerator Foo()
{
    scoretext.SetActive (true); //this text need to be displayed for 5 seconds after destroying game object
    yield return new WaitForSeconds(5f);
    SceneManager.LoadScene ("__Main1");
}

您应该使用System.Collections添加枚举器。