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
- Dans Unity, allez dans
Fichier > Nouvelle scène
pour créer une nouvelle scène. Enregistrez-la dans votre dossierAssets
, en la nommantScene1
. - Répétez le processus pour créer une autre scène nommée
Scene2
. - Ajoutez les deux scènes aux paramètres de construction en allant dans
Fichier > Paramètres de construction
et en cliquant surAjouter 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.
- Dans
Scene1
, créez un GameObject vide et nommez-leTeleportPoint1
. Étiquetez-le de manière appropriée, par exemple, commeSpawnPoint
. - Dans
Scene2
, créez un autre GameObject vide nomméTeleportPoint2
et étiquetez-le de la même manière. - 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;
}
}
}
- Créez un nouveau script C# nommé
Teleportation.cs
dans le dossierScripts
. - Attachez ce script à un objet qui agira comme déclencheur de téléportation, comme une porte ou un portail.
- 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);
}
}
}
- Créez un nouveau script C# nommé
PlayerData.cs
et attachez-le à l'objet joueur ou à un GameObject distinct. - 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.