Unity Addressables: selalu cukup memori

gambar

Anda memimpin tim yang terdiri dari beberapa programmer dan seniman yang mengerjakan porting permainan PS4 VR yang indah ke Oculus Quest. Anda memiliki enam bulan untuk melakukannya. Apa yang akan menjadi langkah pertama Anda? Mari kita coba gunakan Unity Addressables.

Anda memahami bahwa Anda harus menyelesaikan beberapa tugas yang agak sulit secara bersamaan. Beberapa akan lebih sulit bagi Anda daripada yang lain, itu tergantung pada pengalaman Anda di masing-masing bidang. Jika Anda memilih yang mana dari mereka yang paling membuat Anda kurang tidur, lalu apa itu?

Saya kira yang berikut ini: sekitar 70% pembaca akan mengatakan bahwa masalah terbesar saat porting game ke Quest adalah kinerja CPU / GPU. Saya bisa menjawab ini: kemungkinan besar Anda benar. Meningkatkan produktivitas adalah salah satu bidang tersulit dalam permainan VR. Optimalisasi jenis ini memerlukan studi produk secara menyeluruh, dan ini membutuhkan waktu. Kadang-kadang optimasi lebih lanjut tidak mungkin, karena itu Anda biasanya harus menyingkirkan elemen gameplay dan grafis yang mahal. Dan berbahaya untuk mengecewakan pemain.

Kecepatan, kecepatan, kecepatan ... Apa yang diharapkan dalam hal ini dari platform Quest? Seberapa produktif itu? Faktanya adalah jika Anda sudah memiliki pengalaman dalam mengembangkannya, maka Anda tahu bahwa terlepas dari mobilitasnya, ternyata sangat kuat.

"Ayo, penulis, mengapa kamu berbohong? Ponsel saya mulai melambat begitu saya membuka tab browser kedua. Bagaimana Anda bisa mengatakan bahwa platform seluler bisa produktif? "

Perbedaan besar terletak pada sistem pendingin aktif Quest , yang memberikan keuntungan besar pada CPU / GPU-nya yang tidak disediakan oleh platform seluler lainnya. Ini adalah kipas yang kuat yang meniup debu dari rambut Anda dan membuat prosesor tidak meleleh di wajah Anda.

Selain itu, OS yang lebih khusus lebih dioptimalkan untuk rendering realitas virtual (kejutan) daripada Android standar. Selama beberapa tahun terakhir, perangkat keras seluler mulai dengan cepat mengejar ketinggalan dengan platform tetap.

Tetapi pada saat yang sama, saya tidak akan menyangkal bahwa tugas rendering konstan dengan frekuensi 72 fps akan sulit, terutama untuk port game VR yang berasal dari platform yang kuat. Ketika kita berbicara tentang Oculus Quest, Anda dapat membayangkan Snapdragon 835 dengan layar, baterai, empat kamera, dan kipas.

Apa yang tampak seperti cacat sebenarnya dapat diambil sebagai keuntungan. Platform seluler ini adalah perangkat yang diteliti dengan baik dengan zat besi yang lemah. Kita dapat mengatakan bahwa ada ribuan trik yang diketahui untuk dengan cepat mengurangi beban pada CPU dan GPU ke tingkat yang dapat diterima. Jika Anda tertarik, maka Anda dapat membacanya di posting saya selanjutnya. Dan dalam artikel ini kita akan mengeluarkan kinerja dari pertanyaan.

Perhatian kami dalam masalah ini mungkin bahwa, dibandingkan dengan PS4, Quest memiliki satu karakteristik perangkat keras yang setengahnya: kapasitas RAM . Yakni, volumenya berkurang dari 8 menjadi 4 GB RAM. Ini adalah perkiraan, karena pada kedua platform, sistem operasi tidak memungkinkan untuk menggunakannya sepenuhnya, sehingga Anda dapat melacakbeberapa subsistem yang diperlukan untuk fungsi ekosistem. Di Quest, Anda dapat menggunakan hingga sekitar 2,2 GB RAM; jika lebih, kekacauan sudah mulai.

"Tapi apa yang kamu maksud dengan kekacauan ?" Faktanya adalah bahwa untuk permainan itu sangat penting untuk menerapkan manajemen memori yang benar. Itu terjadi karena kami memiliki dua keterbatasan:

  • Batas memori keras : jika Anda melebihi batas tertentu, maka OS hanya akan mematikan permainan
  • Batas memori lunak

Jelas, kami tidak ingin yang pertama atau kedua terjadi dalam permainan. Dapatkah Anda membayangkan kemarahan seorang pemain yang telah kehilangan dua jam terakhir lewat? Ya, dia pasti akan pergi ke toko aplikasi dan tidak akan mengatakan sesuatu yang menyenangkan di sana.

Tentu saja, ketersediaan terjamin dari 2,2 GB RAM tidak begitu banyak. Biasanya ini bukan masalah untuk proyek-proyek baru di mana statistik dipantau terus-menerus sejak awal, tetapi pasti menjadi kesulitan untuk port dengan perangkat keras yang jauh lebih lemah.

Jika Anda pernah berurusan dengan port serupa di masa lalu, Anda akan segera menyadari betapa sulitnya untuk mengurangi separuh jumlah RAM yang tersedia . Ini sangat tergantung pada seberapa baik arsitektur game siap untuk perubahan seperti itu, tetapi dalam kebanyakan kasus itu hanya menyebabkan air mata.

Strategi yang paling populer untuk mengurangi kebutuhan memori adalah mengubah parameter kompresi aset, mengoptimalkan skrip, mengurangi variasi shader, dll. Paling sering, solusi pertama adalah mengubah opsi impor untuk tekstur, tetapi jika perlu, Anda dapat menggunakan kompresi jerat, animasi, dan suara. Masalahnya adalah teknik seperti itu biasanya rumit dan memiliki plafon sendiri .

Tidak semua platform mendukung parameter impor yang sama: ketika mengembangkan untuk perangkat yang berbeda, biaya pemasangan pipa meningkat secara signifikan, belum lagi kompleksitas QA, desain grafis dan pemrograman. Misalnya, apakah ini mendukung perangkat Android ASTC, atau hanya ETC2 (dan umumnya salah satunya)? Oh, dan kami masih membutuhkan 64-bit build, tetapi pada saat yang sama kami ingin mempertahankan pemain dengan versi 32-bit. Berapa banyak APK individual yang perlu kita buat dan uji untuk setiap pembaruan dalam game? Jika Anda ingin menyederhanakan hidup Anda, maka Anda seharusnya tidak hanya mengandalkan teknik-teknik ini.

Karena itu, kita perlu melangkah lebih dalam. Tentu saja, kami ingin semuanya sesederhana mungkin, terutama saat membuat port. Mendaur ulang gim sepenuhnya untuk kinerja adalah pilihan yang lebih buruk daripada tidak memindahkannya. Sebagai bagian dari topik artikel, saya akan menunjukkan salah satu keuntungan terpenting: Anda akan belajar cara mengurangi jumlah memori yang diperlukan hingga setengahnya hanya dalam beberapa jam .

Bukankah itu hebat?

Baiklah, mari, mari, tanyakan kepada saya: apakah ini benar-benar mungkin dalam kasus Anda? Saya akan menjawab: itu tergantung pada kondisi awal, tetapi dalam pengalaman saya, jawabannya adalah YA . Unity Addressables dapat melakukan layanan hebat di sini. Apa masalahnya? Anda harus berinvestasi dan menguasai prosesnya. Tetapi alur kerja seperti itu akan memungkinkan Anda untuk memenangkan gelar karyawan bulan ini.

Jika Anda tertarik, maka lanjutkan membaca.

Dalam posting ini, kita akan beralih dari manajemen aset tradisional ke manajemen aset berbasis addressable . Untuk menggambarkan proses ini, kami memindahkan proyek old-school yang disederhanakan ke era baru Unity Addressables.

Anda mungkin bertanya: mengapa Anda tidak menunjukkan hasilnya saja di pekerjaan Anda yang sebenarnya?

Di dunia tanpa kompetisi, saya hanya akan menunjukkan semua materi yang saya buat. Namun, di dunia nyata, saya kemungkinan besar akan dihukum untuk ini. Dan kemudian mereka akan memenjarakan saya.

Jadi sebagai gantinya, saya menawarkan bantuan saya: kami akan mengerjakan proyek yang menghadirkan semua kesulitan yang akan Anda hadapi besok di proyek berikutnya. Dan untuk memulainya, kami akan membawa Unity Addressables ke dalam paket rekomendasi yang kami sediakan .

Dalam posting ini saya akan memperkenalkan Anda ke Addressables sehingga Anda dapat menerapkan sistem Unity Addressables Anda sendiri dalam hitungan menit .


Unity Addressables: mengapa mereka dibutuhkan?


Perhatian harus diberikan pada bagian penting ini. Tugas kita adalah mengenali cara-cara sederhana untuk mengoptimalkan penggunaan memori dan mengimplementasikannya dengan cepat. Ada berbagai cara untuk melakukan ini, tetapi salah satu yang paling kuat dan sekaligus paling sederhana adalah memuat adegan pertama dan meluncurkan profiler. Mengapa?

Karena arsitektur permainan yang tidak dioptimalkan dapat dikenali kapan saja dari gameplay , jadi cara tercepat untuk memeriksanya adalah dengan membuat profil adegan pertama. Alasannya adalah karena penggunaan skrip yang terlalu aktif seperti tautan tunggal yang berisi tautan ke semua aset, untuk berjaga-jaga .

Dengan kata lain, banyak permainan biasanya memiliki skrip mahakuasa yang menciptakan banyak tautan ke aset .Komponen ini menjaga setiap aset dimuat secara konstan, terlepas dari apakah saat ini sedang digunakan.

Seberapa buruk itu?

Situasinya berbeda. Jika gim Anda kemungkinan dibatasi oleh memori? maka ini adalah keputusan yang sangat berisiko, karena permainan tidak akan skala dengan peningkatan jumlah aset yang ditambahkan (misalnya, pikirkan tentang DLC ​​masa depan). Jika Anda mengembangkan untuk perangkat heterogen, misalnya, untuk Android, maka Anda tidak memiliki jumlah memori tunggal; Setiap perangkat memiliki kapasitasnya sendiri, jadi Anda harus bergantung pada kasus terburuk. OS dapat memutuskan untuk mematikan aplikasi kapan saja jika pengguna tiba-tiba beralih untuk membalas pesan di Facebook. Ketika dia kembali, kejutan akan menunggunya - permainan sudah ditutup.

Apakah itu menyenangkan?

Benar-benar tidak.

Yang memperumit situasinya adalah kenyataan bahwa jika Anda kemudian memutuskan (atau seseorang memutuskan untuk Anda) untuk memindahkan game ke platform lain yang kurang kuat sambil mempertahankan cross-play, Anda hanya bisa berharap keberuntungan. Anda pasti tidak akan mau menghadapi masalah teknis seperti itu.

Di sisi lain, apakah ada situasi di mana manajemen aset tradisional sesuai? Ya tentu saja. Jika Anda mengembangkan untuk platform yang seragam, seperti untuk PS4, dan sebagian besar persyaratan diketahui sejak awal, manfaat objek global berpotensi lebih besar daripada kompleksitas tambahan dari sistem manajemen memori yang ditingkatkan.

Karena Anda harus mengakui: objek global lama yang baik yang menyimpan semua yang kami butuhkan adalah solusi sederhana jika cocok untuk Anda. Ini akan menyederhanakan kode dan memuat semua aset yang direferensikan.

Meskipun demikian, manajemen memori tradisional tidak dapat diterima bagi pengembang yang berusaha memaksimalkan penggunaan sumber daya besi . Anda membaca artikel, yang berarti Anda ingin meningkatkan keterampilan Anda. Jadi waktunya telah tiba untuk melakukannya.

Memenuhi Unity Addressables.

Persyaratan Proyek dengan Unity Addressables


Jika Anda berencana untuk hanya membaca posting ini, maka layar akan cukup. Jika Anda ingin melakukan segalanya dengan saya. maka Anda akan membutuhkan yang berikut:

  • Tangan
  • Pikiran pintar
  • Unity 2019.2.0f1 atau lebih tinggi
  • Proyek Level 1 dengan GitHub (unduh zip atau melalui baris perintah)
  • Keinginan untuk mempelajari bagian dalam Unity Addressables

Repositori git berisi tiga commit, satu untuk setiap level posting ini (kecuali saya mencampur sesuatu dan membuat komit dengan fix).

Unduh proyek dalam format ZIP langsung dari GitHub


Pengembang Level 1: Manajemen Aset Tradisional


Kami akan mulai dengan metode manajemen aset yang paling sederhana. Dalam kasus kami, untuk ini kami harus membuat daftar tautan langsung ke bahan skybox di komponen.

Jika Anda melakukan ini dengan saya, maka persiapan akan mengambil tiga langkah sederhana:

  1. Unduh proyek dari git
  2. Buka proyek di Unity
  3. Klik tombol putar!

Baik. Sekarang Anda dapat mengklik tombol untuk mengubah skybox. Sangat asli ... dan membosankan. Seperti yang saya pahami, sejauh ini tidak ada Unity Addressables.

Segera Anda akan melihat mengapa kami menanggung saat-saat kebosanan ini.

Pertama, bagaimana struktur proyek kami? Itu bergantung pada dua sistem utama. Untuk satu hal, kami memiliki objek pengelola Game . Komponen ini adalah skrip utama yang menyimpan tautan ke bahan skybox dan mengubahnya tergantung pada acara UI. Sederhana saja.

using UnityEngine;

public class Manager : MonoBehaviour
{
    [SerializeField] private Material[] _skyboxMaterials;

    public void SetSkybox(int skyboxIndex)
    {
        RenderSettings.skybox = _skyboxMaterials[skyboxIndex];
    }
}

Manajer menyediakan fungsi UI sistem untuk menerapkan materi tertentu ke tempat kejadian melalui penggunaan RenderSettings API .

Kedua, kami memiliki CanvasSkyboxSelector . Objek permainan ini berisi komponen kanvas yang merender satu set tombol yang didistribusikan secara vertikal. Setiap tombol, ketika ditekan, memanggil fungsi Manajer yang disebutkan di atas , yang menggantikan skybox yang diberikan tergantung pada id tombol. Dengan kata lain, acara OnClick dari setiap tombol memanggil fungsi SetSkybox dari objek Manager . Sederhana, bukan?


Unity Addressables - adegan hirarki

Sekarang saatnya untuk memulai. Mari kita buka profiler ( ctrl / cmd + 7 atau Window - Analysis - Profiler ). Saya akan menganggap bahwa Anda terbiasa dengan alat ini, yang berarti Anda tahu apa yang harus dilakukan dengan tombol rekam teratas . Setelah beberapa detik merekam, hentikan dan lihat metrik: CPU, memori, dll. Apakah ada yang menarik?

Kinerja cukup bagus, dan ini tidak mengherankan mengingat skala proyek. Anda dapat dengan mudah mengubah proyek ini menjadi permainan VR dan saya menjamin bahwa tidak ada pemain yang akan merasa sakit, seperti yang sering terjadi pada Eve: Valkyrie .

Dalam kasus kami, kami akan fokus pada bagian memori. Dalam mode tampilan sederhana, Anda akan melihat sesuatu seperti ini:


Manajemen Aset Level 1 - Profil Memori Sederhana

Nilai ukuran tekstur tampak terlalu besar untuk ditampilkan satu skybox sekaligus, bukan? Kejutan menanti Anda: pola yang sama dapat ditemukan di banyak game yang tidak dioptimalkan, pengembangan yang akan Anda pimpin . Tetapi dalam kasus kami ini hanya satu set skybox. Dalam proyek lain, ini akan menjadi karakter, planet, suara, musik ...

Jika tanggung jawab untuk bekerja dengan banyak aset jatuh pada Anda, maka saya senang Anda membaca artikel ini. Saya akan membantu Anda melakukan transisi ke solusi yang berskala baik.

Waktunya telah tiba untuk sihir. Ganti profiler memori ke mode verbose. Awas!


Manajemen Aset Level 1 - Profil Memori Terperinci

Sialan, apa yang terjadi di sini? Semua tekstur skybox dimuat ke dalam memori, tetapi hanya satu yang ditampilkan pada satu waktu. Lihat apa yang kita dapat? Arsitektur mentah ini memakan waktu hingga 400 MB .

Ini jelas tidak cocok untuk kita, mengingat ini hanyalah sebagian kecil dari permainan masa depan. Solusi untuk masalah ini sendiri akan menjadi dasar dari bagian selanjutnya.

Meringkaskan:

  • Manajemen aset tradisional melibatkan hubungan langsung
  • Oleh karena itu, semua objek dimuat secara konstan
  • Proyek ini tidak skala dengan baik


Pengembang Level 2: Proses Unity Addressables


Dalam permainan, kita mulai dari level 1, dan itu cocok untuk kita, tetapi segera setelah kita mengetahui aturan gameplay, saatnya untuk meninggalkan tembok kota yang aman dan meningkatkan level kita. Ini adalah tentang bagian ini.

Sekarang unduh proyek level 2 .

Seperti yang kita lihat sebelumnya di profiler, semua skybox dimuat ke memori, meskipun hanya satu yang digunakan secara aktif . Solusi ini tidak berskala, karena pada tahap tertentu kami akan dibatasi oleh jumlah variasi aset yang berbeda yang dapat kami tawarkan kepada pemain. Nasihat apa yang bisa saya berikan? Jangan membatasi minat game untuk pengguna.

Biarkan saya membantu Anda. Ambil sekop untuk menggali terowongan jailbreak dari manajemen aset tradisional. Mari kita tambahkan alat baru yang menarik ke koleksi kami: API Unity Addressables .

Hal pertama yang perlu kita lakukan adalah menginstal paket Addressables. Untuk melakukan ini, pergi ke Window → Package Manager :


Unity Package Manager - Unity Addressables

Setelah instalasi, kita perlu menandai materi sebagai addressables. Pilih mereka dan aktifkan flag addressable di jendela inspektur.


Mengelola Aset Level 2 (Unity Addressables)

Jadi kami dengan sopan meminta Unity untuk memasukkan bahan-bahan ini dan ketergantungan teksturnya dalam database addressable. Basis data ini akan digunakan selama build untuk mengemas aset menjadi potongan-potongan, yang dapat dengan mudah dimuat kapan saja dalam game.

Sekarang saya akan menunjukkan sesuatu yang keren. Buka Window -> Asset Management -> Addressables . Coba tebak apa ini? Ini adalah basis data kami yang ingin segera hidup kembali!


Mengelola Aset Level 2 Unity Addressables adalah jendela utama

Pembaca yang terhormat, ini adalah bagian yang mudah. Dan sekarang kesenangan dimulai.

Saya ingin Anda mengunjungi teman lama kami dari bagian sebelumnya: Pak Manajer . Jika kami memeriksanya, kami akan menemukan bahwa ia masih menyimpan tautan langsung ke aset! Kami tidak membutuhkan ini.

Sebagai gantinya, kami akan mengajari manajer cara menggunakan tautan tidak langsung, mis. AssetReference (dalam Unreal Engine mereka disebut referensi lunak).

Mari kita buat komponen kita lebih indah:

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class Manager : MonoBehaviour
{
    [SerializeField] private List<AssetReference> _skyboxMaterials;

    private AsyncOperationHandle  _currentSkyboxMaterialOperationHandle;

    public void SetSkybox(int skyboxIndex)
    {
        StartCoroutine(SetSkyboxInternal(skyboxIndex));
    }

    private IEnumerator SetSkyboxInternal(int skyboxIndex)
    {
        if (_currentSkyboxMaterialOperationHandle.IsValid())
        {
            Addressables.Release(_currentSkyboxMaterialOperationHandle);
        }

        var skyboxMaterialReference = _skyboxMaterials[skyboxIndex];
        _currentSkyboxMaterialOperationHandle = skyboxMaterialReference.LoadAssetAsync();
        yield return _currentSkyboxMaterialOperationHandle;
        RenderSettings.skybox = _currentSkyboxMaterialOperationHandle.Result;
    }
}

Berikut ini yang terjadi:

  • 7, (AssetReference) . , . . .
  • 13: , . ,
  • 18-20 , , , , . , API Addressables, , . — , , addressable-.
  • addressable 23, LoadAssetAsync, yield ( 25), . . !
  • , , , 26. Result, , .


Level 2 Asset Management (Unity Addressables) - Daftar AssetReference

Ingat: kode ini tidak siap untuk diproduksi. Jangan menggunakannya saat memprogram pesawat terbang. Saya memutuskan bahwa demi kesederhanaan, mengorbankan keandalan.

Tapi cukup penjelasan. Sudah waktunya untuk melihatnya beraksi.

Silakan ikuti langkah-langkah ini:

  1. Di jendela addressable, siapkan konten ( buat konten pemain )
  2. Kemudian bangun untuk platform yang dipilih
  3. Jalankan dan hubungkan profiler (memori) ke sana.
  4. Jangan menjatuhkan rahang Anda karena terkejut.


Level 2 (Unity Addressables) - Buat Konten Pemain


Level 2 Memory Management (Unity Addressables) - Memory Profiler

Bukankah aset yang dimasak enak?

Saya suka ketika profiler puas. Dan sekarang kita melihat profiler paling bahagia di dunia. Profiler yang puas berarti yang berikut: pertama, ada lebih banyak pemain yang puas yang dapat memainkan game Anda bahkan di Nokia 3210 . Kedua, ini adalah produsen yang puas. Dan untuk Anda, ini berarti dompet Anda akan puas.

Ini adalah kekuatan sistem Addressables.

Tapi Addressables membebankan biaya tenaga kerja kecil tambahan. Di satu sisi, programmer perlu memberikan dukungan untuk alur kerja asinkron (ini mudah diimplementasikan menggunakan coroutine). Selain itu, perancang harus mempelajari kemampuan sistem, misalnya, kelompok yang dapat dialamatkan, dan mendapatkan pengalaman untuk membuat keputusan berdasarkan informasi. Dan akhirnya, departemen TI akan sangat senang bahwa Anda harus mengkonfigurasi infrastruktur untuk mentransfer aset melalui jaringan jika Anda lebih suka meng-host-nya secara online.

Saya harus memberi selamat kepada Anda. Saya akan menjelaskan apa yang telah kita capai:

  • Manajemen memori yang tepat.
  • Boot lebih cepat.
  • Waktu pemasangan lebih cepat, mengurangi ukuran aplikasi di toko.
  • Peningkatan kompatibilitas perangkat.
  • Arsitektur asinkron.
  • Mereka membuka pintu untuk menyimpan konten ini secara online → yaitu, pemisahan data dari kode.

Saya akan bangga dengan prestasi seperti itu. Ini adalah pengembalian investasi tenaga kerja kami yang baik.

Oh, dan jangan lupa menyebutkan pengalaman dengan Addressables dalam sebuah wawancara.

Bahan pendukung: membuat instance dan penghitungan tautan. Informasi tentang topik ini dapat ditemukan di posting saya .

Opsional: strategi pengunduhan alternatif. Anda dapat membaca tentang mereka di posting saya .

Meringkaskan:

  • Skala manajemen aset berbasis addressable sangat baik.
  • Addressable menambahkan perilaku asinkron
  • Jangan lupa untuk menyiapkan konten untuk perubahan, jika tidak game akan memiliki warna merah muda!


Level 3 Asset Management (??) - Pengiriman Konten Jaringan

Level 3 Asset Management (??) - Pengiriman Konten Jaringan


Di bagian sebelumnya, kami membuat terobosan paling penting. Tingkatkan keterampilan Anda dengan beralih dari sistem manajemen aset tradisional ke alur kerja berbasis addressable. Ini adalah kemenangan besar bagi proyek ini, karena berkat investasi waktu yang kecil, kami telah menyediakan ruang untuk meningkatkan volume aset, sambil mempertahankan tingkat konsumsi memori yang rendah. Prestasi ini benar-benar meningkatkan Anda ke level 2, selamat! Namun, kami masih harus menjawab pertanyaan lain:

Apakah ini semua?

Tidak ada . Kami hampir tidak menyentuh pada topik Addressables, ada cara lain untuk meningkatkan proyek dengan paket yang kuat ini.

Tentu saja, Anda tidak perlu mengingat semua detail menggunakan Addressables, tetapi saya sangat menyarankan Anda membacanya secara singkat, karena di masa depan Anda kemungkinan besar akan bertemu dengan tes baru, dan Anda akan berterima kasih untuk studi yang lebih dalam. Itu sebabnya saya menyiapkan panduan singkat lainnya.

Dari situ Anda akan belajar tentang aspek-aspek berikut:

  • Jendela Addressables : Detail Penting
  • Pembuatan profil addressable : jangan biarkan memori bocor merusak hidup Anda
  • Network Delivery : Mengurangi waktu dari instalasi ke gameplay
  • Integrasi pipa perakitan
  • Strategi praktis : mempercepat alur kerja, menghilangkan kebutuhan untuk istirahat kopi sepuluh menit

Dan, yang lebih penting, kami akan menjawab pertanyaan-pertanyaan berikut:

  • Apa arti tersembunyi dari Acara Kirim Profiler ?
  • Seberapa bermanfaat API AddressableAssetSettings ?
  • Bagaimana cara mengintegrasikan semua ini dengan API BuildPlayerWindow ?
  • Apa perbedaan antara Mode Virtual dan Mode Paket ?

Panduan Level 3 dapat ditemukan di posting saya .

All Articles