首页 > 解决方案 > 从 OnValidate 获取更改后的值

问题描述

假设我有一个包含多个变量的类,我想通过 OnValidate 检查,每次通过 Unity Inspector 更改一个变量时检查所述类中的每个变量似乎没有多大意义。那么有没有办法只检查已更改的变量?

[System.Serializable]
public class Stat
{
    [SerializeField]
    private float _value;

    Value { get; set; } 
}

public class TestClass : MonoBehaviour
{
    public Stat stat1;
    public Stat stat2;
    public Stat stat3;

    void Start(){}

    private void OnValidate()
    {
        if (stat1.Value < 0)
        {
            throw new ArgumentException("Error with stat1");
        }
        else if (stat2.Value < 0)
        {
            throw new ArgumentException("Error with stat2");
        }
        else if (stat3.Value < 0)
        {
            throw new ArgumentException("Error with stat3");
        }
    }
}

所以在这种情况下,每次我在 Unity Inspector 中更改 stat1、stat2 或 stat3。OnValidate 将检查每个看起来效率不高的变量。我想知道是否有办法只获取已更改的值,以便我的代码看起来像这样:

public class TestClass : MonoBehaviour
{
    public Stat stat1;
    public Stat stat2;
    public Stat stat3;

    void Start(){}

    private void OnValidate()
    {
        if (value < 0) // value being the value that was changed
        {
            throw new ArgumentException("Error with {value}");
        }
    }
}

这应该不太相关,但如果有人想知道为什么我有一个 Stat 类,我正在关注一个关于创建具有 SerializeField 的字符统计的教程。

编辑:添加了代码示例以进行说明

标签: c#validationunity3d

解决方案


推荐阅读