Siguiente nivel
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 19 de 56.
Cada escena de la lista de escenas de la compilación tiene un número, su índice de compilación: 0 para la primera, 1 para la siguiente, y así sucesivamente. LoadScene acepta ese número además de un nombre, y SceneManager.sceneCountInBuildSettings indica cuántas escenas contiene la lista. Como los niveles están en orden en la lista, el siguiente nivel es el índice de la escena activa más 1. Esta salida lo carga y, después del último nivel, se detiene:
void OnTriggerEnter(Collider other)
{
if (!other.CompareTag("Player")) return;
int next = SceneManager.GetActiveScene().buildIndex + 1;
if (next < SceneManager.sceneCountInBuildSettings)
{
SceneManager.LoadScene(next);
}
else
{
Debug.Log("You finished the game!");
}
}Con cuatro escenas, los índices van de 0 a 3 y sceneCountInBuildSettings es 4, así que en el último nivel next es 4, uno más allá del final. Por eso la prueba es next < sceneCountInBuildSettings: LoadScene(4) no cargaría nada y registraría el error de Unity Cannot load scene: Invalid scene name (empty string) and invalid build index 4.
Ahora un único script de salida sirve para todos los niveles, y ninguno de ellos especifica el nombre de una escena. Para añadir un nivel, añades su escena a la lista; para cambiar el orden, arrastras las escenas dentro de la lista.
Desafío
FácilLa compilación incluye cuatro escenas: Menu (índice 0), después Level1, Level2 y Level3. El botón Play del menú abre Level1, y las flechas mueven al Player (ambos están listos). Cada nivel tiene un Goal dorado con el script Goal. Escríbelo sin nombrar ninguna escena:
- En Start, muestra el número de este nivel y el número de niveles en
levelText, comoLevel 2 of 3. El menú no es un nivel. - Cuando el Player (con la etiqueta
Player) llegue a la meta, carga el siguiente nivel de la lista. Después del último nivel, vuelve al menú.
Pulsa Play, juega los tres niveles y después pulsa Check.
Pruébalo tú mismo
using UnityEngine;
using UnityEngine.SceneManagement;
using TMPro;
public class Goal : MonoBehaviour
{
public TMP_Text levelText;
void Start()
{
// muestra "Level 2 of 3": el número de este nivel y cuántos niveles hay
}
void OnTriggerEnter(Collider other)
{
// el jugador ha llegado a la meta: carga el siguiente nivel o el menú después del último
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Creación de juegos reales
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: corredor infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada