Cómo se llama la actualización
No, Unity no usa System.Reflection para encontrar un método mágico cada vez que necesita llamar a uno.
En cambio, la primera vez que se accede a un MonoBehaviour de un tipo dado, el script subyacente se inspecciona a través del tiempo de ejecución de scripts (Mono o IL2CPP) si tiene algún método mágico definido y esta información se almacena en caché. Si un MonoBehaviour tiene un método específico, se agrega a una lista adecuada, por ejemplo, si un script tiene definido el Método de actualización, se agrega a una lista de scripts que deben actualizarse en cada cuadro.
Durante el juego, Unity solo recorre estas listas y ejecuta métodos a partir de ellas, así de simple. Además, es por eso que no importa si su método de actualización es público o privado.
En cuanto a las razones por las que se hace de esta manera, en gran medida lo remitiré (al lector) a la respuesta de DMGregory , que se reduce a un equilibrio de dos cosas en competencia:
- Optimización del rendimiento
- Facilidad de utilización de nuevos desarrolladores
Un nuevo desarrollador solo quiere que funcione y no quiere tener que averiguar "¿cómo conecto esto al sistema de eventos?" pero aún así debería correr rápido con una sobrecarga mínima.
La solución es probablemente la mejor que se puede lograr dentro de estas dos restricciones. O al menos, lo mejor que el equipo de desarrollo de Unity pudo encontrar en ese momento. Puede que nunca lo sepamos.