Artikel ini akan bermanfaat bagi pengembang game pemula. Di dalamnya, saya akan berbicara tentang pengalaman saya sendiri dalam mengimplementasikan interaksi multi-tahap dan masalah yang saya temui.
Mari kita bicara tentang kelas statis untuk menyimpan data, berbagai cara untuk memuat adegan dengan mesin Unity, dan juga menyentuh kasus menghubungkan Admob ke proyek. Informasi disediakan oleh dokumentasi resmi dan komunitas pengembang yang ramah.
Situasi
Gim saya terdiri dari dua adegan - menu utama, yang langsung terlihat saat memuat dan, secara langsung, adegan gim dengan mekanik, di mana, tergantung pada opsi yang dipilih, prefab objek dimuat. Tidak mungkin bagi saya untuk menggabungkan mereka ke dalam satu adegan, karena beberapa objek yang agak rumit diikat ke menu, dan lebih mudah untuk memisahkan entitas.
Sebelumnya, saya hanya akan menggunakan objek pengontrol tertentu untuk menyimpan data, tetapi dengan bongkar muat adegan, itu tidak ada lagi.
Transfer Data (kelas statis)
Ternyata Unity sangat baik dalam bekerja dengan kode, bahkan jika itu secara damai terletak pada file di folder skrip dan tidak dilampirkan oleh komponen ke objek di atas panggung (ini tidak jelas bagi pemula). Misalnya, file seperti itu bisa berupa kelas statis jenis ini:
using UnityEngine; public static class DataHolder { private static GameObject prefabName; public static GameObject Prefab { get { return prefabName; } set { prefabName = value; } } }
Jadi, saya berhasil menyimpan pilihan pengguna bahkan setelah membongkar adegan dan memuat yang baru. Awalnya, semuanya bekerja persis dengan adegan pergantian keras.
Dengan menggunakan mekanisme ini, Anda juga dapat mentransfer pengaturan ke adegan lain dari menu, misalnya, bahasa pelokalan, pengaturan untuk suara dan musik, dan banyak lagi.
Multi-nilai (Manajemen Scene)
Semuanya cocok untuk saya dan seterusnya, hingga saya menerima tugas untuk terhubung ke proyek Admob (iklan), sehingga video ditampilkan tepat di awal adegan permainan. Ternyata, ada seluk-beluk: meminta video membutuhkan banyak waktu, dan itu tidak punya waktu untuk tiba ketika beralih adegan. Saya tidak ingin menunda penundaan tambahan dalam proyek, terutama karena kami memiliki banyak waktu sampai pemain "menempel" ke menu. Kemudian saya menemukan bahwa tidak perlu mengganti adegan "keras", karena ada opsi yang bagus untuk memuat aditif (tanpa membongkar adegan sebelumnya).
Saya memuat adegan permainan dengan pengontrol menu (adegan dengan menu dan objek iklan tetap dimuat juga):
SceneManager.LoadScene(1,LoadSceneMode.Additive);
Setelah menyelesaikan level, saya membongkar adegan game dengan pengontrol game (sehingga tidak menggantung di memori saya):
SceneManager.LoadScene(0,LoadSceneMode.Single);
Dengan menggunakan skema semacam itu, iklan dimuat langsung di awal aplikasi, dan Anda dapat memohon tampilan iklan pada waktu yang diinginkan. Anda dapat melakukan hal yang sama dengan benda apa pun yang Anda butuhkan.
Masalahnya
Sayangnya, bahkan dengan pemuatan adegan tambahan, Anda tidak akan dapat mempelajari objek dari satu adegan dari adegan lainnya. Tautan ke objek harus ditransmisikan melalui "mediator" tertentu (dalam kasus saya, kelas statis yang sama digunakan).
Hati-hati saat membuat cetakan, jika beberapa adegan aktif - bagi saya mereka semua memutuskan untuk menabrak adegan yang salah (lebih banyak tentang itu di waktu lain).