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
- Di Unity, buka
File > New Scene
untuk membuat adegan baru. Simpan di folderAssets
, beri namaScene1
. - Ulangi proses untuk membuat adegan lain bernama
Scene2
. - Tambahkan kedua adegan ke pengaturan bangunan dengan membuka
File > Pengaturan Bangunan
dan mengeklikTambahkan Adegan Terbuka
.
Menunjuk Titik Teleportasi
Setiap adegan membutuhkan titik tertentu di mana pemain akan muncul setelah teleportasi.
- Di
Scene1
, buat GameObject kosong dan beri namaTeleportPoint1
. Beri tag yang sesuai, misalnya, sebagaiSpawnPoint
. - Di
Scene2
, buat GameObject kosong lain bernamaTeleportPoint2
dan beri tag yang sama. - 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;
}
}
}
- Buat skrip C# baru bernama
Teleportation.cs
di folderScripts
. - Lampirkan skrip ini ke objek yang akan bertindak sebagai pemicu teleportasi, seperti pintu atau portal.
- 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);
}
}
}
- Buat skrip C# baru bernama
PlayerData.cs
dan lampirkan ke objek pemain atau GameObject terpisah. - 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.