Enaknya bisa Unity Editor Scripting - Part 1
- Kasih Gambaran luasnya dulu deh, masih ga paham
- Langsung Bikin script aja ya?
- Udah nih, sekarang bikin triggernya kan?
- Implementasinya gimana nih?
Pernah ga sih kalian sebel dengan workflow yang lama? Misal kalian pengen menata gameobject yang berantakan jadi rapi. Contoh lah kita pake asset Kenney nih, download aja disini
Kalau kalian import di unity dan drag ke scene, hasilnya seperti ini nih
Kan, ga rapi, iya ga? Dia hanya ada di satu tempat aja, ga nyebar rapi gitu… Kalian mau ngerapiin kah? Kalau penulis sih males, hahaha
Kasih Gambaran luasnya dulu deh, masih ga paham
Okay, kalian harus tau dulu nih, tentang Editor Scripting. Kalian kalau bikin script, kan biasanya otomatis ada ini kan
|
|
Iya kan? nah itu gunanya untuk bikin game ya… MonoBehaviour ya dari namespace UnityEngine itu. Makanya kalian bisa pake Update, Start, OnTriggerEnter dan lainnya ya karena UnityEngine ini. Termasuk bisa memasang script di GameObject ya karena ini.
Nah kalau untuk Editor Scripting itu kita harus tambahin ini
|
|
Jadi kalau mau ngembangin Unity Editornya buat mempermudah pembuatan game, UnityEditor lah yang dapat membantu kalian.
Langsung Bikin script aja ya?
Yap, langsung aja bikin scriptnya. Eitss, untuk membuat editor script ada 2 cara, yang pertama caranya dipisah 2 script, yang kedua 1 script tapi pakai symbol.
Dipisah menjadi 2 Script
Cara 2 script merupakan cara yang sering digunakan oleh developer, ini mungkin standartnya sih. Jadi ada 1 script yang nanti derivednya itu MonoBehaviour, dan satu lagi yang derived nya Editor. Script yang derived nya Editor, harus masuk ke dalam folder dengan nama Editor.
Digabung jadi 1 Script
Cara ini bisa digunakan kalau isi scriptnya masih simple, seperti tutorial kali ini. Kalau kompleks, saya rekomendasi pake 2 file saja. Jadi untuk tutorial ini, saya gabung jadi 1 file saja. Scriptnya harus diluar folder Editor dan class yang derivednya Editor
harus dikasih symbol UNITY_EDITOR
. Kalau tidak kalian beri symbol, saya jamin game kalian ga bakal bisa dibuild / compile. Anggapannya sih, UnityEditor
ga dikenali compiler ketika proses build.
Kita pake cara yang digabung jadi 1 script ya. Langsung aja buat script, namanya ArrangeGameObject.cs. Sekarang kita buka scriptnya, ubah seperti berikut
|
|
Oke kita bahas satu-satu.
#if UNITY_EDITOR dan #endif
Ini digunakan untuk membatasi kode untuk editor saja. Jadi bakal aman ketika kita export.
class yang “derived” dari Editor
Nah bagi kalian nih yang baru aja kenal Editor Scripting, “derived” classnya bisa pake Editor nih. Ini bisa untuk ngakses kita ke inspector nantinya, jadi kita bisa tuh modifikasi inspectornya. Niatnya nanti bakal ada satu tombol, ketika diklik akan menata semua gameobjectnya.
Udah paham? Lanjut dulu dengan nambah koding, didalam class ArrangeGameObject
, kalian buat 2 variable untuk menentukan gridnya sama lebarnya. Kalau mau ngerapihin kan harus ada aturannya kan? Grid ini untuk mengatur penempatan GameObjectnya, widthnya untuk pindah linenya, gitu. Jadi langsung aja tambahin ini
|
|
Udah nih, sekarang bikin triggernya kan?
Triggernya bisa pakai button, jadi ketika kita tekan tombolnya, nanti langsung otomatis ngatur posisi GameObjectnya sesuai dengan gridnya. Aturannya gini, scriptnya nanti dipasang di suatu GameObject, yang mana mempunyai banyak child. Child ini nanti bakal kita atur secara otomatis sesuai grid. Paham ya? Sekarang tambahkan script berikut di class ArrangeGameObjectEditor
|
|
Saya jelasin bentar nih. ArrangeGameObject ago
ini merupakan jembatan untuk komunikasi. Masih ingat kan kita punya variable Vector2 grid
? Untuk komunikasinya, kita butuh ArrangeGameObject
. Untuk mengisi variable ago
, kita gunakan OnEnable
, diisi dengan target
, yang mana bisa kita cast ke ArrangeGameObject
.
Setelah itu, kita tambahkan kode berikut
|
|
OnInspectorGUI
merupakan fungsi untuk memodifikasi tampilan Inspector pada unity. base.OnInspectorGUI
itu pemanggilan default tampilan inspector. Kalau tidak dipanggil, default inspector ga akan tampil. Biasanya tidak dipanggil ketika kita mau ubah semua tampilan inspectornya. if(GUILayout.Button("Arrange Childs"))
untuk menampilkan button dan kalau ditekan tombolnya akan mengembalikan nilai true. Didalam kondisi button, merupakan koding untuk menata posisi GameObjectnya.
Implementasinya gimana nih?
Di unity, kita bikin satu Empty GameObject, ubah namanya menjadi ArrangeGO. Pilih semua GameObject yang akan kita atur posisinya sesuai grid, masukin ke ArrangeGO tadi. Jadinya kayak gini nanti,
Tambahkan script tadi ArrangeGameObject.cs ke Empty GameObject yang mana parent dari banyak GameObject tadi.
Tekan aja tombol “Arrange Childs”, hasilnya nanti kurang lebih seperti ini.
Hasilnya bakal otomatis rapi kan? Sesuai sama grid dan width nya. Tapi kalau penulis lihat nih, masih terlalu berdempetan antara satu dan lainnya. Saya ubah gridnya menjadi (4, 4), terus saya arrange sekali lagi, hasilnya seperti ini
Nah, kalau ini sudah rapi nih. Kalau sudah kayak gini, tinggal level design aja, hehehe. Script lengkapnya ada disitu. Awkay, jadi seperti itu ya, Matur Thank you…