2016-03-23 12 views
-1

Я пытаюсь сохранить MethodInfo в скрипте через окно редактора. Когда я создаю скрипт, который должен помнить информацию о методе, он работает хорошо, но всякий раз, когда единство перекомпилируется, (Run-Time, скрипт изменился или перезапуск единицы), переменная MethodInfo была сброшена на null. Я пробовал сериализацию класса, который сохраняет его, и делает MethodInfo a SerializedField,Сохранение переменной MethodInfo в Unity EditorWindow to Component, var сбрасывается при компиляции

Что происходит именно так: я выбираю компонент, принадлежащий GameObject, и MethodInfo, принадлежащий этому компоненту. Затем создайте новый GameObject, содержащий скрипт с переменными для GameObject, Component & MethodInfo. Затем я устанавливаю эти переменные в выбранные vars. До сих пор это работает. Когда единица снова компилируется, GameObject и компонент все еще сохраняются, но MethodInfo обращается к null.

Любая помощь была бы принята с благодарностью.

ответ

0

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

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

+0

Спасибо за ответ, я понял то же самое, что это именно то, что я сделал, мне не нравятся эти уродливые хаки, хотя надеялся на более чистое решение –

+0

Ну, если вы хотите вызвать методы с помощью Reflection, используя особенности Reflection - единственная разумная вещь. Unity использует ту же самую механику для реализации UnityEvents (как используется Unity UI). Может быть, они именно то, что вы ищете? Если нет, просьба дать более подробную информацию о том, что вы пытаетесь выполнить, чтобы люди могли предложить альтернативы. –