@dashsk

Как добавить в List GameObject через цикл for?

Всем привет, в юнити очень недавно, столкнулся с проблемой. Сам скрипт висит на CanvasManager. Нужно найти все Screen(это gameobject с компонентами канваса) и запихнуть в List _canvas.
nZtNyJv.png
Написал такой код, но он не работает
private List<GameObject> _canvas;

void Start()
    {
        for (int i = 1; i <= 4; i++) {
            _canvas.Add(GameObject.Find($"Screen{i}"));
        }
    }

Я так понимаю, он не может его найти.
NullReferenceException: Object reference not set to an instance of an object
  • Вопрос задан
  • 973 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Nivikantavo
Искать через имена не очень корректно, ты можешь попробовать использовать теги GameObject.FindGameObjectsWithTag - https://docs.unity3d.com/ScriptReference/GameObjec...
или, если на этих объектах висит скрипт используй FindObjectOfType самый оптимальный вариант, https://docs.unity3d.com/ScriptReference/Object.Fi...
А вообще, можно заранее назначить в инспекторе, что гораздо проще
Ответ написан
Комментировать
freeExec
@freeExec
Участник OpenStreetMap
Более того у transform можно запрашивать его дочерние объекты. Это уж точно лучше, чем искать объекты во всей сцене.
Но в вашем случае где, все элементы канвасы - идеально GetComponentsInChildren<Canvas>(), если конечно там глубже их нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы