Как создать префаб после уничтожения их? - PullRequest
0 голосов
/ 15 января 2020

Я делаю скрипт, который создает префаб в списке префабов, а затем уничтожает их после задержки, но я хочу восстановить их, если при входе в триггер я пробовал что-то с 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 Ответ

2 голосов
/ 15 января 2020

Прежде всего метод Destroy () не возвращает никакого логического значения, поэтому у вас есть ошибка конвертации.

Я не уверен на 100%, что именно вы пытались сделать в этом фрагменте кода, но я не рекомендую вам «восстанавливать» удаленные префабы. Сборка экземпляров (а также уничтожение) - очень дорогая операция, которая может вызвать проблемы с производительностью.

Если вы используете несколько REUSABLE объектов, вам следует использовать OBJECT POOLING.

Идея проста. По сути, вы запускаете все префабы, которые вам нужны при запуске (когда вы загрузили свой уровень \ начальное событие \ et c.), И отключаете все эти порожденные объекты.

Когда вам нужен один из них, вы просто активируете этот объект и перенастроите его (измените положения, настройки). Когда вам больше не нужен объект - просто отключите его и вернитесь в пул (какой-то список \ коллекция).

И как только вы ПОЛНОСТЬЮ закончите со всеми этими объектами (вам больше не нужен ни один из них), - тогда уничтожьте весь пул.

Это правильный способ иметь дело с «повторно используемыми» объектами.

Подробнее об объединении объектов можно узнать здесь: Объединение объектов в единстве

...