Optimización de Código en Controladores de Juego
Clase 31 de 60 • Curso Avanzado de Creación de RPGs con Unity
Resumen
¿Cómo optimizar el código del controlador de jugador?
La optimización de código es una habilidad crucial para cualquier desarrollador de videojuegos, ya que mejora la eficiencia y la legibilidad del código. En este caso, nos centramos en optimizar un controlador de jugador que tiene varias comprobaciones redundantes. Al reducir el código y reorganizar las comprobaciones de movimiento, podemos lograr un sistema más eficiente y compacto.
Reestructuración de condiciones
Inicialmente, el código tenía tres condicionales para verificar los movimientos en horizontal, vertical y diagonal. Este enfoque no solo duplicaba líneas de código, sino que también ralentizaba el sistema al requerir múltiples verificaciones por segundo. La clave para optimizar esto es unir las condiciones en un solo if
.
if (Mathf.Abs(input.GetAxisRaw("Horizontal")) > 0.5f || Mathf.Abs(input.GetAxisRaw("Vertical")) > 0.5f)
{
walking = true;
Vector2 lastMovement = new Vector2(input.GetAxisRaw("Horizontal"), input.GetAxisRaw("Vertical"));
playerRigidBody.velocity = lastMovement.normalized * speed * Time.deltaTime;
}
¿Cuáles son las ventajas de esta optimización?
-
Reducción en el número de verificaciones: al verificar una sola vez si hay movimiento horizontal o vertical, se simplifica el bucle de actualización (
update
) y se reduce el tiempo de procesamiento. -
Menos líneas de código: se elimina el código redundante, disminuyendo de 130 a 104 líneas. Esto no solo hace el código más limpio, sino también más fácil de mantener.
-
Mejora de la performance: el motor ahora solo comprueba una condición, mejorando así el rendimiento en cada iteración del juego.
¿Cómo manejar el vector de movimiento?
Ahora utilizamos un vector normalizado para manejar el movimiento combinando ambos ejes, lo que permite movimientos diagonales sin la necesidad de cálculos complicados adicionales.
Vector2 lastMovement = new Vector2(input.GetAxisRaw("Horizontal"), input.GetAxisRaw("Vertical"));
playerRigidBody.velocity = lastMovement.normalized * speed * Time.deltaTime;
Esto simplifica el cálculo, ya que normalized
ajusta automáticamente el vector para que el movimiento sea coherente independientemente de la dirección.
¿Por qué es importante realizar refactorización?
El proceso de refactorizar el código es fundamental no solo para mantener un código organizado, sino también para optimizar el rendimiento del juego. Cada mejora de tal índole reduce la carga del motor de juego y facilita la introducción de nuevas funcionalidades.
- Legibilidad: un código más claro es más fácil de entender y de depurar.
- Eficiencia: al eliminar pasos innecesarios, el juego funciona de manera más fluida.
- Escalabilidad: facilita el agregar nuevas características sin preocuparse por problemas de compatibilidad o sobrecarga.
En resumen, optimizar y refactorizar código no solo refuerza las bases del desarrollo, sino que también enriquece la experiencia de juego, prepara el terreno para futuras actualizaciones y garantiza que los recursos del sistema se usen eficientemente.