Café y Código

5. Ciclo de Juego y Compilación: Cerrando la Experiencia 🏆📦

El Ciclo de Juego Completo

Un prototipo funcional necesita un inicio y un fin automatizados. Si el jugador choca contra un obstáculo letal o si el tiempo llega a cero, el juego debe reiniciarse solo. Si junta todas las monedas, debe avanzar.

Para manejar esto en Unity, importamos la librería nativa UnityEngine.SceneManagement.

Programando el Reinicio y Cambio de Nivel

Abriremos nuestro script GameManager.cs y actualizaremos los métodos del fin del juego usando la función Invoke(nombreMetodo, tiempoEspera) para retrasar el reinicio del nivel, dándole tiempo al jugador de asimilar su derrota o victoria:

GameManager.cs (Ciclo de Carga)
CSHARP
1 using UnityEngine;
2 using UnityEngine.SceneManagement; // Libreria requerida para manejar escenas
3
4 public class GameManager : MonoBehaviour
5 {
6 // ... codigo anterior del GameManager ...
7
8 private void GameOver(bool won)
9 {
10 isGameOver = true;
11 if (won)
12 {
13 winLoseText.text = "¡VICTORIA! 🎉";
14 winLoseText.color = Color.green;
15
16 // Cargar pantalla de victoria despues de 3 segundos
17 Invoke("LoadVictoryScene", 3f);
18 }
19 else
20 {
21 winLoseText.text = "GAME OVER 💀";
22 winLoseText.color = Color.red;
23
24 // Reiniciar el nivel actual despues de 2 segundos
25 Invoke("RestartLevel", 2f);
26 }
27 }
28
29 private void RestartLevel()
30 {
31 // Obtiene el nombre del nivel actual y lo vuelve a cargar desde cero
32 string currentSceneName = SceneManager.GetActiveScene().name;
33 SceneManager.LoadScene(currentSceneName);
34 }
35
36 private void LoadVictoryScene()
37 {
38 // Carga la escena de felicitaciones
39 SceneManager.LoadScene("VictoryScene");
40 }
41 }

Explicación:

  • SceneManager.GetActiveScene().name: Retorna un string con el nombre exacto de la escena en la que estás jugando en este momento (por ejemplo, "Level1").
  • SceneManager.LoadScene(): Cierra la escena actual, libera la memoria y carga la escena solicitada desde su estado inicial.
  • Invoke("Metodo", 2f): Llama a una función interna de la clase después de esperar exactamente 2 segundos de tiempo real.

Paso Obligatorio: Registrar las Escenas en los Build Settings

Si intentas llamar a SceneManager.LoadScene con una escena que Unity no conoce, el juego lanzará un error de ejecución. Debemos registrar todas nuestras escenas en la configuración del juego:

  1. En la barra superior de Unity, ve a File -> Build Settings.
  2. Verás una lista vacía llamada Scenes In Build (Escenas en la compilación).
  3. Arrastra tu escena de juego actual (ej. SampleScene o Level1) y tu escena de victoria (VictoryScene) dentro de ese recuadro.
  4. Cierra la ventana. Ahora el motor ya sabe qué escenas están permitidas en el ciclo del ejecutable.

Compilando tu Juego (Build and Run)

El último paso de un prototipo ágil es exportarlo en un formato ejecutable para que otras personas puedan probar tu creación (por ejemplo, tu profesor, un cliente o tus amigos) sin necesidad de tener Unity instalado:

  1. Abre nuevamente File -> Build Settings.
  2. Selecciona tu plataforma objetivo en la lista de la izquierda:
    • PC, Mac & Linux Standalone: Genera un ejecutable nativo (.exe o .app) para computadoras.
    • WebGL: Compila tu juego en formato HTML5/JavaScript para que pueda ejecutarse directamente dentro de cualquier navegador web (puedes subirlo gratis a itch.io).
  3. Haz clic en el botón Build (o Build and Run).
  4. Crea una nueva carpeta vacía en tu computadora llamada Build y selecciónala como destino.
  5. Espera a que la barra de carga finalice. ¡Felicidades! Ya tienes tu carpeta contenedora con el videojuego 3D completo listo para compartir.

Ponte a prueba

Comprueba tus conocimientos sobre el ciclo de vida de las escenas en Unity y la generación de entregables compilados.

Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.
🎮 CONSOLA DE SKIN
Comandos: matrix, minecraft, pacman, default
>