这样我们正常定义字典结构,字典就可以正常显示在Inspector面板中啦! 代码语言:javascript 复制 using System.Collections.Generic;using UnityEngine;using Sirenix.OdinInspector;publicclassDicTest:SerializedMonoBehaviour{publicDictionary<int,string>prefabDataDic=newDictionary<int,string>();} 实现效果如下: Odin插件时Uni...
【Unity】序列化字典Dictionary的问题 问题:在C#脚本定义了public Dictionary字典,然而在编辑器检视面板Editor Inspector中看不到(即无法序列化字典)。即不能在编辑器中拖拽给字典赋值。 目标:检视面板Inspector拖拽给Dictionary字典赋值。 解决思路:先用结构体struct模拟Dictionary字典,用一个包含该结构体的public数组来存放...
在Unity中,由于字典(Dictionary<TKey, TValue>)默认不支持Unity的序列化机制,因此无法直接在Inspector面板中显示。为了解决这个问题,你可以采用以下几种方法: 方法一:使用ISerializationCallbackReceiver接口 这种方法通过实现ISerializationCallbackReceiver接口,在序列化和反序列化时对字典进行手动处理。 创建包含字...
字典作为最重要的数据结构之一,在Unity的inspector中竟然无法序列化显示。通过Google搜索,我找到了几种方法。 使用List模拟字典的键值对,在Awake或Start方法中将键值复制到字典中。 原文链接:https://forum.unity.com/threads/adding-public-dictionary-as-parameter.692701/ 缺点:每使用一个字典都需要写一段foreach;只能...
在Unity中,字典无法在Inspector中进行序列化显示。通过深入探索,发现了几种方法。然而,每种方法都有其局限性。使用foreach遍历字典的每一步都需要手动编写,且在运行过程中无法与字典动态绑定。另一种方法涉及使用两个List来保存键和值,这需要为每种类型的字典创建一个类,不够灵活。接着,使用Odin ...
usingSystem.Collections.Generic;usingUnityEngine;[System.Serializable]publicclassFanDict<K,T>{[SerializeField]privateFanKeyValue<K,T>[]_keyValueElements;privateDictionary<K,T>_dict;publicvoidInit(){_dict=newDictionary<K,T>();foreach(var e in _keyValueElements){TryAdd(e.Key,e.value);}}public...
unity中的inspector面板支持list,但是有时候我们需要Dictionary,尤其是我们需要通过asset资源与ScriptableObject脚本一起实现序列化时更是需要如此。如:技能需要通过id来确定访问单个技能数据,那必须满足key和Value的数据结构。 由于unity并不是原生的支持对字典的序列化,这件简述了unity关于序列化与及自定义类的序列化的方法...
Unity Editor中的Inspector无法通过public Dictionary序列化(可视化编辑)Dictionary类型数据(原因应该是泛型的问题) 我们可以通过定义struct来模拟Dictionary数据,在初始化时转换成Dictionary的方法使其可视化(其实就是手动解决了泛型的问题) 点击此处光速解决 (/≧▽≦)/ ...
{ base.OnInspectorGUI();// 开启可折叠区域 _showDictionary = EditorGUILayout.BeginFoldoutHeaderGroup(_showDictionary, _statusStr); // 若打开折叠 if (_showDictionary) { HorizontalLabel("Key", "Value"); // 遍历字典 显示Key与Value foreach (var nodePair in _selectSO.NodeDic) { Horizontal...
base.OnInspectorGUI(); serializedObject.Update(); disCount = EditorGUILayout.InField("Dictionary Capacity", dicCount); for (int i=keys.arraySize-1; i >= dicCount; i--) { keys.DeleteArrayElementAtIndex(i); values.DeleteArrayElementAtIndex(i); ...