2017-06-14 3 views
1

シリアライズ可能な辞書を持っていますが、通常モードでユニティイベントを追加しようとしましたが、入力されたプレイモードで辞書に失われたオブジェクトリファレンスの辞書

基本的に私がここで達成しようとしているのは、辞書とリストのスクリプトで新しいユニティイベントを追加することです。リストのユニティイベントは辞書からの参照です。一度プレイモードに入ると、統一イベントはもはや同じインスタンスではありません。 EDIT MODE enter image description here

ON

PLAYモードON enter image description here

私はここに質問をすることを決定した後、それは私に、シリアライズ辞書についての研究の3日以上を要しました。

OnBeginは、SerializableDictionary<int, UnityEvent>から継承するシリアライズ可能な辞書です。 OnBeginExposeは通常のシリアライズ可能なリストです。

[SerializeField] 
public MyDictionaryEntry OnBegin = new MyDictionaryEntry(); 

[SerializeField] 
public List<UnityEvent> OnBeginExpose = new List<UnityEvent>(); 

これは、ユニティイベントを動的に追加する方法です。

[System.Serializable] 
public class CaptionEvent : UnityEvent{}; 

動的カスタムエディタ

CaptionEvent newEvent = new CaptionEvent(); 
eventsAuto.OnBegin.Add(i, newEvent); 
eventsAuto.OnBeginExpose.Add(newEvent); 

で統一イベントを追加私は約Object.GetInstanceID()解決策になるかもしれないことを聞いたが、私はそれがどのように動作するか見当がつかない。誰でも上記の問題の良いリファレンスを持っていますか?

+0

私はあなたの質問を理解するかどうか分かりませんが、実行時にイベントにリスナーを追加すると、Unityは追加されてもそれを表示しません。たぶん問題があります。 – ATHellboy

+0

実行時にリスナー/ユニテイを追加しません。申し訳ありませんが、私は間違った詳細を入れました。私はちょうど質問を編集します。 –

+0

あなたはAwake関数によってオーバーライドされた参照にリスナーをreigsteringしているようです –

答えて

0

あなたはhttp://wiki.unity3d.com/index.php/SerializableDictionaryからSerializableDictionaryを使用したと書いていませんでしたか?あなたは、コンストラクタなし

public class MyDictionaryEntry : SerializableDictionary<K, V> { } 

を持っている場合、それは動作しませんので、

は私たちにMyDictionaryEntryクラスの意味のある部分を表示します。あなたの問題はあなたのコードに固有です。一部の魔法師は、要素1のUnityEventからすべてのデリゲートをクリアするか、場所に新しいUnityEventを作成する必要があります。

関連する問題