Dikonfigurasi Masukkan Mode Bermain
Adegan Reloading

Reloading Domain

Reloading Domain ulang state scripting Anda, dan diaktifkan secara default. Ini menyediakan Anda dengan keadaan skrip yang benar-benar segar, dan mengatur ulang semua bidang statis dan pemegang terdaftar setiap kali Anda memasukkan Mode Bermain. Ini berarti setiap kali Anda memasukkan Mode Bermain di Editor Unity, Proyek Anda mulai bermain dengan cara yang sangat mirip dengan ketika pertama kali dimulai dalam membangun.

Reloading Domain memakan waktu, dan waktu ini meningkat dengan jumlah dan kompleksitas scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary
di Proyek Anda. Ketika butuh waktu yang lama untuk memasukkan Mode Play, itu menjadi lebih sulit untuk dengan cepat menyalakan Proyek Anda. Ini adalah alasan Unity menyediakan opsi untuk mematikan Reloading Domain.

Mengaktifkan Reloading Domain

Untuk menonaktifkan Reloading Domain:

  1. Login Pengaturan Proyek > Editor
  2. Pastikan Masukkan Mode Bermain Pilihan diaktifkan.
  3. Nonaktifkan Reload Domain

Untuk informasi lebih lanjut, lihat Cara mengkonfigurasi Mode Bermain

Ketika Reloading Domain dinonaktifkan, masukkan Play Mode lebih cepat, karena Unity tidak mengatur ulang state scripting setiap kali. Namun, kemudian sampai dengan Anda untuk memastikan ulang state scripting Anda ketika Anda memasukkan Mode Play. Untuk melakukan ini, Anda perlu menambahkan kode yang mengatur ulang state scripting Anda ketika Play Mode dimulai.

Ketika Reloading Domain dinonaktifkan, Unity masih menyegarkan keadaan scripting ketika Anda memperbarui atau mengubah skrip, berdasarkan pengaturan auto-refresh Anda.

Modifikasi skrip Anda untuk melakukan dengan benar ketika Reload Domain dinonaktifkan:

Untuk memastikan skrip Anda menyatakan dengan benar mengatur ulang pada Play Mode, Anda perlu membuat penyesuaian ke bidang statis dan menangani acara statis di skrip Anda.

Bidang statis

Ketika Reloading Domain dinonaktifkan, nilai static fields dalam kode Anda tidak secara otomatis ulang ke nilai aslinya. Anda perlu menambahkan kode yang secara eksplisit melakukan ini.

Contoh kode berikut memiliki bidang counter statis yang masuk ketika pengguna menekan tombol Jump. Ketika Reloading Domain diaktifkan, counter secara otomatis mengatur ulang ke nol ketika memasuki Mode Bermain. Ketika Reloading Domain dinonaktifkan, counter tidak mengatur ulang; itu menjaga nilainya dalam dan keluar dari Mode Play. Ini berarti bahwa pada menjalankan kedua Proyek Anda di Editor, counter mungkin tidak ada pada nol jika berubah dalam menjalankan sebelumnya.

using UnityEngine;

public class StaticCounterExample : MonoBehaviour
{
// this counter will not reset to zero when Domain Reloading is disabled
    static int counter = 0; 

    // Update is called once per frame
    void Update()
    {
            if (Input.GetButtonDown("Jump"))
            {
                    counter++;
                    Debug.Log("Counter: " + counter);
            }
    }
}

Untuk memastikan penghitung ulang bahkan ketika Reloading Domain dinonaktifkan, Anda harus menggunakan [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] atribut, dan mengatur ulang nilai secara eksplisit:

using UnityEngine;

public class StaticCounterExampleFixed : MonoBehaviour
{
    static int counter = 0;

    [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)]
    static void Init()
    {
            Debug.Log("Counter reset.");
            counter = 0;   
    }

    // Update is called once per frame
    void Update()
    {
            if (Input.GetButtonDown("Jump"))
            {
                counter++;
                Debug.Log("Counter: " + counter);
            }
    }
}

Pegangan acara statis

Sitemap Reloading dinonaktifkan, Unity tidak akan metode unregister dari event handler statis ketika Anda keluar Play Mode. Ini dapat menyebabkan komplikasi jika Anda memiliki kode yang mendaftar metode dengan event handler statis. Misalnya, pada Play pertama proyek Anda di editor, metode akan terdaftar sebagai normal. Namun pada Play kedua proyek Anda, metode tersebut akan terdaftar dalam waktu kedua selain yang pertama, menyebabkan metode tersebut disebut dua kali ketika acara terjadi.

Misalnya, kode ini mendaftar metode dengan handler acara statis Application.quitting Dengan Reloading Domain diaktifkan, Unity secara otomatis mengatur handler acara ketika Play Mode dimulai, sehingga metode hanya pernah terdaftar sekali. Namun, dengan Domain Reloading dinonaktifkan, handler acara tidak dibersihkan, sehingga pada jangka kedua dari Anda Proyek dalam editor, metode ini terdaftar dalam waktu kedua, dan disebut dua kali ketika acara terjadi - yang biasanya tidak diinginkan.

using UnityEngine;
public class StaticEventExample : MonoBehaviour
{
    void Start()
    {
            Debug.Log("Registering quit function");
            Application.quitting += Quit;
    }


    static void Quit()
    {
        Debug.Log("Quitting!");
    }
}

Ketika Reloading Domain dinonaktifkan, contoh di atas menambahkan metode Quit lagi setiap kali Anda memasukkan Mode Play. Hasil ini dalam pesan tambahan “Quitting” setiap kali Anda keluar Play Mode.

Untuk memastikan event handler ulang bahkan ketika Reloading Domain dinonaktifkan, Anda harus menggunakan atribut [RuntimeThistializeOnLoadMethod], dan tidak menimbulkan metode secara eksplisit sehingga tidak ditambahkan dua kali.

using UnityEngine;
public class StaticEventExampleFixed : MonoBehaviour
{
    [RuntimeInitializeOnLoadMethod]
    static void RunOnStart()
    {
            Debug.Log("Unregistering quit function");
            Application.quitting -= Quit;
    }

    void Start()
    {
            Debug.Log("Registering quit function");
            Application.quitting += Quit;
    }

    static void Quit()
    {
        Debug.Log("Quitting the Player");
    }
}

Untuk skrip runtime, Anda harus menggunakan atribut [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] untuk mengatur ulang bidang statis dan event handler.

Untuk skrip Editor seperti jendela editor kustom atau InspectorsJendela Unity yang menampilkan informasi tentang Pengaturan GameObject yang dipilih saat ini, aset atau proyek, memungkinkan Anda untuk memeriksa dan mengedit nilai. More info
Lihat di Glossary
yang menggunakan statics, Anda harus menggunakan atribut [InitializeOnEnterPlayMode] untuk mengatur ulang bidang statis dan menangani acara.

Dikonfigurasi Masukkan Mode Bermain
Adegan Reloading