Как сказано в комментариях, возможно, не самое "красивое" решение, но я бы сделал это, например, как
// 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
, изменяется только через Инспектора или при первой загрузке актива.
Эта функция вызывается при загрузке скрипта или изменении значения в Инспекторе (Вызывается в только редактор).
Возможно, вы также можете работать со списком / массивом вместо отдельных полей, конечно
Печатается на смартфоне, поэтому не может его проверить сейчас, но я надеюсь, что идея прояснится