Menu
CoddyTech

Siguiente nivel

Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 19 de 60.

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 recibe ese número, además de un nombre, y SceneManager.sceneCountInBuildSettings indica cuántas escenas contiene la lista. Como los niveles están ordenados 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 después del final. Por eso la condición 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 solo script de salida sirve para todos los niveles, y ninguno de ellos especifica el nombre de una escena. Para añadir un nivel, añade su escena a la lista; para cambiar el orden, arrastra las escenas dentro de la lista.

challenge icon

Desafío

Fácil

Haz que cada objetivo abra el siguiente nivel.

  1. En Start(), muestra "Level " + level + " of " + levels en levelText: level es el buildIndex de la escena activa, levels es SceneManager.sceneCountInBuildSettings - 1.
  2. En OnTriggerEnter, para el Player, carga buildIndex + 1, o 0 (el menú) cuando no sea menor que sceneCountInBuildSettings.

Pulsa «Jugar» y termina los tres niveles: volverás al menú. Después, pulsa «Comprobar».

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 llegó a la meta: carga el siguiente nivel o el menú después del último nivel
    }
}

Todas las lecciones de Creación de juegos reales

Practica por tu cuenta: Playground de Unity