Unity在破坏前一秒后实例化新对象

时间:2015-12-23 12:35:33

标签: unity3d

我的代码有问题。我无法使我的立方体对象在销毁前一个立方体后自动显示新的1秒。这是我的代码:

void OnTriggerEnter(Collider other){

    if (other.gameObject.CompareTag ("cube1")) { 
        other.gameObject.SetActive (false);
        makenew ();

    }

}

IEnumerator makenew ()
{
    yield return new WaitForSeconds (1f);
    GameObject cube = Instantiate (cubePrefab) as GameObject;
    gameObject.SetActive (true);

}

}

4 个答案:

答案 0 :(得分:0)

这是因为你sholud使用StartCoroutine()方法而不是只调用makenew()。试试这个:

StartCoroutine(makenew());

这是指向文档的链接: MonoBehaviour.StartCoroutine

答案 1 :(得分:0)

你忘记了StartCoroutine

所以试试:

void OnTriggerEnter (Collider other){

if (other.gameObject.CompareTag ("cube1")) { 
    other.gameObject.SetActive (false);
    StartCoroutine (makenew ());

}

}

答案 2 :(得分:0)

仅提一件事 - 如果GameObject被禁用(See this answer),协同程序也会停止。所以你可能需要使用Invoke()代替:

    if (other.gameObject.CompareTag ("cube1")) { 
        other.gameObject.SetActive (false);
        Invoke("makenew", 1f);

    }

}

void makenew ()
{
    GameObject cube = Instantiate (cubePrefab) as GameObject;
    gameObject.SetActive (true);
}

如果您需要更好地了解正在发生的事情,请参阅this quick tutorial of Invoke

其他答案也很有用。

答案 3 :(得分:0)

你也可以这样做:

    if (other.gameObject.CompareTag ("cube1")) { 
        other.gameObject.SetActive (false);
        Invoke("makenew", 1.0f);

    }

}

void makenew ()
{

    GameObject cube = Instantiate (cubePrefab) as GameObject;
    gameObject.SetActive (true);

}

由于我不确切知道你在做什么,我的怀疑就在这里:

other.gameObject是您停用的多维数据集。 (第1个游戏对象)

GameObject cube是新的。 (第2个游戏对象)

使用此代码:gameObject.SetActive (true);您正在制作实际的第3个游戏对象(具有此代码的脚本的对象)变为活动状态,我可能会猜到已经,isn “T?我试图表达的是,使用此代码,您将调用脚本的所有者。这好吗?或者您想要激活“其他”旧多维数据集,如:

other.gameObject.SetActive (true);

这样你就会有2个立方体。旧的(其他)和新的(立方体)。只是一个疑问。

已编辑:我怀疑行gameObject.SetActive(true);不是OP意图。默认情况下,他的预制件已停用,因此makenew()方法应该是:

void makenew ()
    {

        GameObject cube = Instantiate (cubePrefab) as GameObject;
        cube.SetActive (true);

    }