Unity'de Sahneler Arasında Nasıl Işınlanılır
Unity'deki sahneler arasında ışınlanma, oyuncuların farklı seviyeler veya alanlar arasında geçiş yapması için kullanışlı bir özelliktir. Bu eğitim, sahne ışınlanmasının ek sahne yüklemesi kullanılarak nasıl uygulanacağını, oyuncu veri kalıcılığının nasıl sağlanacağını ve ışınlanmadan sonra eski sahnenin nasıl boşaltılacağını ele alır. Bu yaklaşım, oyuncu verisi veya nesneleri kaybetmeden sorunsuz bir geçiş sağlar.
Sahneleri ve Işınlanma Noktalarını Ayarlama
Öncelikle sahneleri oluşturup sahneler içerisinde ışınlanma noktalarını belirleyeceğiz.
Sahneler Oluşturma
- Unity'de, yeni bir sahne oluşturmak için
Dosya > Yeni Sahne
'a gidin. BunuVarlıklar
klasörünüze kaydedin ve adınıSahne1
olarak belirleyin. - Aynı işlemi tekrarlayarak
Sahne2
adında başka bir sahne oluşturun. - Her iki sahneyi de derleme ayarlarına eklemek için
Dosya > Derleme Ayarları
yolunu izleyin veAçık Sahneler Ekle
seçeneğine tıklayın.
Işınlanma Noktalarının Belirlenmesi
Her sahnenin, oyuncunun ışınlandıktan sonra belireceği belirli bir noktaya ihtiyacı vardır.
Scene1
'da boş bir GameObject oluşturun ve adınıTeleportPoint1
olarak belirleyin. Uygun şekilde etiketleyin, örneğin,SpawnPoint
.Scene2
içerisindeTeleportPoint2
adında boş bir GameObject daha yaratın ve benzer şekilde etiketleyin.- Bu GameObject'ler sahneler arasında geçiş yaparken spawn lokasyonları olarak görev yapacak.
Bir Işınlanma Komut Dosyası Oluşturma
Işınlanma betiği sahne geçişini yönetir, oyuncunun yeni sahnede doğru yere gitmesini sağlar ve ardından önceki sahneyi boşaltır.
Işınlanma Komut Dosyası
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;
}
}
}
Scripts
klasöründeTeleportation.cs
adında yeni bir C# betiği oluşturun.- Bu betiği, bir kapı veya portal gibi ışınlanma tetikleyicisi görevi görecek bir nesneye ekleyin.
- Geçiş yapılacak sahnenin adını
sceneToLoad
olarak ayarlayın ve yeni sahnedeki ışınlanma noktasının doğru şekilde etiketlendiğinden emin olun.
Sahneler Arası Oyuncu Verilerinin İşlenmesi
Oyununuzun sahneler arasında oyuncu verilerinin (envanter, sağlık vb.) tutulmasını gerektirmesi durumunda, bir veri kalıcılığı stratejisi uygulayın.
Kalıcı Oyuncu Verileri
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);
}
}
}
PlayerData.cs
adında yeni bir C# betiği oluşturun ve bunu oyuncu nesnesine veya ayrı bir GameObject'e ekleyin.DontDestroyOnLoad(gameObject)
kullanarak bu GameObject'in sahne geçişleri sırasında yok edilmediğinden emin olun.
Çözüm
Unity'deki sahneler arasında ışınlanma, özellikle ek sahne yükleme ve boşaltma ile, sorunsuz bir deneyim sağlar. Bu yöntem, oyuncu gibi önemli oyun nesnelerini korur ve önceki sahneyi boşaltarak kaynakları verimli bir şekilde yönetir. Böyle bir yaklaşım, özellikle büyük veya sürekli ortamlara sahip oyunlarda faydalıdır. Bu kurulumu, geçişler sırasında durum verilerini korumak veya görsel efektler eklemek gibi belirli oyun gereksinimlerine uyacak şekilde daha da özelleştirin.