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
Lepaskan: 2025-01-14 08:06:43
asal
845 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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

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

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan