Как отследить источник вызова «OnValidate ()» - PullRequest
1 голос
/ 30 апреля 2020

Я хочу, чтобы в скрипте были радиокнопки для логических значений, и похоже, что OnValidate() был бы идеальным способом сделать это. Однако мне нужно было бы отследить, какое значение было изменено в инспекторе, и поставить проверку идентификатора, но я не смог найти решение для части трассировки. Как мне узнать, какое значение было изменено для OnValidate(), который будет вызван?

1 Ответ

1 голос
/ 30 апреля 2020

Как сказано в комментариях, возможно, не самое "красивое" решение, но я бы сделал это, например, как

// 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, изменяется только через Инспектора или при первой загрузке актива.

Эта функция вызывается при загрузке скрипта или изменении значения в Инспекторе (Вызывается в только редактор).

Возможно, вы также можете работать со списком / массивом вместо отдельных полей, конечно


Печатается на смартфоне, поэтому не может его проверить сейчас, но я надеюсь, что идея прояснится

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...