使用unity odin编写插件 我有一个list字符串,然后我还有一个字段然后我想实现在编辑器侠用字典添加新的key时显示的筛选是我前面定义的list字符串里的
时间: 2025-01-01 20:35:14 浏览: 11
在Unity中使用Odin这个插件(Odin Inspector)来创建自定义编辑器功能,你需要先确保已经安装了Odin并将其集成到你的项目中。对于你的需求,你可以在Editor模式下,通过C#脚本来实现一个动态筛选功能,当用户尝试向字典中添加新键时,只接受预设列表中的键。
以下是一个简单的步骤和示例代码:
1. **添加依赖**:如果你还没有使用Odin,需要在`Assets/ProjectSettings/Editor/Inspector Settings`下的`Prefferred Inspector Package`中添加`Odin Inspector`。
2. **创建一个基础类型**:创建一个继承自`ScriptableObject`或`MonoBehaviour`的类,用于保存你的数据,比如`Dictionary<string, string> myDictionary`。
```csharp
using UnityEngine;
using Odin Inspector;
public class CustomData : ScriptableObject
{
[Serializable]
public class MyKeyValuePair : ScriptableObject
{
public string Key;
// 其他属性...
}
[OdinListFilter("YourList")] // 这里是关键,告诉Odin使用哪个列表做筛选
public MyKeyValuePair[] filteredKeys; // 字典的键作为可筛选的项
// 前面定义的list字符串
private List<string> allowedKeyList = new List<string>() { "Key1", "Key2", "Key3" };
}
```
3. **实现筛选逻辑**:在`CustomData`类中,你可以添加一个方法来检查键是否在允许的列表中:
```csharp
public void OnValidate() // Unity会在每次保存前后调用这个方法
{
foreach (var kvp in filteredKeys)
{
if (!allowedKeyList.Contains(kvp.Key))
{
Debug.LogError($"试图添加的键 '{kvp.Key}' 不在预设列表中,请从'{allowedKeyList.JoinToString(", ")}'中选择.");
// 或者在这里阻止添加操作
kvp.Key = null; // 或者设置为默认值或其他处理方式
}
}
}
```
4. **在编辑器中使用**:在Inspector视图中,可以直接拖动预设的键到字典中,它们将受到上述筛选逻辑的控制。
阅读全文