Buscar..


No hay métodos anulados

La razón por la que no tiene que anular Awake , Start , Update y otro método es porque no son métodos virtuales definidos en una clase base.

La primera vez que se accede a su script, el tiempo de ejecución de scripting busca en el script para ver si se han definido algunos métodos. Si lo son, esa información se almacena en caché y los métodos se agregan a su lista respectiva. Estas listas simplemente se repiten en diferentes momentos.

La razón por la que estos métodos no son virtuales se debe al rendimiento. Si todos los scripts tuvieran Awake , Start , OnEnable , OnDisable , Update , LateUpdate y FixedUpdate , entonces todos estos se agregarían a sus listas, lo que significaría que todos estos métodos se ejecutarán. Normalmente, esto no sería un gran problema, sin embargo, todas estas llamadas de métodos son desde el lado nativo (C ++) al lado administrado (C #), lo que conlleva un costo de rendimiento.

Ahora imagine esto, todos estos métodos están en sus listas y algunos / la mayoría de ellos incluso pueden no tener un cuerpo de método real. Esto significaría que hay una gran cantidad de rendimiento desperdiciado en los métodos de llamada que ni siquiera hacen nada. Para evitar esto, Unity optó por dejar de usar métodos virtuales e hizo un sistema de mensajería que se asegura de que solo se llame a estos métodos cuando realmente estén definidos, ahorrando llamadas de método innecesarias.

Puede leer más sobre el tema en un blog de Unity aquí: 10000 Update () Llamadas y más sobre IL2CPP aquí: Una introducción a los internos de IL2CPP



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow