2016-01-24 1 views
0

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

  1. Создать GameObject UI все тексты кнопок// и т.д.. изложенных в нем.
  2. Сохраните этот объект как сборник.
  3. Загрузите сборку во время выполнения и создайте экземпляр и добавьте ее как дочерний элемент в родительский объект контейнера пользовательского интерфейса.

Теперь проблема заключается в том, как назначить обработчики событий для кнопок во время выполнения (поскольку назначенные в инспекторе удаляются при создании сборника).

Я пытаюсь этот код, но он не работает:

GameObject uiObj = ResourceUtil.InstantiatePrefab("Prefabs/UI/Main Menu UI", "UI"); 
uiObj.transform.SetParent(gameObject.transform, false); 
Button[] buttons = uiObj.GetComponentsInChildren<Button>(); 
foreach (Button button in buttons) 
{ 
    button.onClick.AddListener(() => OnUIButtonClick(button)); 
} 

private void OnUIButtonClick(Button button) 
{ 
    Log.Debug("OnUIButtonClick: " + button); 
} 

префаб UI загружен и успешно добавлен, но кнопки не действуют на щелкая их. Кто-нибудь знает, как это сделать успешно?

ответ

0

Назначение слушателей компонентам Button было выполнено правильно. Я проверил ваш код, и он работает для меня. Уорд, может быть, проблема в другом месте. У вас есть EventSystem, добавленная в вашу сцену?

+0

Да EventSystem находится в сцене, но я добавил ее вручную. – BadmintonCat

+0

Я понял! Мне пришлось добавить GraphicRaycaster к объекту Canvas, который используется в качестве родителя для моего объекта меню. – BadmintonCat