Sebagai proyek menjadi lebih besar dan jumlah 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 meningkat, kemungkinan memiliki kerang antara nama kelas skrip tumbuh lebih besar. Ini terutama berlaku ketika beberapa programmer bekerja pada aspek yang berbeda dari permainan secara terpisah dan akhirnya akan menggabungkan upaya mereka dalam satu proyek. Sebagai contoh, satu programmer dapat menulis kode untuk mengontrol karakter pemain utama sementara tulisan lain kode setara untuk musuh. Kedua programmer dapat memilih untuk memanggil kelas skrip utama mereka Controller, tetapi ini akan menyebabkan bulu mata ketika proyek mereka dikombinasikan.
Sejauh ini, masalah ini dapat dihindari dengan mengadopsi konvensi naming atau kelas renaming setiap kali bulu mata ditemukan (misalnya, kelas di atas bisa diberikan nama seperti PlayerController dan EnemyController). Namun, ini bermasalah ketika ada beberapa kelas dengan nama berpakaian atau ketika variabel dinyatakan menggunakan nama-nama tersebut - masing-masing menyebutkan nama kelas lama harus diganti untuk kode untuk dikompilasi.
Bahasa C# menawarkan fitur yang disebut namespaces yang memecahkan masalah ini dengan cara yang kuat. Ruang nama hanyalah koleksi kelas yang disebut dengan menggunakan prefiks yang dipilih pada nama kelas. Lihat dokumentasi Microsoft pada namespaces untuk informasi lebih lanjut.
Dalam contoh di bawah ini, kelas Kontroler1 dan Kontroler2 adalah anggota namespace yang disebut Enemy:
namespace Enemy {
public class Controller1 : MonoBehaviour {
...
}
public class Controller2 : MonoBehaviour {
...
}
}
Pada kode, kelas-kelas ini disebut sebagai Enemy.Controller1
dan Enemy.Controller2
, masing-masing. Ini lebih baik daripada menamai ulang kelas sejauh deklarasi namespace dapat diikat di sekitar deklarasi kelas yang ada (yaitu tidak perlu untuk mengubah nama semua kelas secara individual). Selain itu, Anda dapat menggunakan beberapa bagian namespace yang terisi di sekitar kelas di mana pun mereka terjadi, bahkan jika kelas-kelas tersebut berada dalam file sumber yang berbeda.
Anda dapat menghindari harus mengetik prefiks namespace berulang kali dengan menambahkan arahan using di bagian atas file.
using Enemy;
Garis ini menunjukkan bahwa di mana nama kelas Kontroler1 dan Kontroler2 ditemukan, mereka harus diambil untuk berarti Enemy.Controller1 dan Enemy.Controller2, masing-masing. Jika skrip juga perlu merujuk pada kelas dengan nama yang sama dari ruang nama yang berbeda (satu disebut Player, katakan), maka awal masih bisa digunakan. Jika dua namespaces yang mengandung nama-nama kelas berpakaian diimpor dengan menggunakan arahan pada saat yang sama, kompiler akan melaporkan kesalahan.
Note: Unity memiliki batasan spesifik yang berkaitan dengan namespaces dan MonoBehaviour atau kelas ScriptableObject. Jika file Anda berisi definisi untuk kelas MonoBehaviour atau ScriptableObject, Anda tidak dapat menggunakan beberapa ruang nama dalam file tersebut.
Unity memberikan peringatan berikut di konsol: Class MyClass can not exist in multiple namespaces in the same file, even if one is excluded with preprocessor directives. Please move these to separate files if this is the case.
Ini berarti jika Anda memiliki file yang mendefinisikan MonoBehaviour dalam satu namespace, dan kelas lain dalam namespace yang berbeda dalam file yang sama, Unity tidak akan mengenali kelas MonoBehaviour dan Anda tidak akan dapat menggunakannya pada 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. Batasan ini diperkenalkan pada Unity 2020.1 untuk meningkatkan kecepatan impor dan kompilasi, dan oleh karena itu beberapa paket asset storeSebuah perpustakaan yang berkembang dari aset gratis dan komersial yang diciptakan oleh Unity dan anggota komunitas. Menawarkan berbagai aset, dari tekstur, model dan animasi ke seluruh contoh proyek, tutorial dan ekstensi Editor. More info
Lihat di Glossary yang lebih tua yang ditulis sebelum batasan ini diperkenalkan dapat berfungsi dengan benar sebagai hasilnya. Untuk memperbaiki masalah yang berkaitan dengan masalah ini, memisahkan kode untuk kelas di setiap ruang nama untuk memisahkan file.