Buenas, voy a ir añadiendo un listado de resultados comparativos.
Inicialmente emplearé esta plantilla que podéis descargar Main.cs.
- Crear una escena vacía en Unity.
- Crear un GameObject vacío al que le agregáis el Main.cs y darle a play.
Lo que hace este primer test, es ejecutar 200k repeticiones de dos bucles. Uno donde se modifica la posición del gameobject accediendo al transform vía GetComponent vs otro que lo hace desde una variable cacheando el transform.
Cada 20 ciclos completos de los dos bucles de 200k repeticiones (lo que son 4 millones de ajustes de posición al gameobject) calcula el promedio de tiempo de proceso y lo muestra en pantalla mediante barras de porcentaje.
La plantilla en este primer ejemplo solo hace dos test, GetComponent vs Variable, pero está diseñada para ser reutilizable y mostrar tantas barras y porcentajes como se carguen en la variable pruebas del script.
El resultado desde la build compilada puede variar respecto al resultado mostrado en ejecución desde del editor.
También depende de la plataforma de salida.
El resultado desde el editor es este:
case 0:
for (int i = 0; i < iteracciones; i++) {
GetComponent <Transform> ().position = Vector3.zero;
}
break;
case 1:
for (int i = 0; i < iteracciones; i++) {
variable.position = Vector3.zero;
}
break;
Usar GetComponent para acceder al component es aproximadamente un 30% más lento que acceder al component usando una variable que contenga su referencia.
Esto en funciones tipo Update y bucles puede tener un efecto significativo.
Iré agregando más mini test comparativos.