我有可序列化的字典,我尝试在正常模式下添加unity事件,但进入播放模式后该事件的引用会丢失。
基本上我试图在这里实现的是,我在字典中添加了新的Unity事件和字典,也列表,所以基本上列表中的unity事件是字典中的引用。但是一旦我进入播放模式,统一事件就不再是同一个实例了。
在我决定在这里提问之后,我花了3天多时间研究可序列化词典。
OnBegin
是可序列化的字典,我从SerializableDictionary<int, UnityEvent>
继承。
OnBeginExpose
是正常的可序列化列表。
[SerializeField]
public MyDictionaryEntry OnBegin = new MyDictionaryEntry();
[SerializeField]
public List<UnityEvent> OnBeginExpose = new List<UnityEvent>();
这就是我尝试动态添加unity事件的方法。
[System.Serializable]
public class CaptionEvent : UnityEvent{};
使用自定义编辑器动态添加unity事件
CaptionEvent newEvent = new CaptionEvent();
eventsAuto.OnBegin.Add(i, newEvent);
eventsAuto.OnBeginExpose.Add(newEvent);
我听说Object.GetInstanceID()
可能是一个解决方案,但我不知道它是如何运作的。有人对上述问题有很好的参考吗?
答案 0 :(得分:0)
您没有写过您使用http://wiki.unity3d.com/index.php/SerializableDictionary中的SerializableDictionary,我是对的吗?
向我们展示MyDictionaryEntry类的有意义部分,因为如果你有
public class MyDictionaryEntry : SerializableDictionary<K, V> { }
没有构造函数它将无法正常工作。您的问题特定于您的代码。必须有部分女巫从元素1处清除UnityEvent中的所有代理或在场所创建新的UnityEvent。