En el capítulo 4 vimos cómo utilizar la herramienta Animator para crear un diagrama de estados para las animaciones y cómo navegar a través de los estados a nivel de código. En este apartado del anexo terminaremos de implementar la pantalla y su lógica.
Figura 5.1. Diferentes GameObjects de la pantalla del menú principal.
En la Figura 5.1 se muestra los diferentes GameObject de la pantalla del menú principal. El planeta, representado como el GameObject “world” contiene su textura y además también contiene cuatro hijos sin ninguna textura asociada. El giro del planeta podríamos calcularlo matemáticamente pero lo realizaremos mediante colisiones para así utilizar las funciones de Unity3d para 2D como la función “OnMouseDown” vista en el capítulo 3 o la función “OnTriggerStay2D”.
Cuando pulsemos sobre uno de los mundos, el planeta girará hasta que dicho mundo colisione con el personaje. Como los mundos son hijos del planeta, éstos también girarán al heredar sus transformaciones. Para que los mundos puedan detectar las colisiones, deben tener marcado sus “Box Collider 2D” como “trigger”, es decir, disparadores. Además, también será necesario añadir un “RigidBody 2D” como se puede apreciar en la Figura 5.2.
Figura 5.2. Inspector de un “mundo” con los diferentes componentes agregados.
En el planeta tendremos asociado el siguiente script de la Figura 5.3 con varias variables estáticas globales que controlarán su movimiento desde otros scripts.
Guardaremos un estado para conocer en qué mundo estamos, lo cual es necesario para establecer la lógica del botón para acceder a los niveles de un determinado mundo.
En el script de la Figura 5.4 se pueden ver dos funciones. La primera, “OnMouseDown”, comprueba cuando pulsamos sobre dicho objeto y activa el giro del planeta y el estado “walking” de nuestro personaje. La segunda función, “OnTriggerStay2D”, se dispara cuando un GameObject con un “collider” toca al objeto. Esta función se dispararía en el momento en el que un GameObject entrase dentro del objeto. En este caso, cuando el personaje toca el mundo, se dispara la función y desactiva el giro del planeta, guarda el estado en el que se encuentra, cambia el estado de nuestro personaje a “resting” y activa el botón con el texto del mundo. Para que la colisión con el personaje se produzca en el centro de éste, en su “Box Collider 2D” se modifica la propiedad “offset” con un valor negativo para que se quede ligeramente a su izquierda como se puede apreciar el recuadro verde de la Figura 5.5.
Figura 5.5. Box Collider 2D del personaje con el Offset con un valor negativo.
En el botón para ir a un nivel controlaremos su pulsación y según en el mundo en el que estemos, cargaremos un nivel u otro.
La implementación de la pantalla del menú principal en Unity generalmente implica la creación de una interfaz de usuario (UI) que permita a los jugadores navegar entre diferentes opciones del juego:
1. Creación de la Interfaz de Usuario (UI):
- Abre la escena principal de tu juego en Unity.
- Utiliza el sistema de UI de Unity para crear elementos como botones, texto, imágenes, etc., que formarán parte de la pantalla del menú.
2. Diseño del Menú:
- Diseña la disposición y apariencia de los elementos del menú. Considera la inclusión de opciones como «Jugar», «Opciones», «Salir», entre otras.
3. Creación de Botones:
- Crea botones para cada opción del menú.
- Asigna funciones a los botones que se ejecutarán cuando el jugador interactúe con ellos.
4. Manejo de Navegación:
- Implementa lógica para la navegación entre diferentes pantallas del menú.
- Puedes utilizar el sistema de eventos de Unity o scripts de control para manejar la transición entre pantallas.
5. Configuración de Escenas:
- Asigna las escenas correspondientes a las opciones del menú. Por ejemplo, al hacer clic en «Jugar», carga la escena del juego principal.
6. Animaciones (Opcional):
- Añade animaciones para mejorar la transición y apariencia de los elementos del menú.
- Puedes utilizar el sistema de animaciones de Unity o herramientas como DOTween.
7. Música y Sonidos:
- Asigna música y efectos de sonido apropiados para el menú principal.
- Configura la reproducción de sonidos mediante scripts asociados a los eventos de la interfaz.
8. Configuración de Fondos y Estilos:
- Personaliza el fondo y el estilo del menú para que coincida con la estética de tu juego.
- Ajusta colores, fuentes y otros elementos visuales.
9. Opciones del Menú (Opcional):
- Implementa una pantalla de opciones para permitir a los jugadores ajustar configuraciones como volumen, calidad gráfica, etc.
10. Controladores de Menú (Scripts):
- Crea scripts en C# para manejar la lógica detrás del menú.
- Asigna estos scripts a objetos relevantes, como botones.
11. Configuración de la Cámara:
- Ajusta la configuración de la cámara para la pantalla del menú principal.
- Asegúrate de que la cámara capture correctamente todos los elementos de la interfaz.
12. Pruebas y Ajustes:
- Ejecuta el juego y realiza pruebas en la pantalla del menú principal.
- Ajusta el diseño y la funcionalidad según sea necesario.
13. Documentación:
- Documenta el flujo y la implementación del menú principal para futuras referencias y colaboración.
14. Iteración:
- Realiza iteraciones en el diseño y la funcionalidad del menú principal según el feedback de prueba y los cambios en el diseño del juego.