本文主要是介绍「Unity3D」使用ISerializationCallbackReceiver接口,序列化Dictionary数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Unity无法自动序列化Dictionary
数据结构,解决思路是,我们将Dictionary
的数据存储在可以序列化的结构里(如List
),然后通过Dictionary
与可序列化结构的互操作,来完成Dictionary
的存储与加载,而这个互操作的时机,就是ISerializationCallbackReceiver
接口的实现。
第一步
实现ISerializationCallbackReceiver
接口,我们需要继承MonoBehaviour
,然后接口回调才会在需要的时候触发。
第二步
接口需要实现两个函数,分别是在序列化之前与反序列化之后,由系统回调。
// 序列化prefab之前调用
public void OnBeforeSerialize()
{// 这里我们需要将Dictionary的数据,存入可以序列化的结构里(如List)// 然后,可序列化结构(如List),将会被unity自动序列化存储// 而Dictionary的数据不会序列化存储,也就是说,加载prefab的时候没有数据
}// 反序列化prefab之后调用
public void OnAfterDeserialize()
{// 这里可序列化结构(如List)已经自动加载了序列化时的数据// 我们需要将其中的数据,填充到Dictionary之中
}
第三步
如果需要在Inspector
上,显示Dictionary
的内容,我们则需要自定义一个PropertyDrawer
实现,将其内容手动绘制出来。
这篇关于「Unity3D」使用ISerializationCallbackReceiver接口,序列化Dictionary数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!