unity 里字典对象不可以在inspector栏显示,怎么可以显示?
时间: 2024-03-06 19:50:03 浏览: 52
unity自定义特性在inspector面板上显示或者隐藏字段
5星 · 资源好评率100%
在Unity中,字典对象默认是不支持在Inspector面板中显示的,但是你可以使用自定义的属性绘制器来实现这一功能。
下面是一个示例代码:
```csharp
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
[CustomPropertyDrawer(typeof(Dictionary<string, string>))]
public class DictionaryPropertyDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.BeginProperty(position, label, property);
SerializedProperty keysProp = property.FindPropertyRelative("keys");
SerializedProperty valuesProp = property.FindPropertyRelative("values");
EditorGUI.LabelField(position, label);
for (int i = 0; i < keysProp.arraySize; i++)
{
Rect keyPos = new Rect(position.x, position.y + 20 * (i + 1), position.width / 2, 16);
Rect valuePos = new Rect(position.x + position.width / 2, position.y + 20 * (i + 1), position.width / 2, 16);
EditorGUI.PropertyField(keyPos, keysProp.GetArrayElementAtIndex(i), GUIContent.none);
EditorGUI.PropertyField(valuePos, valuesProp.GetArrayElementAtIndex(i), GUIContent.none);
}
EditorGUI.EndProperty();
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
SerializedProperty keysProp = property.FindPropertyRelative("keys");
return 20 * (keysProp.arraySize + 1);
}
}
```
将上述代码保存到一个名为DictionaryPropertyDrawer.cs的文件中,然后将该文件放置在您的Unity项目的Assets/Editor文件夹中。
现在,在您的脚本中声明一个字典对象,并在其前面加上[Serializable]属性,如下所示:
```csharp
[System.Serializable]
public class MyDictionary : Dictionary<string, string> { }
```
在您的MonoBehaviour类中,创建一个公共的MyDictionary对象,并给它赋值。然后,在您的MonoBehaviour类的Inspector面板中,您将看到您的字典对象以键值对列表的形式显示出来。
```csharp
public class MyMonoBehaviour : MonoBehaviour
{
public MyDictionary myDictionary = new MyDictionary()
{
{"Key1", "Value1"},
{"Key2", "Value2"}
};
}
```
这样,您就可以在Unity中显示字典对象了。
阅读全文