如何在统一编辑器中显示以下KeyValuePair(以便可编辑)

TDS*_*ock 3 c# unity-game-engine unity-editor

简而言之:我有一个 KeyValuePair,我想在检查器中显示并使其可编辑。

我有以下自定义键值对的实现类。

using UnityEngine;
namespace Unit.Properties
{
    public class ClassificationPropertySuperClass : MonoBehaviour, IClassificationUnitProperty
    {
        [SerializeField]
        KeyValuePair<UnitClassifications, float> value;

        public KeyValuePair<UnitClassifications, float> GetComponentValue()
        {
            return value;
        }

        public void SetComponentValue(KeyValuePair<UnitClassifications, float> value)
        {
            this.value = value;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

仅供参考,这是我制作的自定义 KeyValuePair 类

[System.Serializable]
public class KeyValuePair<TKey, TValue>
{
    public KeyValuePair()
    {
    }

    public KeyValuePair(TKey key, TValue value)
    {
        Key = key;
        Value = value;
    }

    public TKey Key { get; set; }
    public TValue Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在问题的核心是我无法在检查器中编辑这些值。对于设计师来说,这是绝对必须的。我很想创建一个编辑器脚本来添加此功能,但当涉及到这些功能时我有点迷失了。有谁愿意帮我吗?

仅供参考,这是它们现在在检查器中的显示方式

在此输入图像描述

任何帮助深表感谢!

der*_*ugo 5

默认情况下,检查器无法显示/编辑属性。

代替

public TKey Key { set; get;}
public TValue Value { set; get; }
Run Code Online (Sandbox Code Playgroud)

使用

public TKey Key;
public TValue Value;
Run Code Online (Sandbox Code Playgroud)

它应该可以在检查器中编辑。


在较新的版本中,您还可以执行以下操作

[field: SerializeField] public TKey Key { set; get;}
[field: SerializeField] public TValue Value { set; get; }
Run Code Online (Sandbox Code Playgroud)