यूनिटी में दृश्यों के बीच टेलीपोर्ट कैसे करें

Unity में दृश्यों के बीच टेलीपोर्ट करना खिलाड़ियों को विभिन्न स्तरों या क्षेत्रों के बीच स्थानांतरित करने के लिए एक उपयोगी सुविधा है। यह ट्यूटोरियल एडिटिव सीन लोडिंग का उपयोग करके सीन टेलीपोर्टेशन को लागू करने, खिलाड़ी डेटा की स्थिरता सुनिश्चित करने और टेलीपोर्टेशन के बाद पुराने दृश्य को अनलोड करने के तरीके को कवर करता है। यह दृष्टिकोण खिलाड़ी डेटा या ऑब्जेक्ट्स को खोए बिना एक सहज संक्रमण सुनिश्चित करता है।

दृश्य और टेलीपोर्टेशन पॉइंट सेट करना

सबसे पहले, हम दृश्यों को सेट करेंगे और उनके भीतर टेलीपोर्टेशन बिंदु निर्धारित करेंगे।

दृश्य बनाना

  1. Unity में, नया दृश्य बनाने के लिए फ़ाइल > नया दृश्य पर जाएँ। इसे अपने Assets फ़ोल्डर में सेव करें, इसका नाम Scene1 रखें।
  2. Scene2 नामक एक अन्य दृश्य बनाने के लिए प्रक्रिया को दोहराएं।
  3. फ़ाइल > बिल्ड सेटिंग्स पर जाकर और ओपन दृश्य जोड़ें पर क्लिक करके दोनों दृश्यों को बिल्ड सेटिंग्स में जोड़ें।

टेलीपोर्टेशन बिंदुओं का निर्धारण

प्रत्येक दृश्य के लिए एक निर्दिष्ट बिंदु की आवश्यकता होती है जहां खिलाड़ी टेलीपोर्टेशन के बाद दिखाई देगा।

  1. Scene1 में, एक खाली GameObject बनाएँ और उसका नाम TeleportPoint1 रखें। इसे उचित रूप से टैग करें, उदाहरण के लिए, SpawnPoint
  2. Scene2 में, TeleportPoint2 नाम से एक और खाली GameObject बनाएं और इसे इसी तरह टैग करें।
  3. ये गेमऑब्जेक्ट्स दृश्यों के बीच संक्रमण के समय स्पॉन स्थानों के रूप में काम करेंगे।

टेलीपोर्टेशन स्क्रिप्ट बनाना

टेलीपोर्टेशन स्क्रिप्ट दृश्य परिवर्तन का प्रबंधन करती है, यह सुनिश्चित करती है कि खिलाड़ी नए दृश्य में सही स्थान पर चला जाए, और फिर पिछले दृश्य को अनलोड कर दे।

टेलीपोर्टेशन स्क्रिप्ट

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. Scripts फ़ोल्डर में Teleportation.cs नाम से एक नई C# स्क्रिप्ट बनाएँ।
  2. इस स्क्रिप्ट को किसी ऐसी वस्तु से जोड़ें जो टेलीपोर्ट ट्रिगर के रूप में कार्य करेगी, जैसे कि दरवाजा या पोर्टल।
  3. संक्रमण हेतु दृश्य के नाम के लिए sceneToLoad सेट करें, तथा सुनिश्चित करें कि नए दृश्य में टेलीपोर्टेशन बिंदु सही ढंग से टैग किया गया है।

विभिन्न दृश्यों में प्लेयर डेटा का प्रबंधन

यदि आपके गेम में विभिन्न दृश्यों में खिलाड़ी डेटा (जैसे इन्वेंट्री, स्वास्थ्य, आदि) को बनाए रखने की आवश्यकता है, तो डेटा दृढ़ता रणनीति लागू करें।

लगातार खिलाड़ी डेटा

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. PlayerData.cs नाम से एक नई C# स्क्रिप्ट बनाएं और इसे प्लेयर ऑब्जेक्ट या एक अलग गेमऑब्जेक्ट से जोड़ें।
  2. DontDestroyOnLoad(gameObject) का उपयोग करके सुनिश्चित करें कि यह GameObject दृश्य परिवर्तन के दौरान नष्ट न हो।

निष्कर्ष

Unity में दृश्यों के बीच टेलीपोर्ट करना, विशेष रूप से एडिटिव सीन लोडिंग और अनलोडिंग के साथ, एक सहज अनुभव प्रदान करता है। यह विधि खिलाड़ी जैसे महत्वपूर्ण गेम ऑब्जेक्ट को बनाए रखती है और पिछले दृश्य को अनलोड करके संसाधनों को कुशलतापूर्वक प्रबंधित करती है। ऐसा दृष्टिकोण विशेष रूप से बड़े या निरंतर वातावरण वाले गेम में उपयोगी है। विशिष्ट गेमप्ले आवश्यकताओं के अनुरूप इस सेटअप को और अधिक अनुकूलित करें, जैसे कि स्टेट डेटा को बनाए रखना या संक्रमण के दौरान दृश्य प्रभाव जोड़ना।

लिंक
Unity 6