Dukungan unity untuk bahasa C# termasuk penggunaan directives, yang memungkinkan Anda untuk secara selektif termasuk atau mengecualikan kode dari kompilasi, berdasarkan apakah scripting symbols tertentu adalah defined atau tidak ditentukan.
Anda dapat membaca lebih luas tentang bagaimana petunjuk ini bekerja di C# pada Login C# praprosesor halaman arahan.
Unity memiliki berbagai simbol skrip built-in yang mewakili opsi yang dapat Anda gunakan 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 selektif termasuk atau mengecualikan bagian kode dari kompilasi.
Misalnya, simbol scripting bawaan yang ditetapkan ketika pemain dibangun untuk platform standalone Windows adalah UNITY_STANDALONE_WIN
. Anda dapat memeriksa apakah simbol ini didefinisikan menggunakan jenis khusus jika pernyataan, sebagai berikut:
#if UNITY_STANDALONE_WIN
Debug.Log("Standalone Windows");
#endif
Karakter hash (#
) di depan if
dan endif
menunjukkan bahwa pernyataan ini adalah "arah", dan ditangani selama proses kompilasi, daripada saat runtime.
Oleh karena itu dalam contoh di atas, garis Debug hanya disertakan untuk kompilasi dalam membangun proyek Windows yang berdiri sendiri. Ini dihilangkan sepenuhnya ketika disusun di Editor, atau dalam pembangun target lainnya. Ini berbeda untuk menggunakan struktur if .. then .. else
biasa, yang hanya akan memotong execution bagian tertentu dari kode pada waktu yang berjalan. Lihat lebih lanjut di bawah ini untuk contoh penuh.
Ada sejumlah simbol scripting bawaan yang memungkinkan Anda untuk secara selektif mengkompilasi atau kode omit berdasarkan Platform yang dipilih, Versi Editor, dan skenario lingkungan sistem miscellan other. Simbol scripting bawaan ini tercantum di bawah ini.
Selain itu, Anda dapat mendefinisikan simbol scripting Anda sendiri baik menggunakan Editor UI(User Interface) Memungkinkan pengguna untuk berinteraksi dengan aplikasi Anda. Unity saat ini mendukung tiga sistem UI. More info
Lihat di Glossary, melalui scripting, atau melalui file aset, yang memungkinkan Anda untuk mengontrol kompilasi sebagian dari kode Anda berdasarkan definisi arbitrase. Lihat Simbol scripting kustom untuk informasi lebih lanjut.
Catatan: Scripting symbols kadang-kadang disebut sebagai “define simbol”, “preprocessor mendefinisikan”, atau hanya “defines”.
Unity secara otomatis mendefinisikan simbol scripting tertentu berdasarkan platform penulisan dan membangun target. Ini adalah sebagai berikut:
Define | Function |
---|---|
UNITY_EDITOR | Simbol Scripting untuk memanggil Skrip Editor Unity dari kode permainan Anda. |
UNITY_EDITOR_WIN | Simbol Scripting untuk kode Editor di Windows. |
UNITY_EDITOR_OSX | Simbol Scripting untuk kode Editor pada Mac OS X. |
UNITY_EDITOR_LINUX | Simbol Scripting untuk kode Editor di Linux. |
UNITY_STANDALONE_OSX | Simbol scripting untuk mengkompilasi atau mengeksekusi kode khusus untuk Mac OS X (termasuk arsitektur Universal, PPC dan Intel). |
UNITY_STANDALONE_WIN | Simbol scripting untuk membandingkan / mengeksekusi kode khusus untuk aplikasi Windows standalone. |
UNITY_STANDALONE_LINUX | Simbol scripting untuk membandingkan / mengeksekusi kode khusus untuk aplikasi mandiri Linux. |
UNITY_STANDALONE | Simbol Scripting untuk membandingkan / mengeksekusi kode untuk platform yang berdiri sendiri (Mac OS X, Windows atau Linux). |
UNITY_WII | Simbol scripting untuk membandingkan / mengeksekusi kode untuk konsol Wii. |
UNITY_IOS | Simbol scripting untuk membandingkan / mengeksekusi kode untuk platform iOS. |
UNITY_IPHONE | Sitemap Gunakan UNITY_IOS bukan. |
UNITY_ANDROID | Simbol Scripting untuk platform Android. |
UNITY_LUMIN | Simbol Scripting untuk platform Magic Leap OS. Anda juga dapat menggunakan PLATFORM_LUMIN. |
UNITY_TIZEN | Simbol Scripting untuk platform Tizen. |
UNITY_TVOS | Simbol Scripting untuk platform Apple TV. |
UNITY_WSA | Simbol Scripting untuk Universal Windows PlatformFitur IAP yang mendukung simulator Pembelian Aplikasi Microsoft, yang memungkinkan Anda untuk menguji aliran pembelian IAP pada perangkat sebelum menerbitkan aplikasi Anda. More info Lihat di Glossary. Selain itu, NETFX_CORE didefinisikan ketika membandingkan file C# terhadap . NET Core dan menggunakan . Sitemapscripting 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. |
UNITY_WSA_10_0 | Simbol Scripting untuk Platform Windows Universal. Selain itu WINDOWS_UWP didefinisikan ketika membandingkan file C# terhadap .NET Core. |
UNITY_WEBGL | Simbol Scripting untuk WebGLLogin API yang membuat grafis 2D dan 3D di browser web. Opsi build Unity WebGL memungkinkan Unity untuk mempublikasikan konten sebagai program JavaScript yang menggunakan teknologi HTML5 dan WebGL rendering API untuk menjalankan konten Unity di browser web. More info Lihat di Glossary. |
UNITY_FACEBOOK | Simbol Scripting untuk platform Facebook (WebGL atau Windows mandiri). |
UNITY_ANALYTICS | Simbol scripting untuk memanggil metode Unity AnalyticsUnity Analytics Lihat di Glossary dari kode permainan Anda. Versi 5.2 dan di atas. |
UNITY_ASSERTIONS | Simbol Scripting untuk proses kontrol pernyataan. |
UNITY_64 | Simbol Scripting untuk platform 64-bit. |
Unity secara otomatis mendefinisikan simbol scripting tertentu berdasarkan versi Editor yang saat ini Anda gunakan.
Mengingat nomor versi X.Y.Z (misalnya, 2019.4.14), Unity mengekspos tiga simbol skrip global dalam format berikut: UNITY_X, UNITY_X_Y dan UNITY_X_Y_Z.
Berikut adalah contoh simbol scripting yang terkena Unity 2019.4.14:
Define | Function |
---|---|
UNITY_2019 | Simbol Scripting untuk versi rilis Unity 2019, yang terkena setiap 2019. Y.Z rilis. |
UNITY_2019_4 | Simbol scripting untuk versi utama Unity 2019.4, terpapar di setiap rilis 2019.4.Z. |
UNITY_2019_4_14 | Simbol Scripting untuk versi minor Unity 2019.4.14. |
Anda juga dapat menyusun kode secara selektif berdasarkan versi awal Unity yang diperlukan untuk mengkompilasi atau mengeksekusi sebagian kode yang diberikan. Mengingat format versi yang sama seperti di atas (X.Y), Unity mengekspos satu #define global dalam format UNITY_X_Y_OR_NEWER, yang dapat Anda gunakan untuk tujuan ini.
Simbol skriping lain menentukan Unity adalah:
Define | Function |
---|---|
CSHARP_7_3_OR_NEWER | Tentukan ketika membangun skrip dengan dukungan untuk C# 7.3 atau yang lebih baru. |
ENABLE_MONO | Scripting backend #define untuk Mono. |
ENABLE_IL2CPP | Scripting backend #define untuk IL2CPPBack-end scripting bersatu yang dapat Anda gunakan sebagai alternatif untuk Mono ketika proyek bangunan untuk beberapa platform. More info Lihat di Glossary. |
NET_2_0 | Ditetapkan ketika membangun skrip terhadap tingkat kompatibilitas API NET 2.0 pada Mono dan IL2CPP. |
NET_2_0_SUBSET | Ditetapkan ketika membangun skrip terhadap tingkat kompatibilitas API Subset NET 2.0 pada Mono dan IL2CPP. |
NET_LEGACY | Ditetapkan ketika membangun skrip terhadap .NET 2.0 atau .NET 2.0 Subset API tingkat kompatibilitas pada Mono dan IL2CPP. |
NET_4_6 | Ditetapkan ketika membangun skrip terhadap tingkat kompatibilitas API NET 4.x pada Mono dan IL2CPP. |
NET_STANDARD_2_0 | Didefinisikan ketika membangun skrip terhadap tingkat kompatibilitas API NET Standard 2.0 pada Mono dan IL2CPP. |
ENABLE_WINMD_SUPPORT | Setelah dukungan Windows Runtime diaktifkan pada IL2CPP. Lihat Dukungan Windows Runtime untuk rincian lebih lanjut. |
ENABLE_INPUT_SYSTEM | Setelah paket Sistem Input diaktifkan dalam Player SettingsPengaturan yang memungkinkan Anda mengatur berbagai pilihan khusus pemain untuk permainan akhir yang dibangun oleh Unity. More info Lihat di Glossary. |
ENABLE_LEGACY_INPUT_MANAGER | Ditetapkan ketika legacy Input ManagerPengaturan di mana Anda dapat mendefinisikan semua sumbu input yang berbeda, tombol dan kontrol untuk proyek Anda. More info Lihat di Glossary diaktifkan dalam Pengaturan Pemain. |
UNITY_SERVER | Didefinisikan ketika pengaturan Build Server diaktifkan dalam Pengaturan Build |
DEVELOPMENT_BUILD | Didefinisikan ketika skrip Anda berjalan di pemain yang dibangun dengan opsi "Development BuildMembangun pengembangan termasuk simbol debug dan memungkinkan Profiler. More info Lihat di Glossary". |
Di bawah ini adalah contoh cara menggunakan kode yang telah ditentukan. Ini mencetak pesan yang tergantung pada platform yang Anda pilih untuk membangun target Anda.
Pertama-tama, pilih platform yang ingin Anda uji kode Anda dengan pergi ke File > Build Settings. Ini menampilkan jendela Build Settings; pilih platform target Anda dari sini.
Pilih platform yang ingin Anda uji kode prekompiled Anda terhadap dan klik Switch Platform untuk memberitahu Unity yang platform yang Anda targetkan.
Buat script dan copy/paste kode berikut:
using UnityEngine;
using System.Collections;
public class PlatformDefines : MonoBehaviour {
void Start () {
#if UNITY_EDITOR
Debug.Log("Unity Editor");
#endif
#if UNITY_IOS
Debug.Log("iOS");
#endif
#if UNITY_STANDALONE_OSX
Debug.Log("Standalone OSX");
#endif
#if UNITY_STANDALONE_WIN
Debug.Log("Standalone Windows");
#endif
}
}
Untuk menguji kode, klik Play Mode. Konfirmasikan bahwa kode bekerja dengan memeriksa pesan yang relevan di konsol Unity, tergantung pada platform mana yang Anda pilih - misalnya, jika Anda memilih iOS, pesan "Unity iOS" diatur untuk muncul di konsol.
Dalam C # Anda dapat menggunakan atribut CONDITIONAL
yang lebih bersih, kurang kesalahan-memproduksi cara pengupasan fungsi. Lihat Sitemap Kelas Attribute untuk informasi lebih lanjut. Perhatikan bahwa callback Unity umum (ex. Start(), Update(), LateUpdate(), FixedUpdate(), Awake()) tidak terpengaruh oleh atribut ini karena mereka disebut langsung dari mesin dan, karena alasan kinerja, tidak memperhitungkan mereka ke akun.
Selain kompiler #if
dasar, Anda juga dapat menggunakan uji multiway di C#:
#if UNITY_EDITOR
Debug.Log("Unity Editor");
#elif UNITY_IOS
Debug.Log("Unity iOS");
#else
Debug.Log("Any other platform");
#endif