我的代码有问题。我无法使我的立方体对象在销毁前一个立方体后自动显示新的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);
}
}
答案 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);
}