我正在执行一个脚本,该脚本实例化预制件列表中的预制件,然后在延迟后销毁它们,但是如果要进入触发器,我尝试使用bool
和一个条件进行操作,我想重新实例化它们但这不起作用。
有代码:
public class CreateObject : MonoBehaviour
{
public GameObject[] Prefab;
public Transform[] spawnPoint;
private int i = 0;
private int j = 0;
private int k = 0;
private float delay = 5f;
private float delaySound ;
public bool destroyOrNot;
void OnTriggerEnter(Collider other)
{
// fonction on l'on fait apparaitre les objets de la liste selon son empty
while (i<Prefab.Length && j < spawnPoint.Length )
{
GameObject clone = Instantiate(Prefab[i] , spawnPoint[j].position, spawnPoint[j].rotation);
Debug.Log("Detruire");
destroyOrNOt = Destroy(clone ,delay);
i++;
j++;
k++;
if (destroyOrNot = true)
{
while (i < Prefab.Length && j < spawnPoint.Length )
{
GameObject clone = Instantiate(Prefab[i] , spawnPoint[j].position, spawnPoint[j].rotation);
Debug.Log("Detruire");
destroyOrNot = Destroy(clone ,delay);
i++;
j++;
k++;
}
}
}
}
那是行不通的,它告诉我我们不能将void隐式转换为bool
!
所以,请问您有什么想法我该怎么做?
我是团结的新手,所以也许这很容易做到,但是我不知道该怎么做。
谢谢 !
答案 0 :(得分:2)
首先Destroy()方法不返回任何布尔值,所以您有转换错误。
我不确定100%确实在此代码段中尝试执行什么操作,但我不建议您“重新实例化”已删除的预制件。预制实例化(如破坏一样)是非常昂贵的操作,并且会导致性能问题。
如果您使用多个 REUSABLE 对象,则应使用 OBJECT POOLING。
这个想法很简单。基本上,您会在启动时(加载关卡\启动事件\等时)生成所需的所有预制件,并禁用所有这些生成的对象。
当您需要其中一个时,只需启用该对象并重新配置它(更改位置,设置)。当您不再需要对象时-只需禁用它并返回到池(某种list \ collection)即可。
一旦您完全完成了所有这些对象(不再需要它们),然后销毁所有池。
这是处理“可重用”对象的正确方法。
您可以在此处了解有关对象池的更多信息:Object pooling in unity