首页 > 解决方案 > 如何跟踪调用“OnValidate()”的来源

问题描述

我想要一个脚本有布尔单选按钮,这似乎是OnValidate()做到这一点的完美方式。但是,我需要跟踪检查器中更改了哪些值并检查标识符,但我找不到跟踪部分的解决方案。我怎么知道OnValidate()要调用什么值?

标签: c#unity3d

解决方案


正如评论中所说,可能不是最“美丽”的解决方案,但我会这样做,例如

// These are the fields in the Inspector
// changing any via the Inspector will Invoke OnValidade
[SerializeField] private bool bool1;
[SerializeField] private bool bool2;

// These are private and will be used to check what was changed
private bool _oldBool1;
private bool _oldBool2;

private void OnValidate()
{
    if(bool1 != _oldBool1)
    {
        // bool1 was changed 

        if(bool1)
        {
            // Probably: set all other values to false
        }
        else
        {
            // Probably check if all other values are false, if so this may not be false
        }
    }

    if(bool2 != _oldBool2)
    {
        // bool2 was changed 

        if(bool2)
        {
            // Probably: set all other values to false
        }
        else
        {
            // Probably check if all other values are false, if so this may not be false
        }
    }

    // Etc

    // And finally store the new values


    _oldBool1 = bool1;
    _oldBool2 = bool2;

    // Etc
}

Afaik 通过序列化字段的脚本进行的更改不应调用另一个OnValidate,只能通过检查器或第一次加载资产时进行更改。

当加载脚本或在检查器中更改值时调用此函数(仅在编辑器中调用)。

当然,您也可以使用列表/数组而不是单个字段


在智能手机上打字,所以现在无法测试,但我希望这个想法很清楚


推荐阅读