Hijos y padres
Clase 20 de 24 • Curso de Introducción a Unity: Scripting
Resumen
¿Cómo manejar jerarquías de GameObjects en Unity como Arrays?
Uno de los retos más comunes en el desarrollo de videojuegos con Unity es la manipulación de Arrays o listas de elementos. A menudo, se requiere agrupar GameObjects e interactuar con ellos de manera ordenada y eficiente. En esta sesión exploraremos un enfoque diferente y emocionante para manejar jerarquías de GameObjects como un Array sin la necesidad de configurar manualmente cada elemento. Esto eliminará errores comunes de configuración y simplificará el proceso de desarrollo.
¿Qué es la estructura de hijos y padres?
En Unity, cada GameObject existe en una jerarquía visual y lógica. Un GameObject puede tener varios hijos, que a su vez pueden tener otros sub-GameObjects. Esto forma una estructura jerárquica donde un objeto padre puede contener múltiples objetos hijo.
- GameObject Padre: Actúa como un contenedor que agrupa varias entidades.
- GameObject Hijo: Un elemento dentro de un contenedor que puede ser manipulado individualmente.
Al manejar estas jerarquías, cada hijo de un GameObject puede accederse de manera similar a un Array en programación, mediante índices.
transform.GetChild(0); // Accede al primer hijo.
¿Cómo accedemos a los GameObjects en la jerarquía?
Para interactuar con los GameObjects hijos de un objeto padre, existen múltiples métodos prácticos y equivalentes a operaciones con Arrays:
-
Acceso por índice: Utiliza
transform.GetChild(index)
para acceder a un hijo específico asignado a un índice, comenzando desde 0. -
Recorrido de todos los hijos: Es posible iterar sobre todos los hijos usando bucles for, aprovechando propiedades como el número de hijos (
transform.childCount
). Aquí un ejemplo básico de cómo hacerlo:for (int i = 0; i < transform.childCount; i++) { Transform child = transform.GetChild(i); Debug.Log(child.name); }
-
Acceso por nombre: Aunque es menos frecuente y se debe manejar con cuidado, es posible acceder a un hijo por su nombre utilizando
transform.Find("NombreDelHijo")
.
¿Cómo movernos entre niveles usando el teclado?
El objetivo al trabajar con jerarquías es facilitar la navegación entre objetos, como si se tratara de un sistema de niveles en un juego. Implementemos un sistema donde un jugador puede cambiar de nivel utilizando teclas de dirección:
-
Inicializa el índice de nivel: Crea una variable
currentLevel
que indique el nivel actual en el que se encuentra el jugador.public int currentLevel = 0;
-
Detecta la entrada del usuario: Monitorea las teclas de dirección del usuario para mover al jugador a través de los niveles.
void Update() { if (Input.GetKeyDown(KeyCode.RightArrow)){ if (currentLevel < transform.childCount - 1) { currentLevel++; player.transform.position = transform.GetChild(currentLevel).position; } } }
-
Implementa movimiento suave: Aunque inicialmente el jugador se teletransporta, es más atractivo lograr un movimiento suave entre puntos. La función
lerp
(interpolación) es clave para mejorar esta experiencia:Vector3.MoveTowards(initialPosition, targetPosition, speed * Time.deltaTime);
¿Cómo mejorar las jerarquías para nuevos niveles?
Añadir más niveles o cambiar el orden de los existentes es cuestión de reorganizar los GameObjects hijos en la jerarquía en Unity. De esta forma, al duplicar y reorganizar los GameObjects, nuestro sistema de navegación automático unirá estos elementos sin errores adicionales, adaptando el flujo de juego a nuevas exigencias o creatividad sin cambiar una sola línea de código.
¿Cómo puedes mejorar el sistema existente?
Te animo a extender la funcionalidad actual. ¿Qué tal si también permites que el jugador regrese niveles con la tecla de flecha izquierda? Intenta implementar esta característica y experimentar con las herramientas que proporciona Unity y el sistema de jerarquías como arrays.
El aprendizaje va de la mano de la práctica. Si tienes cualquier consulta o necesitas más detalles, revisa el material complementario proporcionado en los recursos del curso. Estoy aquí para ayudarte y apoyar tu camino en el desarrollo de videojuegos. ¡Adelante, estás en la senda correcta!