Переменная инспектора для выбора вызываемой функции (Unity3D)

В последних версиях NGUI есть отличный инструмент, который позволяет вам выбрать, какая функция в любом из целевых сценариев будет вызываться при нажатии на нее.

По сути, это поле выбора в инспекторе, которое автоматически заполняется всеми функциями из всех скриптов, прикрепленных к игровому объекту.

Как создать список функций, который автоматически заполняется таким образом?

Я не хочу поддерживать перечисление со всеми возможными функциями (включая те, которых может не быть у текущего объекта)

Я пытался посмотреть на код, используемый NGUI, но сейчас он был слишком сложен для понимания.


person Mauffler    schedule 02.04.2014    source источник
comment
Итак, какой код использовал NGUI и почему он был слишком сложным? Скорее всего, это код, который вам нужно понять, чтобы создать эту функциональность!   -  person Dan Puzey    schedule 02.04.2014
comment
Некоторые библиотеки используют SendMessage, и в этом случае вам понадобится только имя функции и один необязательный аргумент. Работает, но производительность не высокая. Возможно, NGUI использует отражение для построения списка методов.   -  person rutter    schedule 03.04.2014


Ответы (1)


Если вы хотите сделать это как в NGUI, используйте инструменты, доступные в самом NGUI, и определите общедоступную переменную следующим образом:

public List<EventDelegate> DelegateList = new List<EventDelegate>();

При этом вы можете поместить сценарии MonoBehaviour в поле Inspector, а затем выбрать общедоступные методы/делегаты, содержащиеся в этом сценарии.

Затем вы можете вызывать их следующим образом:

void Start() {
  EventDelegate.Execute(DelegateList);
}

Теперь каждый метод в вашем списке делегатов будет вызываться. Вы можете увидеть это, например, в скрипте UIButton, где он используется для обработки делегатов OnClick.

person Patrick    schedule 15.08.2014