2016-03-23 5 views
-1

J'essaie d'enregistrer un MethodInfo dans un script via une fenêtre d'éditeur. Lorsque je crée le script qui doit mémoriser les informations sur la méthode, cela fonctionne bien mais chaque fois que l'unité recompile (Run-Time, le script a changé ou l'unité redémarre), la variable MethodInfo a été réinitialisée à null. Ce qui se passe avec précision: Je sélectionne un composant appartenant à un objet GameObject et un objet MethodInfo appartenant à ce composant. Créez ensuite un nouvel objet GameObject contenant un script contenant des variables pour GameObject, Component & MethodInfo. Je définis ensuite ces variables sur les variables sélectionnées. Jusqu'à maintenant cela fonctionne. Lorsque l'unité est à nouveau compilée, GameObject et Component sont toujours sauvegardés mais MethodInfo est devenu null.Enregistrement de la variable MethodInfo dans Unity EditorWindow to Component, var réinitialise à la compilation

Toute aide serait grandement appréciée.

Répondre

0

Je ne pense pas que Unity sera en mesure de sérialiser un objet de la classe MethodInfo. Et même si c'était le cas: comme Unity est un moteur multiplateforme, il n'y a aucune garantie qu'un objet de MethodInfo, tel qu'il a été enregistré dans l'éditeur, sera compatible avec un objet de MethodInfo tel qu'il existerait dans la construction spécifique à la plate-forme.

Vous devrez stocker le nom de la méthode cible et l'utiliser avec Reflection pour trouver la méthode correcte au moment de l'exécution. Si la méthode est surchargée par la signature, vous devrez également décider de la surcharge à exécuter à l'exécution.

+0

Merci pour la réponse, j'ai pensé la même chose que c'est exactement ce que j'ai fait, je n'aime pas ces hacks laids, mais espérait une solution plus propre –

+0

Eh bien, si vous voulez appeler des méthodes au moyen de réflexion, en utilisant les caractéristiques de Reflection sont la seule chose raisonnable à faire. Unity utilise la même mécanique pour implémenter UnityEvents (utilisé par Unity UI). Peut-être qu'ils sont exactement ce que vous cherchez? Sinon, donnez un peu plus de détails sur ce que vous essayez d'accomplir, afin que les gens puissent proposer des alternatives. –