宁波led网站建设,做创意小视频的网站,南京网站维护公司,用自己电脑配置服务器做网站字典在Inspector的显示
方法一#xff1a;实现ISerializationCallbackReceiver接口
《unity3D游戏开发第二版》记录 在编辑面板中可以利用序列化监听接口特性对字典进行序列化。 主要继承ISerializationCallbackReceiver接口 实现OnAfterDeserialize() OnBeforeSerialize() …字典在Inspector的显示
方法一实现ISerializationCallbackReceiver接口
《unity3D游戏开发第二版》记录 在编辑面板中可以利用序列化监听接口特性对字典进行序列化。 主要继承ISerializationCallbackReceiver接口 实现OnAfterDeserialize() OnBeforeSerialize() 的方法进行监听序列化和反序列化之前的事件。
例子 配置的ScriptableObject脚本
[CreateAssetMenu(fileName FileName2PathConfig, menuName xasset/Custom/FileName2PathConfig)]public class FileName2PathConfig : ScriptableObject{public SerializationDicstring, string fileDictionary;}// DictionaryTKey, TValue 可序列化字典[Serializable]public class SerializationDicTKey, TValue :ISerializationCallbackReceiver{[SerializeField]ListTKey keys;[SerializeField]ListTValue values;DictionaryTKey, TValue target;public DictionaryTKey, TValue ToDictionary() { return target; }public SerializationDic(DictionaryTKey, TValue target){this.target target;}public void OnBeforeSerialize(){keys new ListTKey(target.Keys);values new ListTValue(target.Values);}public void OnAfterDeserialize(){var count Math.Min(keys.Count, values.Count);target new DictionaryTKey, TValue(count);for (var i 0; i count; i){target.Add(keys[i], values[i]);}}}
控制Inspector面板显示的脚本
[CustomEditor(typeof(SerializationDicstring,string))]public class SerializationDicEditor : Editor{public override void OnInspectorGUI(){//更新数据serializedObject.Update();SerializedProperty propertyKeyserializedObject.FindProperty(keys);SerializedProperty propertyValueserializedObject.FindProperty(values);int sizepropertyKey.arraySize;GUILayout.BeginVertical();for(int i0;isize;i){GUILayout.BeginHorizontal();SerializedProperty keypropertyKey.GetArrayElementAtIndex(i);SerializedProperty valuepropertyValue.GetArrayElementAtIndex(i);key.stringValueEditorGUILayout.TextField(key,key.stringValue);value.stringValueEditorGUILayout.TextField(value,value.stringValue);GUILayout.EndHorizontal();}GUILayout.EndVertical();//保存数据serializedObject.ApplyModifiedProperties();}}
效果
方法二 使用插件Odin Inspector 官网
代码
[CreateAssetMenu(fileName FileName2PathConfig, menuName xasset/Custom/FileName2PathConfig)]public class FileName2PathConfig : SerializedScriptableObject{[DictionaryDrawerSettings(KeyLabel 资源名字, ValueLabel 资源路径)]public Dictionarystring, string fileDictionary;}
效果