Объединение экземпляров пефаба

Не могу найти что-то по своему вопросу, может кто-то сможет подсказать. Есть префаб, в котором есть n-ное количество экземпляров этого префаба на сцене, которые спавнятся в рандомных координатах и вращаются вокруг своей оси в разные стороны с разной скоростью. Вызываются они циклом while:

  Instantiate(prefab, new Vector3(ncorx, 0, ncorz), Quaternion.identity);
            

В итоге на сцене появляется 20 экземпляров. Можно ли как-то обьединить все эти экземпляры таким образом, чтобы их все вместе можно было сдвинуть на нужную величину в нужном направлении.


Ответы (1 шт):

Автор решения: Максим Фисман

Функция Instantiate возвращает вам The instantiated clone созданного объекта, т.е. ссылку на созданный объект. Вы можете положить это значение в переменную, а можете создать список List, в который будете динамически добавлять созданный объект:

List<GameObject> objects = new List<GameObject>();

GameObject newObj = Instantiate(...);
objects.Add(newObj);

Так как объекты со сцены могут удаляться, то можно еще, если на префаб повесить скрипт, который будет сам добавлять этот собственный объект в лист или удалять:

ScriptWithList script;
void Start () {
    script.objects.Add(gameObject);
}
void OnDestroy () {
    script.objects.Remove(gameObject);
}

А c элементами list'а можете работаете через for, foreach - как хотите:

for (int i = 0; i < objects.Count(); i++) {
    print(objects[i]);
}

foreach (var obj in objects) {
    print(obj;)
}
→ Ссылка