我有一些对象可以在屏幕上滚动,并且会不断滚动。
我想在触摸时移除对象(我拿到了那部分)SetActive / Destroy。
我正在尝试将对象添加回场景,以便可以重复使用它们。
我将如何处理?
if (col.gameObject.tag == "Coin"){
coinCount++;
coins.text = coinCount.ToString();
// Save Coins
PlayerPrefs.SetInt("Coins", coinCount);
col.gameObject.SetActive(false);
}
上面的代码在-> OnTriggerEnter2D(Collider2D){}
// Waits Seconds to put coins in correct spot
IEnumerator afterSeconds(GameObject x)
{
//x.SetActive(false);
yield return new WaitForSeconds(5f);//5f
//x.SetActive(true);
}
答案 0 :(得分:5)
您可以使用MonoBehavior.Invoke()
并将对撞机设置为类变量,但是如果在重新启用步骤之前发生冲突,这将很麻烦。相反,我会使用Coroutine
。
if (col.gameObject.tag == "Coin"){
coinCount++;
coins.text = coinCount.ToString();
// Save Coins
PlayerPrefs.SetInt("Coins", coinCount);
StartCoroutine(afterSeconds(col.gameObject)); //hide, delay, show
}
然后:
// Waits Seconds to put coins in correct spot
IEnumerator afterSeconds(GameObject x)
{
x.SetActive(false);
yield return new WaitForSeconds(5f);
x.SetActive(true);
}
答案 1 :(得分:0)
您可能正在寻找的对象池。这是一个管理游戏对象动态数量的实例的系统,它通过 not 销毁并实例化它们,而使它们不可见和可重用。如果池中的所需对象已用完(因为一次使用了太多对象),它可以根据需要实例化其他对象。通常有资产可以做到这一点,但我想它也可以自己编码。即使是正式的Unity教程也提到了这一点,并将其归类为初学者:Object Pooling。 然后发生的事情是,您只需将所有Instantiate方法替换为InstantiatePool方法即可。
因此,如果您不想显式地使GameObjects在固定的延迟内重生,而是允许管理器脚本按需要处理重生,这可能就是您想要的。