2016-03-23 5 views
-1

エディタウィンドウからMethodInfoをスクリプトに保存しようとしています。メソッド情報を覚えておくスクリプトを作成するとうまくいきますが、Unityが再コンパイルされるたびに(Run-Time、スクリプトが変更されたか、または単一性が再起動されたとき)、MethodInfo変数はnullにリセットされます。私はそれを保存するクラスをシリアライズし、MethodInfoをSerializedFieldにすることを試みました。Unity EditorWindowのMethodInfo変数をComponentに保存すると、コンパイル時にvarがリセットされます

正確にはどうなるのでしょうか?私はGameObjectに属するComponentとそのコンポーネントに属するMethodInfoを選択します。次に、GameObject、Component & MethodInfoの変数を持つスクリプトを含む新しいGameObjectを作成します。それらの変数を選択した変数に設定します。これまではこれまで通りです。ユニティが再びコンパイルされると、GameObjectとComponentは保存されますが、MethodInfoはnullに変わります。

任意の助けいただければ幸いです。

答えて

0

UnityがMethodInfoクラスのオブジェクトをシリアライズできるとは思いません。それがあったとしても、Unityがクロスプラットフォームエンジンであるため、MethodInfoのオブジェクトがエディタに保存されているように、プラットフォーム固有のビルドに存在するMethodInfoのオブジェクトと互換性があるという保証はありません。

ターゲットメソッドの名前を保存し、実行時に正しいメソッドを見つけるためにReflectionと一緒に使用する必要があります。メソッドがシグネチャによってオーバーロードされている場合は、実行時にどのオーバーロードを実行するかを決定する必要もあります。

+0

回答をいただきありがとうございます。私はまさに私がやったことと同じように考えました。私はそれらの醜いハックが好きではありませんが、クリーナーソリューションを期待していました。 –

+0

Reflectionでメソッドを呼び出す場合は、 Reflectionの機能は唯一合理的なことです。 UnityはUnityEventを実装するために全く同じ仕組みを使います(Unity UIで使用されています)。多分彼らはあなたが探しているものでしょうか?そうでない場合は、達成しようとしていることについてもう少し詳しく説明してください。そうすれば、人々は代替案を提案することができます。 –

関連する問題