销毁预制件后如何实例化预制件?

时间:2020-01-15 11:43:15

标签: c# unity3d instantiation destroy

我正在执行一个脚本,该脚本实例化预制件列表中的预制件,然后在延迟后销毁它们,但是如果要进入触发器,我尝试使用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! 所以,请问您有什么想法我该怎么做? 我是团结的新手,所以也许这很容易做到,但是我不知道该怎么做。 谢谢 !

1 个答案:

答案 0 :(得分:2)

首先Destroy()方法不返回任何布尔值,所以您有转换错误。

我不确定100%确实在此代码段中尝试执行什么操作,但我不建议您“重新实例化”已删除的预制件。预制实例化(如破坏一样)是非常昂贵的操作,并且会导致性能问题。

如果您使用多个 REUSABLE 对象,则应使用 OBJECT POOLING。

这个想法很简单。基本上,您会在启动时(加载关卡\启动事件\等时)生成所需的所有预制件,并禁用所有这些生成的对象。

当您需要其中一个时,只需启用该对象并重新配置它(更改位置,设置)。当您不再需要对象时-只需禁用它并返回到池(某种list \ collection)即可。

一旦您完全完成了所有这些对象(不再需要它们),然后销毁所有池。

这是处理“可重用”对象的正确方法。

您可以在此处了解有关对象池的更多信息:Object pooling in unity