Proses build Unity menggunakan alat yang disebut linker Unity untuk strip kode yang dikelola. Linker Unity adalah versi IL Linker yang disesuaikan untuk bekerja dengan Unity. Bagian khusus mesin Unity khusus dari linker Unity tidak tersedia secara publik.
Linker Unity bertanggung jawab atas pengupasan kode yang dikelola dan sebagian proses pengupasan kode mesin, yang merupakan proses terpisah yang tersedia melalui backend skrip IL2CPPBack-end scripting bersatu yang dapat Anda gunakan sebagai alternatif untuk Mono ketika proyek bangunan untuk beberapa platform. More info
Lihat di Glossary yang menghapus kode mesin yang tidak digunakan. Untuk informasi lebih lanjut, lihat PlayerSettings.StripEngineCode].
Linker Unity menganalisis semua rakitan dalam proyek Anda. Pertama, itu menandai jenis akar, metode, sifat, dan bidang. Sebagai contoh, kelas monoBehaviour-derived yang Anda tambahkan ke GameObjectsObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
Lihat di Glossary pada SceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary adalah jenis akar. Linker Unity kemudian menganalisis akar yang telah ditandai untuk mengidentifikasi, dan menandai kode yang dikelola yang akar ini tergantung pada. Setelah menyelesaikan analisis statis ini, kode yang tersisa tidak ditandai tidak dapat dijangkau oleh jalur eksekusi melalui kode aplikasi Anda dan linker Unity menghapusnya dari perakitan.
Editor Unity menciptakan daftar rakitan yang mengandung jenis yang digunakan di salah satu adegan dalam proyek Unity Anda dan melewati daftar ini ke linker Unity. Linker Unity kemudian memproses rakitan tersebut, setiap referensi dari rakitan tersebut, setiap rakitan yang dinyatakan dalam file link.xml, dan setiap rakitan dengan atribut AlwaysLinkAssembly. Secara umum, linker Unity tidak memproses rakitan termasuk dalam proyek Anda yang tidak jatuh di bawah salah satu kategori ini, dan tidak termasuk dari build Pemain.
Untuk setiap proses penghubung Unity, berikut satu set aturan berdasarkan klasifikasi perakitan, apakah perakitan mengandung jenis yang digunakan dalam Adegan, dan Managed Stripping Level Anda telah memilih untuk membangun.
Untuk tujuan aturan ini, rakitan jatuh ke klasifikasi berikut:
Ketika Anda membangun proyek di Unity, proses build mengkompilasi kode C # Anda ke format .NET bytecode yang disebut Common Intermediate Language (CIL). Paket unity kode byte CIL ini menjadi file yang disebut perakitan. Perpustakaan framework .NET dan perpustakaan C# di plugin yang Anda gunakan di proyek Anda juga sudah dikemas sebagai perakitan kode bytecode CIL.
Ketika linker Unity melakukan analisis statis, berikut set aturan untuk menentukan bagian mana dari CIL bytecode tanda penghubung Unity yang diperlukan untuk membangun. Aturan penandaan akar menentukan bagaimana penghubung Unity mengidentifikasi dan melestarikan rakitan tingkat atas dalam pembangunan. Aturan penandaan ketergantungan menentukan bagaimana penghubung Unity mengidentifikasi dan melestarikan kode apa pun yang rakitan akar tergantung pada.
Properti Managed Stripping Level mengubah set aturan yang digunakan oleh tautan Unity. Bagian berikut menjelaskan aturan penandaan untuk setiap pengaturan yang mungkin untuk properti Managed Stripping Level.
Tabel berikut menjelaskan bagaimana penghubung Unity mengidentifikasi jenis tingkat atas dalam perakitan:
Assembly type: | Marking rules: | ||||
---|---|---|---|---|---|
Minimal | Low | Medium | High | ||
.NET Class & Platform SDK and UnityEngine Assemblies | Berlaku pelestarian pencegahan dan setiap pelestarian yang didefinisikan dalam setiap file link.xml. | Berlaku pelestarian pencegahan dan setiap pelestarian yang didefinisikan dalam setiap file link.xml. | Berlaku setiap pelestarian yang didefinisikan dalam setiap file link.xml. | Berlaku setiap pelestarian yang didefinisikan dalam setiap file link.xml. | |
Assemblies with types referenced in a scene | Tandai semua jenis dan anggota dalam perakitan. | Tandai semua jenis dan anggota dalam perakitan. | Tandai berikut: • Semua metode yang memiliki atribut [RuntimeInitializeOnLoadMethod] atau [Preserve] .•Preservations didefinisikan dalam setiap file link.xml. Login Tandai semua jenis yang berasal dari MonoBehaviour dan ScriptableObject di precompiled, paket, Script Unity atau assemblies definisi perakitan. •Marks all types derived from MonoBehaviour and ScriptableObject in precompiled, package, Unity Script or assembly definition assemblies. |
Tandai berikut: • Semua metode yang memiliki atribut [RuntimeInitializeOnLoadMethod] atau [Preserve] .•Preservations didefinisikan dalam setiap file link.xml. Login Tandai semua jenis yang berasal dari MonoBehaviour dan ScriptableObject di precompiled, paket, Script Unity atau assemblies definisi perakitan. •Marks all types derived from MonoBehaviour and ScriptableObject in precompiled, package, Unity Script or assembly definition assemblies. |
|
All other | Tandai semua jenis dan anggota dalam perakitan. | Tandai berikut: • Semua jenis publik dan anggota publik dari jenis-jenis tersebut. Login Semua metode yang memiliki atribut atau [RuntimeInitializeOnLoadMethod] .[Preserve] •Preservations didefinisikan dalam setiap file link.xml. Login Semua jenis yang berasal dari MonoBehaviour dan ScriptableObject di precompiled, paket, Script Unity atau perakitan definisi Majelis.•Preservations defined in any link.xml file. •All types derived from MonoBehaviour and ScriptableObject in precompiled, package, Unity Script or assembly definition assemblies. |
Tandai berikut: • Semua jenis publik dan anggota publik dari jenis-jenis tersebut. Login Semua metode yang memiliki atribut atau [RuntimeInitializeOnLoadMethod] .[Preserve] •Preservations didefinisikan dalam setiap file link.xml. Login Semua jenis yang berasal dari MonoBehaviour dan ScriptableObject di precompiled, paket, Script Unity atau perakitan definisi Majelis.•Preservations defined in any link.xml file. •All types derived from MonoBehaviour and ScriptableObject in precompiled, package, Unity Script or assembly definition assemblies. |
Tandai berikut: • Semua metode yang memiliki atribut [RuntimeInitializeOnLoadMethod] atau [Preserve] .•Preservations didefinisikan dalam setiap file link.xml. Login Semua jenis yang berasal dari MonoBehaviour dan ScriptableObject di precompiled, paket, Script Unity atau perakitan definisi Majelis. •All types derived from MonoBehaviour and ScriptableObject in precompiled, package, Unity Script or assembly definition assemblies. |
|
Test | Tandai metode apa pun dengan atribut [UnityTest] dan metode apa pun yang ditentukan oleh Attribute pada NUnit. Login |
Setelah linker Unity mengidentifikasi akar dalam perakitan, perlu mengidentifikasi kode apa pun yang akarnya tergantung. Tabel berikut menjelaskan bagaimana penghubung Unity mengidentifikasi ketergantungan jenis akar dalam perakitan:
Rule Target | Action at each stripping level | ||||
---|---|---|---|---|---|
Minimal | Low | Medium | High | ||
MonoBehaviour | Linker Unity menandai semua anggota tipe MonoBehavior ketika menandai jenis. | ||||
ScriptableObject | Linker Unity menandai semua anggota tipe ScriptableObject ketika menandai jenis. | ||||
Attributes | Ketika linker Unity menandai perakitan, jenis atau struktur kode lainnya, itu juga menandai semua atribut dari struktur tersebut. | Ketika linker Unity menandai perakitan, jenis atau struktur kode lainnya, itu juga menandai semua atribut dari struktur tersebut. | Ketika linker Unity menandai perakitan, jenis atau struktur kode lainnya, itu hanya menandai atribut struktur tersebut jika jenis atribut juga ditandai. | Ketika linker Unity menandai perakitan, jenis atau struktur kode lainnya, itu hanya menandai atribut struktur tersebut jika jenis atribut juga ditandai. | |
Debugging Attributes | Ketika script debugging diaktifkan, Unity linker menandai semua anggota yang memiliki atribut [DebuggerDisplay] , bahkan ketika tidak ada jalur kode yang menggunakan anggota tersebut. |
Ketika script debugging diaktifkan, Unity linker menandai semua anggota yang memiliki atribut [DebuggerDisplay] , bahkan ketika tidak ada jalur kode yang menggunakan anggota tersebut. |
Linker Unity selalu menghilangkan atribut debugging seperti DustggerDisplayAttribute dan DustggerTypeProxyAttribute. | Linker Unity selalu menghilangkan atribut debugging seperti DustggerDisplayAttribute dan DustggerTypeProxyAttribute. | |
.NET Facade Class Library | Hapus rakitan fasad karena mereka tidak perlu di runtime. |
file mendukung atribut XML yang tidak biasa digunakan. Dalam contoh, file mscorlib.xml tertanam di mscorlib.dll menggunakan atribut ini, tetapi Anda dapat menggunakannya dalam file link.xml, ketika tepat.
Ketika Anda menggunakan tingkat pengupasan High, tautan Unity tidak termasuk pelestarian fitur yang tidak didukung berdasarkan pengaturan untuk membangun saat ini:
Misalnya, file link berikut.xml mempertahankan satu metode tipe pada platform yang mendukung COM, dan satu metode pada semua platform:
<linker>
<assembly fullname="Foo">
<type fullname="Type1">
<!--Preserve FeatureOne on platforms that support COM-->
<method signature="System.Void FeatureOne()" feature="com"/>
<!--Preserve FeatureTwo on all platforms-->
<method signature="System.Void FeatureTwo()"/>
</type>
</assembly>
</linker>
Ketika Anda menggunakan tingkat pengupasan High, pengedit penghubung Unity badan metode untuk lebih mengurangi ukuran kode. Bagian ini meringkas beberapa pengeditan yang tidak dapat dikonsepkan bahwa penghubung Unity membuat untuk mengedepankan tubuh.
Linker Unity hanya mengedit badan metode di rakitan Perpustakaan Kelas .NET. Setelah metode pengeditan tubuh, kode sumber perakitan tidak lagi cocok dengan kode yang disusun dalam perakitan, yang dapat membuat debugging lebih sulit.
Daftar berikut menjelaskan tindakan yang dapat dilakukan oleh Unity linker untuk mengedit tubuh metode: