Dasar pemrograman C# untuk Unity

Halo semuanya! Salam Literasi Digital! 

Dalam rangka mengikuti lomba menulis blog OTN 2023 dengan tema literasi digital, mari kita menjelajahi dunia yang menggabungkan pemrograman dan kreativitas. Yaitu dunia Game Development, dengan bahasa pemrograman C# sebagai tulang punggung dan platform Unity sebagai medan permainannya.

Namun, tidak ada perjalanan yang mudah, begitu juga dengan belajar C# dan Unity. Kita akan menghadapi berbagai kesulitan yang menantang. Pengalaman belajar ini adalah bagian dari proses dimana kita memahami betapa pentingnya literasi digital dalam memahami dan menguasai teknologi.

Dalam artikel ini, penulis akan membahas tentang 9 line Unity yang akan sering dijumpai dalam proses pengembangan game.


1. Variabel

Variabel dalam pemrograman diibaratkan seperti sebuah kotak yang dapat berisi suatu benda, yang disebut sebagai data.

Dalam bahasa pemrograman C#, variabel memiliki dua tipe proteksi utama, yaitu public dan private. Penggunaan private membuat variabel hanya bisa diakses oleh class variabel itu sendiri. Sementara public, memungkinkan akses variabel dari luar class tersebut atau script lain.

Variabel sendiri memiliki beberapa tipe seperti pada gambar berikut:



Dalam konteks Unity, hampir semua objek terdiri dari beberapa komponen. Seperti RigidBodyParticel System, dan lain-lain.

Variabel-variabel ini biasanya ditulis diatas class start dan update. Dan juga, penamaan pada variabel sangat penting agar mudah dipahami ketika ingin diubah atau bekerja dengan tim.


2. GetComponent

Sebelumnya sudah dijelaskan kalau objek pada unity terdiri dari beberapa komponen. Dalam beberapa kasus, untuk memodifikasi komponen dalam Unity lebih lanjut, terkadang hanya bisa dilakukan melalui scripting. Untuk mengakses komponen tersebut, maka digunakanlah sintaks GetComponent.

Sebagai contoh, penulis akan mengubah warna objek Cube menjadi biru ketika masuk Play Mode dengan bantuan script.

Penjelasan sebagai berikut:


Ini adalah tampilan awal sebelum objek "cube" dirubah warnanya menjadi biru menggunakan script. Selanjutnya buatlah script dengan nama apapun, lalu attach atau pasang di "cube.

Kode dan penjelasan sebagai berikut:


GetComponent<Renderer>() : Digunakan untuk mengakses komponen "Renderer" yang ada pada objek. Hasilnya akan disimpan dalam variable "ubahWarna" yang digunakan untuk mengakses komponen renderer tersebut.

ubahWarna.material.color = Color.blue  : Bagian ini akan mengubah warna dari varible "ubahWarna" dari objek tersebut. "material.color" digunakan untuk mengubah warna dari material objek tersebut, lalu "color.blue" akan mengubah warna dari material objek menjadi warna biru.

Hasilnya akan seperti pada gambar ini:


Dengan begini, mengubah warna cube menjadi warna biru dengan script sudah berhasil.


3. Instantiate

Instantiate adalah salah satu fungsi yang akan paling sering ditemui dalam program game. Fungsi ini berguna untuk membuat sebuah object baru atau menduplikat object melalui script ketika permainan sedang berjalan, contohnya seperti musuh, effect, atau mob.

Penulisannya akan seperti pada gambar:



Bagian Objek akan diisi dengan objek atau prefab yang ingin dibuatkan salinannya. Biasanya, ini adalah objek yang akan digunakan kembali atau di-clonePosisi, disini untuk menentukan dimana object yang di-clone akan muncul. Lalu Rotasi, Bagian ini untuk mengatur bagaimana objek yang muncul itu berputar atau menghadap ke arah tertentu saat mucul, contohnya seperti menghadap player ketika muncul.

Penjelasan sebagai berikut:





Ini adalah tampilan awal dalam penggunakan fungsi Instantiate, pertama-tama buatlah "empty object" dengan klik kanan pada hierarki > create empty > namakan saja spawner.

Penjelasan dan penulisan kode sebagai berikut: 



public GameObject objectSpawn : "objectSpawn" adalah bentuk dari variable "GameObject." Varible ini bersifat publik sehingga dapat diakses di inspektor Unity.

objectSpawn : Bagian ini adalah objek yang akan di instantiate.

new Vector3(x,y,z) : Bagian ini digunakan untuk posisi instantiate objek.

Quaternion.identity : Bagian ini untuk merotasi objek, karena penulis tidak ingin merotasi objek maka ditulis dengan "Quaternion.identity." 



Hasilnya akan seperti pada gambar diatas, dengan begini kita sudah berhasil memunculkan objek hanya dengan menggunakan script.

4. Destroy

Fungsi Destroy biasanya digunakan untuk menghapus suatu object ketika sudah tidak diperlukan lagi, contohnya seperti menghapus musuh yang sudah mati, partikel yang sudah tidak digunakan, atau objek yang hancur/meledak.

Contoh penulisan fungsi Destroy seperti pada gambar berikut:


Fungsi Destroy dan Instantiate itu tidak bisa dipisahkan, ibaratnya seperti penghapus dan pensil. Penghapus berguna untuk menghapus kesalahan, sedangkan pensil berguna untuk membuat atau memulai sesuatu yang baru.


5. Loops

Penjelasan tentang Loops ini hanya akan fokus pada For LoopsLoops digunakan untuk mengulangi beberapa sintaks atau code dalam waktu tertentu. Biasanya, Loops digunakan untuk memperbarui objek secara berkala atau procedural generate. Contohnya seperti world dalam game Minecraft, yang dibuat menggunakan procedural generate.

Cara penulisan codenya seperti berikut dan penjelasannya:


Didalam for akan ada data integer yang disebut iteration. Sebagai contoh, penulis menggunakan i = 0, nilai ini bisa diubah sesuka hati, tapi penulis hanya memberikan contoh yang paling sering saja. Lalu ada kondisi dimana i < 3 maksudnya adalah Loops akan berjalan selama i kurang dari 3, Selama loops belum selesai, maka nilai i akan ditambah terus menerus sebanyak 1 kali setiap detik dengan i++.


6. If/Else

If/Else adalah sebuah sintaks yang bekerja seperti halnya timbal balik. Jika memasuki kondisi tertentu, maka kode di dalam if akan dieksekusi. Jika tidak memenuhi kondisi tertentu, maka kode di dalam else akan dieksekusi. Contohnya saat pemain mendekati pintu, maka pintu otomatis akan terbuka. Atau saat player bertemu dengan boss, soundtrack akan otomatis dimulai agar menciptakan suasana yang menegangkan. Itulah contoh kondisi yang menggunakan If/Else statement.

Penulisan dan penjelasan kode sebagai berikut:


Sebagai contoh penulis akan membuat sebuah object perempuan dan laki-laki yang ditandai dengan warna. Pink untuk perempuan dan Biru untuk laki-laki. Maka, script yang dituliskan kurang lebih akan seperti ini:


Dalam kode tersebut, jika nilai cewek = true, maka object yang muncul akan warna Pink karena menandakan perempuan. Sebaliknya, jika cewek = false, maka yang muncul warna Biru karena menandakan laki-laki.



Bisa dilihat, ketika kotak "Ini Cewek" di centang, maka warna yang muncul adalah warna pink,  menandakan perempuan. Sedangkan ketika kotak "Ini Cewek" tidak di centang, maka warnanya akan berubah menjadi biru, menandakan laki-laki.


7. Input.GetAxisRaw()

Input.GetAxisRaw adalah sebuah syntax yang digunakan untuk mengambil nilai yang sifatnya biner, dari berbagai sumber input seperti keyboard, mouse, atau gamepad. Unity sendiri sudah menyiapkan data untuk Input.GetAxisRaw, salah satunya: 

Vertical : nilai yang dikeluarkan -1 jika player menekan tombol panah kiri, lalu 1 jika player menekan panah kanan dan 0 jika player tidak menekan apapun. 

Line ini akan selalu dijumpai ketika ingin mengimplementasi pergerakan karakter dalam game, yang memungkinkan karakter berjalan ke kanan atau kiri berdasarkan input yang diberikan player.

Sebagai contoh penulis akan menggunakan input vertical, maka hasil kodenya akan seperti ini:



Penjelasannya sebagai berikut:



Didalam Update, terdapat variable Vector3 yang diberi nama playerInput. Bagi yang belum tahu, Vector3 adalah sebuah varible yang berisi 3 nilai, yaitu X, Y, dan Z.

Selanjutnya dalam kotak warna merah, nilai sumbu X pada Vector3 diisi dengan Input.GetAxisRaw("Horizontal"), nilai sumbu Y dengan Input.GetAxisRaw("Vertical"), dan Z dengan 0, ditandai dengan kotak warna hijau. Karena pada contoh kali ini penulis menggunakan Unity 2D, maka nilai Z menjadi 0.



Selanjutnya agar karakter dapat bergerak ketika player menekan tombol pada keyboard, diperlukan sintaks transform.position, lalu ditambah (+) dengan playerInput.normalize. Penambahan normalize pada playerInput diperuntukan agar kecepatan karakter tetap stabil ketika bergerak secara diagonal.

Selanjutnya, hasilnya akan dikali dengan variable speed yang nilainya bisa ditentukan sendiri, jadi bisa ditentukan sendiri mau seberapa cepat karakter berjalan. Terakhir, hasilnya dikalikan dengan variable Time.deltaTime, sehingga frame rate atau fps pada game tetap stabil, bahkan ketika performanya menurun. Ini berarti ketika karakter sedang berlari, lalu fps pada suatu komputer kentang menurun, itu tidak akan berpengaruh kepada gamenya.


8. Vector2.MoveTowards

Seperti namanya, sintaks ini akan menggerakkan objek ke arah yang dituju dari poin A ke poin B dengan kecepatan tertentu. Biasanya digunakan kepada musuh yang akan mendekati player lalu menyerangnya. Atau untuk membuat player bergerak dari titik A ke titik B seperti genre game point and click.

Penulisan kode dan penjelasannya sebagai berikut.




posisiAwal : Posisi awal objek sebelum bergerak.

Target : Tujuan dari objek tersebut. Misalnya, jika objek ini adalah musuh maka ia akan mendekati player jika player berada di area penglihatannya.

Kecepatan : Kecepatan objek tersebut ketika bergerak.

Contoh implementasi dan pembahasannya:




Public GameObject target : Target yang akan di attach di Inspektor unity untuk dikejar.

Speed : Nilai speed yang bisa di atur pada inspektor Unity.

Transform.position : Variable ini digunakan untuk membuat objek tersebut jalan.

Target.transform.position : Ketika target pindah, maka akan diikuti oleh object dengan "transform.position."

Sebagai contoh, penulis akan membuat suatu keadaan dimana maling akan di kejar oleh polisi dengan "Vector2.MoveTowards."



Pada gambar diatas, maling akan dilambangkan dengan kotak berwarna merah, sedangkan polisi digambarkan dengan lingkaran berwarna biru. Agar polisi bisa mengejar maling, klik kiri pada objek maling di hierarki, lalu seret objek tersebut ke kolom "target" pada script yang dimiliki polis. Jangan lupa untuk mengatur kecepatan dengan mengisi kolom "speed" pada script polisi. Maka hasilnya ketika masuk ke dalam play mode, objek polisi akan mengejar player yang berperan sebagai maling.

9. OnTriggerEnter

Fungsi ini biasanya digunakan ketika suatu objekbertabrakan (collide) dengan objek lain, maka secara otomatis barisan kode yang berada didalam fungsi ini akan berjalan. 

Sebagai contoh, penulis akan menggunakan versi yang 2D, kode dan pembahasan sebagai berikut:


Agar fungsi ini berjalan, kedua objek yang bertabrakan atau bersentuhan, harus memiliki komponen collission, sehingga fungsi "OnTriggerEnter2D" dapat dijalankan.

Penjelasan dan pembahasan sebagai berikut:



OnTriggerEnter2D
(Collider2D, other) : Metode ini akan dipanggil secara otomatis ketika objek bertabrakan dengan objek lain yang memiliki komponen "Collider2D." Lalu, "other" digunakan untuk objek apa yang akan ditabrak oleh "OnTriggerEnter2D."

if(another.tag == "Enemy") : Fungsi ini digunakan jika objek yang bertabrakan memiliki tag (label) "Enemy" atau tidak. Jika objek bertabrakan dengan objek lain yang memiliki tag "Enemy" maka barisan kode dalam "Debug.Log" akan dijalankan.


Setelah membuat script, selanjutnya buatlah objek untuk dijadikan musuh. Klik "Tag" pada bagian inspektor musuh lalu klik "Add Tag." Klik tanda plus untuk menambahkan tag, lalu ketik "Enemy" sebagai tag untuk musuh. Jika sudah, maka bisa langsung masuk kedalam play mode, hasilnya akan seperti pada gambar dibawah:


Ketika ke dua objek tersebut bertabrakan, secara otomatis di console akan tertulis seperti pada gambar diatas.


***


Penutup

Demikianlah sembilan line penting dalam Unity, yang sekaligus akan memberikan wawasan kepada para pembaca tentang bahasa pemrograman C#, walaupun dalam jumlah yang terbatas. Artikel ini disusun untuk mengikuti lomba OTN 2023, dan harapan penulis adalah agar artikel ini dapat membantu pembaca dalam proses belajar mereka saat memasuki dunia pemrograman dan pengembangan game. Sampai di sini, penulis ingin menyampaikan Salam Literasi Digital! Terima kasih banyak atas perhatiannya!

#literasidigital #OTN2023

2 komentar untuk "Dasar pemrograman C# untuk Unity"

Comment Author Avatar
Terimakasih informasinya jangan lupa identitas penulis dan pembimbing untuk di tuliskan
Salam.literasi digital lanjutkan bersama Om Jay untuk jadi bllger handal
Comment Author Avatar
Terimakasih ibu😊