Rumah >pembangunan bahagian belakang >C++ >Mengapa Skrip Pengurus Permainan Perpaduan Saya Hanya Dijalankan Sekali, dan Bagaimana Saya Boleh Menjadikannya Berterusan Merentasi Tabir?

Mengapa Skrip Pengurus Permainan Perpaduan Saya Hanya Dijalankan Sekali, dan Bagaimana Saya Boleh Menjadikannya Berterusan Merentasi Tabir?

Barbara Streisand
Barbara Streisandasal
2025-01-14 08:06:43816semak imbas

Why Does My Unity Game Manager Script Only Run Once, and How Can I Make It Persistent Across Scenes?

Pengurus Permainan Perpaduan: Isu dan penyelesaian kegigihan merentas senario

Soalan:

Skrip Pengurus Permainan yang direka bentuk untuk berterusan merentas babak hanya akan dilaksanakan sekali pada permulaan projek, walaupun terdapat dalam semua babak.

Sebab:

Setiap projek Unity memerlukan "adegan pramuat" sebagai hab pusat untuk objek dan sistem yang berterusan. Senario ini mesti dinyatakan sebagai senario 0 dalam tetapan binaan.

Penyelesaian:

  1. Buat adegan pramuat:

    • Dalam tetapan binaan, tambahkan adegan baharu yang dipanggil "pramuat" dan tetapkannya sebagai adegan 0.
  2. Tambah objek permainan yang dipramuat:

    • Dalam adegan pramuat, buat objek permainan kosong bernama "__app".
  3. Mohon DontDestroyOnLoad:

    • Tambahkan skrip (atau komponen) "DontDestroyOnLoad" pada objek permainan "__app". Skrip ini memastikan bahawa objek dan komponennya kekal berterusan merentasi suis pemandangan.
  4. Letakkan gelagat biasa dalam adegan pramuat:

    • Semua logik permainan yang dikongsi, seperti sambungan pangkalan data, kesan bunyi dan pemarkahan, harus diletakkan pada objek permainan "__app" dalam adegan pramuat.

Cari komponen dalam adegan lain:

Untuk mengakses komponen berterusan ini daripada adegan lain, anda boleh menggunakan kaedah statik "Object.FindObjectOfType()". Contohnya:

<code class="language-C#">SoundEffects sound = Object.FindObjectOfType<SoundEffects>();
GameState state = Object.FindObjectOfType<GameState>();</code>

Pengoptimuman pilihan:

Untuk mengurangkan pertindihan kod, pertimbangkan untuk menggunakan skrip global berikut:

<code class="language-C#">public static class App
{
    public static SoundEffects SoundEffects { get; private set; }
    public static GameState GameState { get; private set; }

    static App()
    {
        GameObject appObject = GameObject.Find("__app");
        SoundEffects = appObject.GetComponent<SoundEffects>();
        GameState = appObject.GetComponent<GameState>();
    }
}</code>

Menggunakan skrip ini, anda boleh mengakses komponen ini menggunakan sintaks yang dipermudahkan:

<code class="language-C#">App.SoundEffects.PlayExplosion();
App.GameState.CurrentLevel = 5;</code>

Kemudahan pembangunan:

Untuk meningkatkan kecekapan pembangunan, anda boleh mempertimbangkan untuk menambah skrip pada adegan "pramuat" Jika objek "__app" tidak wujud, adegan "pramuat" akan dimuatkan secara automatik semasa pemulaan projek. Ini memastikan bahawa permainan bermula dari adegan "pramuat" setiap kali "Main" diklik.

Atas ialah kandungan terperinci Mengapa Skrip Pengurus Permainan Perpaduan Saya Hanya Dijalankan Sekali, dan Bagaimana Saya Boleh Menjadikannya Berterusan Merentasi Tabir?. 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