كيفية الانتقال الفوري بين المشاهد في Unity

يعد الانتقال الآني بين المشاهد في Unity ميزة مفيدة لانتقال اللاعبين بين مستويات أو مناطق مختلفة. يغطي هذا البرنامج التعليمي كيفية تنفيذ الانتقال الآني للمشهد باستخدام تحميل المشهد الإضافي، وضمان ثبات بيانات اللاعب، وتفريغ المشهد القديم بعد الانتقال الآني. يضمن هذا النهج انتقالًا سلسًا دون فقدان بيانات اللاعب أو الأشياء.

إعداد المشاهد ونقاط النقل الآني

أولاً، سنقوم بإعداد المشاهد وتحديد نقاط النقل الآني داخلها.

إنشاء المشاهد

  1. في Unity، انتقل إلى File > New Scene لإنشاء مشهد جديد. احفظه في مجلد Assets، وأطلق عليه اسم Scene1.
  2. كرر العملية لإنشاء مشهد آخر باسم Scene2.
  3. قم بإضافة كلا المشهدين إلى إعدادات البناء بالانتقال إلى ملف > إعدادات البناء والنقر فوق إضافة مشاهد مفتوحة.

تحديد نقاط النقل الآني

يحتاج كل مشهد إلى نقطة محددة يظهر فيها اللاعب بعد النقل الآني.

  1. في Scene1، أنشئ كائن لعبة فارغًا وأطلق عليه اسم TeleportPoint1. ضع علامة مناسبة عليه، على سبيل المثال، باسم SpawnPoint.
  2. في Scene2، قم بإنشاء GameObject فارغ آخر باسم TeleportPoint2 وقم بوضع علامة عليه بشكل مشابه.
  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. قم بإنشاء برنامج نصي C# جديد باسم Teleportation.cs في المجلد Scripts.
  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. قم بإنشاء نص برمجي جديد بلغة C# باسم PlayerData.cs وقم بربطه بكائن المشغل أو كائن GameObject منفصل.
  2. تأكد من عدم تدمير GameObject هذا أثناء انتقالات المشهد باستخدام DontDestroyOnLoad(gameObject).

خاتمة

يوفر الانتقال الآني بين المشاهد في Unity، وخاصةً مع تحميل وتفريغ المشهد الإضافي، تجربة سلسة. تحتفظ هذه الطريقة بأشياء اللعبة المهمة مثل اللاعب وتدير الموارد بكفاءة من خلال تفريغ المشهد السابق. يعد هذا النهج مفيدًا بشكل خاص في الألعاب ذات البيئات الكبيرة أو المستمرة. قم بتخصيص هذا الإعداد بشكل أكبر ليناسب متطلبات اللعب المحددة، مثل الحفاظ على بيانات الحالة أو إضافة تأثيرات بصرية أثناء الانتقالات.