Rumah >pembangunan bahagian belakang >C++ >Mengapa Skrip Pengurus Permainan Perpaduan Saya Hanya Berjalan Sekali?

Mengapa Skrip Pengurus Permainan Perpaduan Saya Hanya Berjalan Sekali?

Patricia Arquette
Patricia Arquetteasal
2025-01-14 07:01:47924semak imbas

Why Does My Unity Game Manager Script Only Run Once?

Menyelesaikan masalah Pengurus Permainan Perpaduan: Isu Pelaksanaan Tunggal

Gambaran Keseluruhan Masalah

Dalam pembangunan permainan Unity, pengurus permainan yang gigih merentas adegan adalah penting. Walau bagaimanapun, masalah biasa ialah skrip dilaksanakan sekali sahaja pada permulaan, walaupun terdapat dalam semua adegan.

Punca Punca: Adegan Pramuat Hilang

Perpaduan tidak mempunyai mekanisme pramuat automatik. Tanpa adegan pramuat yang berdedikasi, permulaan pengurus permainan anda dan komponen penting tidak akan bertahan dalam peralihan adegan.

Penyelesaian: Melaksanakan Adegan Pramuat

Berikut ialah cara untuk membetulkannya:

  1. Buat Adegan Pramuat: Tambah adegan baharu (cth., "Pramuat") dan jadikannya adegan 0 dalam Tetapan Binaan anda.
  2. Tambahkan Objek Permainan: Dalam adegan "Pramuat", buat Objek Permainan kosong bernama "_app".
  3. Dayakan "Jangan Musnahkan Semasa Muatan": Dalam Pemeriksa untuk "_app", tandai kotak "Jangan Musnahkan Semasa Muatan".

Melampirkan Komponen Pengurus Permainan

Semua kefungsian pengurus permainan teras anda (sambungan pangkalan data, pengurusan bunyi, penjejakan skor, dll.) hendaklah dilampirkan sebagai komponen kepada GameObject "_app" dalam adegan pramuat anda. Ini menjamin kegigihan mereka merentas semua adegan seterusnya.

Mengakses Objek Permainan daripada Skrip Lain

Dua kaedah wujud untuk mengakses objek permainan daripada skrip lain:

Kaedah 1: FindObjectOfType

Gunakan ini dalam kaedah Awake() skrip anda:

<code class="language-C#">Sound sound = Object.FindObjectOfType<Sound>();
Game game = Object.FindObjectOfType<Game>();</code>

Kaedah 2: Pembolehubah Global Statik (Lebih Cekap)

Pendekatan yang lebih diperkemas menggunakan pembolehubah global statik:

<code class="language-C#">public static class GameManager
{
    public static Sound sound;
    public static Game game;

    static GameManager()
    {
        GameObject app = GameObject.Find("_app");

        sound = app.GetComponent<Sound>();
        game = app.GetComponent<Game>();
    }
}</code>

Ringkasan

Dengan mencipta adegan pramuat dan melampirkan komponen pengurus permainan anda pada GameObject yang berterusan, anda memastikan pelaksanaan yang konsisten merentas semua adegan Unity anda. Pilih kaedah akses objek yang paling sesuai dengan gaya pengekodan anda.

Atas ialah kandungan terperinci Mengapa Skrip Pengurus Permainan Perpaduan Saya Hanya Berjalan Sekali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn