Comment se téléporter entre les scènes dans Unity

La téléportation entre les scènes dans Unity est une fonctionnalité utile pour faire passer les joueurs d'un niveau ou d'une zone à un autre. Ce didacticiel explique comment implémenter la téléportation de scène à l'aide du chargement de scène additif, en garantissant la persistance des données du joueur et en déchargeant l'ancienne scène après la téléportation. Cette approche garantit une transition en douceur sans perte de données ou d'objets du joueur.

Configuration des scènes et des points de téléportation

Tout d’abord, nous allons configurer les scènes et désigner les points de téléportation à l’intérieur de celles-ci.

Créer des scènes

  1. Dans Unity, allez dans Fichier > Nouvelle scène pour créer une nouvelle scène. Enregistrez-la dans votre dossier Assets, en la nommant Scene1.
  2. Répétez le processus pour créer une autre scène nommée Scene2.
  3. Ajoutez les deux scènes aux paramètres de construction en allant dans Fichier > Paramètres de construction et en cliquant sur Ajouter des scènes ouvertes.

Désignation des points de téléportation

Chaque scène nécessite un point désigné où le joueur apparaîtra après la téléportation.

  1. Dans Scene1, créez un GameObject vide et nommez-le TeleportPoint1. Étiquetez-le de manière appropriée, par exemple, comme SpawnPoint.
  2. Dans Scene2, créez un autre GameObject vide nommé TeleportPoint2 et étiquetez-le de la même manière.
  3. Ces GameObjects serviront d'emplacements d'apparition lors de la transition entre les scènes.

Créer un script de téléportation

Le script de téléportation gère la transition de scène, garantissant que le joueur se déplace vers le bon emplacement dans la nouvelle scène, puis décharge la scène précédente.

Script de téléportation

using UnityEngine;
using UnityEngine.SceneManagement;

public class Teleportation : MonoBehaviour
{
    public string sceneToLoad; // Name of the scene to load
    public string spawnPointTag = "SpawnPoint"; // Tag for identifying the spawn point

    private string currentSceneName; // To track the current scene

    void Start()
    {
        currentSceneName = SceneManager.GetActiveScene().name;
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            DontDestroyOnLoad(other.gameObject); // Prevent player object from being destroyed

            SceneManager.LoadScene(sceneToLoad, LoadSceneMode.Additive); // Load new scene additively
            SceneManager.sceneLoaded += OnSceneLoaded; // Register callback for scene load completion
        }
    }

    void OnSceneLoaded(Scene scene, LoadSceneMode mode)
    {
        if (scene.name == sceneToLoad)
        {
            // Find the spawn point in the newly loaded scene
            GameObject spawnPoint = GameObject.FindWithTag(spawnPointTag);
            if (spawnPoint != null)
            {
                GameObject player = GameObject.FindWithTag("Player");
                if (player != null)
                {
                    // Teleport the player to the spawn point
                    player.transform.position = spawnPoint.transform.position;
                }
            }

            // Unload the previous scene
            SceneManager.UnloadSceneAsync(currentSceneName);

            // Update the current scene name and unregister the event handler
            currentSceneName = sceneToLoad;
            SceneManager.sceneLoaded -= OnSceneLoaded;
        }
    }
}
  1. Créez un nouveau script C# nommé Teleportation.cs dans le dossier Scripts.
  2. Attachez ce script à un objet qui agira comme déclencheur de téléportation, comme une porte ou un portail.
  3. Définissez sceneToLoad sur le nom de la scène vers laquelle effectuer la transition et assurez-vous que le point de téléportation dans la nouvelle scène est correctement étiqueté.

Gestion des données des joueurs dans les différentes scènes

Si votre jeu nécessite la conservation des données des joueurs (comme l'inventaire, la santé, etc.) dans plusieurs scènes, implémentez une stratégie de persistance des données.

Données persistantes des joueurs

using UnityEngine;

public class PlayerData : MonoBehaviour
{
    public static PlayerData instance;

    public int health = 100;

    void Awake()
    {
        if (instance == null)
        {
            instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }
}
  1. Créez un nouveau script C# nommé PlayerData.cs et attachez-le à l'objet joueur ou à un GameObject distinct.
  2. Assurez-vous que ce GameObject n'est pas détruit pendant les transitions de scène en utilisant DontDestroyOnLoad(gameObject).

Conclusion

La téléportation entre les scènes dans Unity, en particulier avec le chargement et le déchargement additifs des scènes, offre une expérience fluide. Cette méthode conserve les objets de jeu importants comme le joueur et gère efficacement les ressources en déchargeant la scène précédente. Une telle approche est particulièrement utile dans les jeux avec des environnements vastes ou continus. Personnalisez davantage cette configuration pour répondre à des exigences de jeu spécifiques, comme la conservation des données d'état ou l'ajout d'effets visuels pendant les transitions.