Доступ к компоненту скрипта сразу после создания - PullRequest
0 голосов
/ 23 января 2019

У меня есть скрипт создания кнопок пользовательского интерфейса в Unity. Он создает экземпляры префаба, в котором также есть настраиваемые компоненты скрипта. Я хотел бы создать новую копию и сразу получить доступ к значениям-членам / полям скриптов вновь созданного объекта:

turretButtons.Add(Instantiate(buttonProto, gameObject.transform));
turretButtons[turretButtons.Count - 1].image.sprite = turretIcon;
turretButtons[turretButtons.Count - 1].GetComponent<DetailsWindowController>().turretDefinition = turretDef;

Первая строка создает новый экземпляр, вторая меняет значок, обе работают отлично. Третий, однако, в котором я пытаюсь получить доступ к turretDefinition общедоступному члену DetailsWindowController script / class, выдает «NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта». Чего мне не хватает?

1 Ответ

0 голосов
/ 23 января 2019

Компонент, который вы ищете, вероятно, не привязан к точно такому же GameObject компоненту Button.

Вы должны использовать GetComponentInChildren , чтобы всегда искать рекурсивный компонент вниз внутри иерархии кнопки. Также обратите внимание на параметр true, который необходим для поиска компонентов на дочерних элементах с ограниченными возможностями. Это может быть полезно в случае, если кнопка не активирована.

var newButton = Instantiate(buttonProto, gameObject.transform);

newButton.image.sprite = turretIcon;
newButton.GetComponentInChildren<DetailsWindowController>(true).turretDefinition = turretDef;

turretButtons.Add(newButton);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...