Gambaran Keseluruhan Mono
Platform penanganan pengaturan spesifik untuk argumen tambahan IL2CPP

Login Sitemap

IL2CPP (Intermediate Language To C++) scripting backendKerangka kerja yang skrip di Unity. Unity mendukung tiga backend scripting yang berbeda tergantung pada platform target: Mono, .NET dan IL2CPP. Platform Windows Universal, namun hanya mendukung dua: .NET dan IL2CPP. More info
Lihat di Glossary
adalah alternatif untuk backend Mono. IL2CPP menyediakan dukungan yang lebih baik untuk aplikasi di berbagai platform. Backend IL2CPP mengubah kode MSIL (Microsoft Intermediate Language) (misalnya, kode C# dalam skrip) menjadi kode C++, kemudian menggunakan kode C++ untuk membuat file biner asli (misalnya, .exe, .apk, atau .xap) untuk platform yang Anda pilih.

Jenis kompilasi ini, di mana Unity menyusun kode khusus untuk platform target ketika membangun biner asli, disebut depan-of-time (AOT) kompilasi. Mono backend menyusun kode pada runtime, dengan teknik yang disebut kompilasi sesaat (JIT).

Di halaman ini:

Beberapa platform tidak mendukung AOT compilationAhead of Time (AOT) kompilasi adalah metode optimasi yang digunakan oleh semua platform kecuali iOS untuk mengoptimalkan ukuran pemain yang dibangun. . More info
Lihat di Glossary
, sehingga backend IL2CPP tidak bekerja pada setiap platform. Platform lain mendukung AOT dan IL2CPP, tetapi tidak memungkinkan kompilasi JIT, dan tidak dapat mendukung backend Mono. Ketika sebuah platform dapat mendukung backend, Mono adalah default. Untuk informasi lebih lanjut, lihat Batasan Scripting.

IL2CPP dapat meningkatkan kinerja di berbagai platform, tetapi perlu memasukkan kode mesin dalam aplikasi yang dibangun meningkatkan waktu build dan ukuran aplikasi yang dibangun akhir. Untuk informasi lebih lanjut, lihat cara kerja IL2CPP dan seri blog

IL2CPP mendukung debugging kode terkelola dengan cara yang sama dengan backend skrip Mono. Untuk informasi lebih lanjut, lihat Debugging C# kode dalam Unity.

Sitemap Membangun proyek menggunakan IL2CPP Building a project using IL2CPP

Untuk membangun proyek dengan IL2CPP, Anda perlu memiliki backend dipasang di instalasi Unity Anda. Anda dapat memilih IL2CPP sebagai modul opsional ketika Anda menginstal pertama versi Unity, atau menambahkan dukungan IL2CPP ke instalasi yang ada melalui Hub Unity. Untuk informasi lebih lanjut, lihat dan .

Anda dapat mengubah skrip backend Unity menggunakan untuk membangun aplikasi Anda dalam salah satu dari dua cara:

  • Melalui menu Player SettingsSettings that let you set various player-specific options for the final game built by Unity. More info
    See in Glossary
    di Editor. Lakukan langkah-langkah berikut untuk mengubah backend scripting melalui menu Player Settings:

    1. Edit > Project Settings.
    2. Klik pada tombol Player Settings untuk membuka pengaturan Player untuk platform saat ini di Inspector.
    3. Navigasi ke bagian Configuration menuju di bawah sub-menu Other Settings.
    4. Klik pada menu dropdown Scripting Backend, lalu pilih IL2CPP.

    Anda juga dapat membuka menu Player Settings dari dalam menu Build Settings; pergi ke File > Build Settings dan klik pada tombol Player Settings.

  • Melalui API scripting Editor. Gunakan properti PlayerSettings.SetScriptingBackend untuk mengubah backend scripting yang digunakan Unity.

The Configuration section of the Player settings
Bagian Configuration dari pengaturan Player settings

Untuk memulai proses build, buka jendela Build Settings dan klik tombol Build. Unity kemudian mengkonversi kode C # Anda dan berkumpul ke C++ dan akhirnya menghasilkan file biner untuk platform target Anda.

Sitemap Bagaimana IL2CPP bekerja How IL2CPP works

Ketika Anda mulai membangun menggunakan IL2CPP, Unity secara otomatis melakukan langkah-langkah berikut:

  1. Login C# compiler mengkompilasi kode C# aplikasi Anda dan kode paket yang diperlukan untuk .NET DLLs (sebagai rak).
  2. Unity menerapkan berhasil bytecode stripping. Langkah ini dapat secara signifikan mengurangi ukuran aplikasi yang dibangun.
  3. backend IL2CPP mengubah semua rakitan yang berhasil menjadi kode C++ standar.
  4. C++ compiler menyusun kode C++ yang dihasilkan dan bagian runtime IL2CPP dengan kompiler platform asli.
  5. Unity membuat file yang dapat dieksekusi atau DLL, tergantung pada platform yang Anda targetkan.

Baik IL2CPP dan Mono menyediakan beberapa pilihan berguna yang dapat Anda kontrol dengan atribut di scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary
Anda. Untuk informasi lebih lanjut, lihat kompilasi Platform-dependent.

IL2CPP memungkinkan kode Unity untuk platform tertentu. File biner Unity menghasilkan pada akhir proses ini sudah mengandung kode mesin yang diperlukan untuk platform target, sementara Mono harus menyusun kode mesin ini pada runtime selama eksekusi. kompilasi AOT meningkatkan waktu build, tetapi juga meningkatkan kompatibilitas dengan platform target dan dapat meningkatkan kinerja.

Kedua backend scripting memerlukan build baru untuk setiap platform yang ingin Anda targetkan. Misalnya, untuk mendukung platform Android dan iOS, Anda perlu membangun aplikasi Anda dua kali dan menghasilkan dua file biner.

Tahap pengupasan perakitan membantu mengurangi ukuran biner akhir. Unity menghapus kode byte yang aplikasi bawaan akhir tidak digunakan.

Sitemap Mengoptimalkan IL2CPP membangun kali Optimizing IL2CPP build times

Proyek membangun kali ketika menggunakan IL2CPP dapat secara signifikan lebih lama dari saat menggunakan Mono. Namun, Anda dapat melakukan beberapa hal untuk mengurangi waktu build.

Exclude your project from anti-malware software scans

Anda dapat mengecualikan folder proyek Unity Anda dan memasarkan folder build dari pemindaian perangkat lunak anti-malware sebelum Anda membangun proyek Anda.

Store your project and target build folder on a solid-state drive (SSD)

Solid-state drive (SSD) memiliki kecepatan baca / tulis yang lebih cepat dari hard disk drive tradisional (HDD). Mengkonversi kode IL ke C ++ dan membandingkannya melibatkan sejumlah besar operasi baca / tulis, sehingga kecepatan perangkat penyimpanan yang lebih cepat sehingga proses ini.

Change the IL2CPP Code Generation option in the Build Settings

Untuk mengubah bagaimana IL2CPP menghasilkan kode, buka Pengaturan Build dan mengkonfigurasi opsi Generasi Kode IL2CPP Secara default, opsi runtime yang lebih cepat diaktifkan, yang menghasilkan lebih banyak kode mesin yang mengurangi dampak IL2CPP pada runtime. Untuk mengurangi waktu membangun, Anda dapat mengatur opsi ini untuk membangun yang lebih cepat. Metode ini menghasilkan dan mencakup lebih sedikit kode mesin dalam binary executable dan sehingga dapat mengurangi kinerja pada runtime, tetapi juga secara signifikan mengurangi waktu build dan ukuran biner.

Sitemap Mengaktifkan pemeriksaan runtime menggunakan Il2CppSetOption Enabling runtime checks using Il2CppSetOption

Ketika Anda menggunakan backend IL2CPP scripting, Anda dapat mengontrol bagaimana il2cpp.exe menghasilkan kode C++. Anda dapat menggunakan atribut Il2CppSetOption untuk mengaktifkan atau menonaktifkan cek runtime berikut:

Property: Description: Default:
Null checks Jika opsi ini diaktifkan, kode C ++ yang menghasilkan IL2CPP mengandung pemeriksaan null dan membuang pengecualian NullReferenceException yang dikelola sesuai kebutuhan. Jika opsi ini dinonaktifkan, IL2CPP tidak memancarkan cek null ke kode C++ yang dihasilkan. Untuk beberapa proyek, menonaktifkan opsi ini mungkin meningkatkan kinerja runtime.

Ketika pengaturan ini dinonaktifkan, Unity tidak mencegah upaya untuk mengakses nilai null dalam kode yang dihasilkan, yang mungkin menyebabkan perilaku yang salah. Aplikasi Anda cenderung crash segera setelah menentukan nilai null. Unity merekomendasikan bahwa Anda tidak menonaktifkan opsi ini.
Enabled
Array bounds checks Jika opsi ini diaktifkan, kode C ++ yang IL2CPP menghasilkan berisi cek array dan membuang pengecualian IndexOutOfRangeException yang berhasil. Jika opsi ini dinonaktifkan, IL2CPP tidak memancarkan array yang masuk ke kode C++ yang dihasilkan.

Untuk beberapa proyek, menonaktifkan opsi ini mungkin meningkatkan kinerja runtime. Namun, ketika opsi ini dinonaktifkan, Unity tidak mencegah upaya untuk mengakses array dengan indeks yang tidak valid dalam kode yang dihasilkan, yang mungkin menyebabkan perilaku yang salah, termasuk membaca dari atau menulis ke lokasi memori arbitrase. Dalam kebanyakan kasus, akses memori ini terjadi tanpa efek samping langsung, dan dapat merusak keadaan aplikasi tanpa tanda peringatan yang jelas. Ini dapat membuat debugging kesalahan ini sangat sulit. Unity merekomendasikan Anda menjaga opsi ini diaktifkan.
Enabled
Divide by zero checks Jika opsi ini diaktifkan, kode C ++ yang dihasilkan oleh IL2CPP mengandung dividen melalui pemeriksaan nol untuk divisi integer dan membuang pengecualian DivideByZeroException yang dikelola sesuai kebutuhan. Jika opsi ini dinonaktifkan, IL2CPP tidak memancarkan dividen melalui pemeriksaan nol pada pembagian integer ke kode C++ yang dihasilkan.

Pemeriksaan ini memiliki dampak pada kinerja pada runtime. Anda hanya harus mengaktifkan opsi ini jika Anda perlu menjalankan dividen dengan pemeriksaan nol; jika tidak, biarkan dinonaktifkan.
Disabled

Untuk menggunakan atribut Il2CppSetOption:

  1. Dalam direktori di mana versi Unity Anda diinstal, arahkan ke direktori Data\il2cpp pada Windows, atau direktori Contents/Frameworks/il2cpp pada OS X.
  2. Cari file sumber Il2CppSetOptionAttribute.cs.
  3. Salin file sumber ke direktori Assets proyek Anda.

Contoh di bawah ini menjelaskan cara menggunakan atribut Il2CppSetOption:

[Il2CppSetOption(Option.NullChecks, false)]
public static string MethodWithNullChecksDisabled()
{
    var tmp = new object();
    return tmp.ToString();
}

Anda dapat menerapkan atribut Il2CppSetOption untuk jenis, metode, dan properti. Unity menggunakan atribut dari lingkup yang paling lokal.

[Il2CppSetOption(Option.NullChecks, false)]
public class TypeWithNullChecksDisabled
{
    public static string AnyMethod()
    {
        // Unity doesn’t perform null checks in this method.
        var tmp = new object();
        return tmp.ToString();
    }

    [Il2CppSetOption(Option.NullChecks, true)]
    public static string MethodWithNullChecksEnabled()
    {
        // Unity performs null checks in this method.
        var tmp = new object();
        return tmp.ToString();
    }
}

public class SomeType
{
    [Il2CppSetOption(Option.NullChecks, false)]
    public string PropertyWithNullChecksDisabled
    {
        get
        {
            // Unity doesn’t perform null checks here.
            var tmp = new object();
            return tmp.ToString();
        }
        set
        {
            // Unity doesn’t perform null checks here.
            value.ToString();
        }
    }

    public string PropertyWithNullChecksDisabledOnGetterOnly
    {
        [Il2CppSetOption(Option.NullChecks, false)]
        get
        {
            // Unity doesn’t perform null checks here.
            var tmp = new object();
            return tmp.ToString();
        }
        set
        {
            // Unity performs null checks here.
            value.ToString();
        }
    }
}

• 2018–05–15 Login

Gambaran Keseluruhan Mono
Platform penanganan pengaturan spesifik untuk argumen tambahan IL2CPP