1) Когда строишь архитектуру, то любые изменения должны происходить по событию, меняющему что-то в программе, а не в апдейте проверять "а изменилось ли событие?". Поэтому в хорошем коде много мелких функций с внятным названием, а в плохом коде две-три огромные функцию со смешанным содержанием и куча апдейтов во всём проекте, которые ищут что же произошло.
2) Если нужно что-то поменять только в момент, когда переменная меняется, но не известно откуда и как она будет меняться, то есть свойства:
Используется csharp
private int _test =0;
public int test
{
get{return _test;}
set{_test = value; MyAction();}
}
void MyAction()
{
Debug.Log("Oh no, test was changed!");
}