Привет. Часто в Unity нужно заполнить SerializeFiled массив. Но после каких-то изменений это нужно делать снова. А потом снова. Добавить, удалить, заменить. Неудобно. Да и зачем? Ведь можно написать скрипт, который будет делать это за нас!
Переходим в Unity
Скрипт очень простой. Вместе с массивом объектов мы передадим объект родителя, который содержит все необходимые элементы. А уже на старте получим количество «детей» и добавим их в массив.
Если объекты массива нельзя собрать под одним объектом — решение не для вас. Но у меня это были монетки, враги и т.д. Так что особых проблем с их сбором не возникало.
Для примера я накидал такую структуру:
Само собой, что добавить руками группу объектов не проблема, но когда их стаёт больше или меньше – уже надо редактировать руками.
Поэтому создаём скрипт. Я назвал его AutofillArray.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using UnityEngine; public class AutofillArray : MonoBehaviour { [SerializeField] private GameObject[] itemsArray; [SerializeField] private GameObject itemsParent; private int _totalItems = 0; void Start() { _totalItems = itemsParent.transform.childCount; itemsArray = new GameObject[_totalItems]; for(int i = 0; i < _totalItems; i++) { itemsArray[i] = itemsParent.transform.GetChild(i).gameObject; } } } |
Ещё раз разберём. У нас есть родитель. Получаем количество его детей, создаём массив на обозначенное количество и циклом записываем каждую монетку. Ничего сложного.
Теперь можно легко добавить текстовый счётчик «осталось/всего», или даже проверку на завершение уровня. Зависит от потребностей. А если изменилось количество элементов – ничего менять не нужно.
Запускаем и видим все монетки:
Минусы: видим заполненный массив только в рантайме Unity. В режиме редактора массив будет пустым. И дополнительные задачи, код для самой автоматизации.
Вообще не обязательное решение, но как альтернатива – интересно.
Оригинал: How to Autofill Inspector Array Automatically with Script Unity
Интересное по теме
Простой таймер обратного отсчёта в Unity