分享

实现Unity对Dictionary的序列化

 勤奋不止 2017-07-05

若有尝试过想在unity的inspector检视面板中像List或者数组那样可以编辑Dictionary变量的童鞋应该知道,Dictionary变量不会出现在inspector中,unity并不会直接序列化Dictionary类型,但实际上unity有提供接口使之可能:

unity doc: http://docs./ScriptReference/ISerializationCallbackReceiver.OnBeforeSerialize.html。

注意其中的This interface should be used very carefully. Unity's serializer usually runs on the non main thread, while most of the Unity API can only be called from the main thread.

请慎用该方法,它不是线程安全的。

复制代码
 1 using UnityEngine;
 2 using System.Collections.Generic;
 3 
 4 /// Usage:
 5 /// 
 6 /// [System.Serializable]
 7 /// class MyDictionary : SerializableDictionary<int, GameObject> {}
 8 /// public MyDictionary dic;
 9 ///
10 [System.Serializable]
11 public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializationCallbackReceiver
12 {
13     // We save the keys and values in two lists because Unity does understand those.
14     [SerializeField]
15     private List<TKey> _keys;
16     [SerializeField]
17     private List<TValue> _values;
18 
19     // Before the serialization we fill these lists
20     public void OnBeforeSerialize()
21     {
      //官方例子有误,去掉     
    } 30 31 // After the serialization we create the dictionary from the two lists 32 public void OnAfterDeserialize() 33 { 34 this.Clear(); 35 int count = Mathf.Min(_keys.Count, _values.Count); 36 for (int i = 0; i < count; ++i) 37 { 38 this.Add(_keys[i], _values[i]); 39 } 40 } 41 }
复制代码

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多