Как называется обновление
Нет, Unity не использует System.Reflection для поиска магического метода каждый раз, когда ему нужно вызвать его.
Вместо этого, при первом обращении к MonoBehaviour заданного типа базовый сценарий проверяется во время выполнения сценария (Mono или IL2CPP), определены ли у него какие-либо магические методы, и эта информация кэшируется. Если у MonoBehaviour есть определенный метод, он добавляется в соответствующий список, например, если в сценарии определен метод Update, он добавляется в список сценариев, которые необходимо обновлять каждый кадр.
Во время игры Unity просто перебирает эти списки и выполняет из нее методы - это просто. Кроме того, именно поэтому не имеет значения, является ли ваш метод обновления общедоступным или закрытым.
Что касается причин, по которым это делается таким образом, я буду в значительной степени отсылать вас (читателя) к ответу Д.М. Грегори , который сводится к балансу двух конкурирующих вещей:
- Оптимизация производительности
- Простота использования нового разработчика
Новый разработчик просто хочет, чтобы он работал, и не хочет выяснять, «как мне подключить это к системе событий?» но он все равно должен работать быстро с минимальными накладными расходами.
Решение, вероятно, является лучшим, которое может быть достигнуто в рамках этих двух ограничений. Или, по крайней мере, лучшее, что команда разработчиков Unity смогла придумать в то время. Возможно, мы никогда не узнаем.