Cara Teleportasi Antar Scene di Unity

Teleportasi antaradegan di Unity merupakan fitur yang berguna untuk memindahkan pemain antarlevel atau area yang berbeda. Tutorial ini membahas cara menerapkan teleportasi adegan menggunakan pemuatan adegan aditif, memastikan persistensi data pemain, dan membongkar adegan lama setelah teleportasi. Pendekatan ini memastikan transisi yang lancar tanpa kehilangan data atau objek pemain.

Menyiapkan Adegan dan Titik Teleportasi

Pertama, kita akan menyiapkan tempat kejadian dan menentukan titik teleportasi di dalamnya.

Membuat Adegan

  1. Di Unity, buka File > New Scene untuk membuat adegan baru. Simpan di folder Assets, beri nama Scene1.
  2. Ulangi proses untuk membuat adegan lain bernama Scene2.
  3. Tambahkan kedua adegan ke pengaturan bangunan dengan membuka File > Pengaturan Bangunan dan mengeklik Tambahkan Adegan Terbuka.

Menunjuk Titik Teleportasi

Setiap adegan membutuhkan titik tertentu di mana pemain akan muncul setelah teleportasi.

  1. Di Scene1, buat GameObject kosong dan beri nama TeleportPoint1. Beri tag yang sesuai, misalnya, sebagai SpawnPoint.
  2. Di Scene2, buat GameObject kosong lain bernama TeleportPoint2 dan beri tag yang sama.
  3. GameObject ini akan berfungsi sebagai lokasi kemunculan ketika berpindah antar adegan.

Membuat Skrip Teleportasi

Skrip teleportasi mengatur transisi adegan, memastikan pemain bergerak ke lokasi yang benar di adegan baru, lalu membongkar adegan sebelumnya.

Skrip Teleportasi

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. Buat skrip C# baru bernama Teleportation.cs di folder Scripts.
  2. Lampirkan skrip ini ke objek yang akan bertindak sebagai pemicu teleportasi, seperti pintu atau portal.
  3. Tetapkan sceneToLoad ke nama adegan yang akan ditransisikan, dan pastikan titik teleportasi di adegan baru diberi tag dengan benar.

Menangani Data Pemain di Seluruh Adegan

Jika permainan Anda mengharuskan pemeliharaan data pemain (seperti inventaris, kesehatan, dsb.) di seluruh adegan, terapkan strategi persistensi data.

Data Pemain yang Berkelanjutan

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. Buat skrip C# baru bernama PlayerData.cs dan lampirkan ke objek pemain atau GameObject terpisah.
  2. Pastikan GameObject ini tidak hancur selama transisi adegan dengan menggunakan DontDestroyOnLoad(gameObject).

Kesimpulan

Teleportasi antar adegan di Unity, khususnya dengan pemuatan dan pembongkaran adegan aditif, memberikan pengalaman yang lancar. Metode ini mempertahankan objek permainan penting seperti pemain dan mengelola sumber daya secara efisien dengan membongkar adegan sebelumnya. Pendekatan semacam itu khususnya berguna dalam permainan dengan lingkungan yang besar atau berkelanjutan. Sesuaikan pengaturan ini lebih lanjut agar sesuai dengan persyaratan permainan tertentu, seperti mempertahankan data status atau menambahkan efek visual selama transisi.