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ıklarklasörünüze kaydedin ve adınıSahne1olarak belirleyin.
- Aynı işlemi tekrarlayarak Sahne2adı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 Ekleseç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ı- TeleportPoint1olarak belirleyin. Uygun şekilde etiketleyin, örneğin,- SpawnPoint.
- Scene2içerisinde- TeleportPoint2adı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;
        }
    }
}- Scriptsklasöründe- Teleportation.csadı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ı sceneToLoadolarak 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.csadı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.