unity如何在inspector中编辑list<keyvaluepair>
时间: 2024-04-14 12:28:20 浏览: 280
Unity3d读写格式为<key></key><string></string>类型的xml
在Unity的Inspector中编辑`List<KeyValuePair>`可以使用自定义的PropertyDrawer来实现。下面是一些步骤来帮助你完成这个过程:
1. 创建一个新的脚本文件,命名为`KeyValuePairListDrawer.cs`(或者你喜欢的其他名称)。
2. 在脚本文件中编写以下代码:
```csharp
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
[CustomPropertyDrawer(typeof(List<KeyValuePair<string, string>>))]
public class KeyValuePairListDrawer : PropertyDrawer
{
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.BeginProperty(position, label, property);
EditorGUI.LabelField(position, label);
position.y += EditorGUIUtility.singleLineHeight;
EditorGUI.indentLevel++;
SerializedProperty list = property.FindPropertyRelative("list");
for (int i = 0; i < list.arraySize; i++)
{
SerializedProperty element = list.GetArrayElementAtIndex(i);
SerializedProperty key = element.FindPropertyRelative("Key");
SerializedProperty value = element.FindPropertyRelative("Value");
Rect keyRect = new Rect(position.x, position.y, position.width * 0.4f, EditorGUIUtility.singleLineHeight);
Rect valueRect = new Rect(position.x + position.width * 0.45f, position.y, position.width * 0.4f, EditorGUIUtility.singleLineHeight);
EditorGUI.PropertyField(keyRect, key, GUIContent.none);
EditorGUI.PropertyField(valueRect, value, GUIContent.none);
position.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
}
EditorGUI.indentLevel--;
EditorGUI.EndProperty();
}
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
int count = property.FindPropertyRelative("list").arraySize;
return EditorGUIUtility.singleLineHeight * (count + 1) + EditorGUIUtility.standardVerticalSpacing * count;
}
}
```
3. 将脚本文件放置在项目中的任何文件夹中。
4. 在Inspector中使用`List<KeyValuePair<string, string>>`类型的属性时,它将自动使用我们创建的PropertyDrawer进行绘制和编辑。
现在,你可以在Inspector中编辑`List<KeyValuePair<string, string>>`类型的属性了。每个KeyValuePair都会显示为一个键值对,并且你可以为每个键和值输入不同的值。
注意:这个PropertyDrawer只支持`List<KeyValuePair<string, string>>`类型的属性。如果你想在Inspector中编辑其他类型的KeyValuePair列表,你需要进行适当的修改。
阅读全文