Wednesday, July 8, 2020

Tutorial Membuat Terrain 3D di Unity

Assalamualaikum wrwb.

Salam sejahtera bagi kita semua,

Pada pembahasan kali ini kita akan belajar membuat terrain 3D pada Unity. Sebelum itu mari kita cari tahu apa itu Terrain, Terrain adalah arena permainan yang biasanya berupa hamparan dengan texture tanah, rumput, pasir, bebatuan atau air. Pada terrain pada umumnya juga terdapat model gunung, lembah, pohon dsb.
Sebagai sebuah game engine yang terintegrasi, Unity telah dilengkapi dengan world editor yang sangat lengkap, kita tidak perlu lagi bersusah payah hanya untuk membuat terrain utama dalam game.

Oke langsung saja langkah yang pertama ialah membuat file project unity baru dengan nama apa saja bebas


Setelah itu buka Asset store dengan cara (ctrl + 9) atau dengan mengklik 


Import menggunakan cara ini mewajibkan kita terhubung ke Internet karena Unity akan langsung mengakses assetstore.unity.com dan menampilkannya pada window ini. Kita bisa melakukan pencarian dan langsung klik import di Asset yang kita pilih, dengan sekejap Unity akan meletakkan Asset pada project yang sedang kita buat.

Oiya Asset-asset yang kita butuhkan kali ini ialah Standard Assets dan Realistic Terrain

Kita bisa melakukan pencarian dengan mengetikkan kata kunci pada kolom Search for assets, ketik Standard Asset

Jika sudah ditemukan, untuk asset FREE bisa kita download terlebih dahulu.

Setelah berhasil klik Import


Lakukan hal yang sama untuk mendownload dan mengimport Asset Realistic Terrain seperti diatas.

Berikutnya kita akan lanjutkan materi dengan asumsi kalian sudah berhasil melakukan import package RealisticTerrain dan Standard-Assets. Proses ini membutuhkan waktu yang cukup lama, tergantung spesifikasi komputer yang digunakan.

Setelah proses impor selesai, tambahkan sebuah terrain dengan cara klik menu GameObject -> 3D Object -> Terrain. Jika tidak terjadi kesalahan, maka sebuah terrain kosong berukuran 500x500 pixel akan muncul.


Klik tombol Terrain Setting pada panel Terrain di tab Inspector yang akan menampilkan menu tambahan baru untuk pengaturan terrain aktif.


Kemudian atur Resolution Terrain Width dan Terrain Length menjadi 1000x1000


Selanjutnya klik tombol Paint Texture pada panel Terrain di tab inspector yang akan menampilkan menu tambahan baru untuk mewarnai terrain aktif.


Klik Edit Texture, klik Add Texture, dan pada kotak Dialog Add Terain Texture, klik Select dan pilih salah satu texture yang ada, misalnya saja texture Grass alias rumput berwarna hijau. Setelah itu klik Add


Setelah tombol Add di klik, maka terrain yang semula berwarna putih akan berubah menjadi hijau. Lakukan hal yang sama dan tambahkan sebuah texture lain, misalnya yang berwarna coklat.


Pada panel Brushes, pilih salah satu brush yang kalian suka, pilih texture yang kedua (bukan texture grass yang pertama), setelah itu warnai terrain tadi. Caranya klik dan drag saja menggunakan mouse pada terrain sesuka hati.
Kalian juga dapat bereksperimen dengan menggunakan texture dan brush yang lain. Ukuran brush dapat juga diatur menggunakan slider, masih di panel yang sama.


Selanjutnya klik tombol Raise/Lower Terrain pada panel Terrain di tab Inspector yang akan menampilkan tambahan baru untuk mengubah ketinggian terrain aktif, hal ini bisa digunakan untuk membuat pegunungan pada terrain.


Cukup klik pada texture dan secara otomatis, terrain akan naik dengan sendirinya. Gunakan Shift+klik untuk menurunkan ‘gunung’. Kombinasi antara brush yang berbeda dapat membuat tampilan gunung semakin bervariasi


Selanjutnya klik Paint Trees pada tab Terrain di tab Inspector yang akan menampilkan menu tambahan baru untuk pembuatan pepohonan.


Klik Edit Trees, pada kotak dialog Add Tree, klik browse, pilih salah satu pohon yang ada dan klik Add


Kita bisa menambahkan beberapa pohon ke dalam Trees supaya ada lebih dari satu jenis pohon di Terrain yang kita buat.


Lakukan cara yang sama seperti sebelumnya, klik dan drag untuk membuat pohon tumbuh di mana-mana.


Klik Paint Details pada panel Terrain di tab Inspector yang akan menampilkan menu tambahan baru untuk pembuatan rumput.



Klik Edit Details, pada kotak dialog Add Grass Texture, klik browse, pilih salah satu texture rumput yang ada dan klik Add.


Dengan cara yang sama seperti menanam pohon, kita sekarang pun bisa menanam rumput. Perbedaannya, rumput hanya akan tampil jika posisi kamera berada pada jarak yang cukup dekat, sehingga jangan heran jika posisi kamera terlalu jauh di atas terrain, rumput kadang tidak terlihat.

Dan sekarang kita lihat hasil akhirnya akan seperti ini



Sampai sini dulu tutorial kali ini, kurang lebihnya mohon dimaafkan. sampai jumpa di tutorial berikutnya! Terimakasih

Friday, May 15, 2020

Membuat Shooting Target Sederhana Unity3D

Assalamualaikum wrwb

Salam sejahtera bagi kita semuaa

Dikesempatan kali ini saya akan membagikan tutorial membuat Shooting Target sederhana menggunakan unity3D yang telah diajarkan oleh dosen saya yaitu Bpk. Dolly Virgian Shaka dari Universitas Budi Luhur

Tutorial kali ini membahas kembali fungsi Instantiate(). Jika pada materi sebelumnya bola yang dibuat secara run time dibiarkan jatuh begitu saja, kali ini bola-bola tersebut akan dilemparkan menuju sebuah sasaran.

Unity dilengkapi dengan event standar untuk mendeteksi dua buah GameObject yang berbenturan, salah satunya adalah CollisionDetection.

Oke langsung saja langkah pertama ialah Buatlah project baru di Unity atau cukup scene baru saja jika masih ingin menggunakan project yang sudah digunakan dalam materi sebelumnya. Tambahkan sebuah Plane dengan cara klik menu GameObject -> 3D Obect -> Plane.
Atur posisi Plane pada komponen Transform menjadi (0,0,0).  Setelah itu klik Main Camera di tab Hierarchy, kemudian ganti Positionnya menjadi (0,0,0) dan Rotationnya menjadi (0,90,0). Atur posisi main Camera menggunakan gizmo sehingga didapat tampilan kurang lebih seperti ini


Masih dengan Main Camera terpilih pada tab Hierarchy, tambahkan EmptyChild dengan cara klik menu GameObject -> Create Empty Child. Beri nama child1


Siapkan Prefab Bola yang berasal dari materi pembahasan sebelumnya. Ganti nama prefab menjadi Peluru.


Tambahkan sebuah Capsule untuk menjadi target sasaran tembak, lalu centang pilih Is Trigger pada objek tersebut.
Letakkan objek sasaran berada pada sebrang Main Camera sehingga tampak seperti berikut ini.


Buat sebuah 3D text dengan cara klik menu GameObject -> 3D Object -> 3D Text.
Ganti tulisan “Hello World” dengan “BINGOOO” lalu tempatkan 3D Text tersebut tepat di atas Capsule dengan text mengarah ke main Camera.
Gunakan gizmo untuk dapat melakukannya


Berikutnya buatlah script C# dan beri nama ShootingTarget.cs lalu ubah code menjadi seperti ini:


Pasang script ShootingTarget.cs pada GameObject Main Camera dan isilah parameter posisiTembak dengan EmptyGameObject yang menjadi Child Main Camera dan parameter Bola dengan prefab peluru


Sampai tahap ini, jika Game dijalankan, sebuah bola akan meluncur dari kamera setiap kali tombol spasi ditekan.


Tahap berikutnya adalah, akan dibuat skema, ketika bola mengenai target alias capsule tadi kita akan memberi keterangan pada 3D Text dan hitung score hasil tepat  sasaran. Buatlah sebuah script C# kembali dan beri nama Target.cs
Deklarasikan beberapa buah variable dan modifikasi method Start().



method Sembunyikan() pada baris 19 untuk menyembunyikan 3D Text dan method OnTriggerEnter() pada baris 23 untuk menangani Collision.

Pasang script Target.cs pada GameObject Capsule, kemudian isilah parameter text3d dengan GameObject 3D Text dan parameter pesan dengan teks sesuai keinginan Anda untuk pesan saat target terkena peluru.


Lalu selanjutnya beri tag pada prefab Peluru yang sudah kita buat dengan tag "Bola" Karena kita menggunakan tag tersebut pada script Target.cs yang sudah kita buat tadi pada baris 24.


Selanjutnya jalankan games dan cobalah menembak capsule yang ada di tengah.


Bisa dilihat perbedaannya, saat peluru mengenai target maka akan muncul 3d text sesuai dengan parameter yang kita isi tadi. Dan score bertambah sesuai berapa banyaknya peluru mengenai kapsul (target)

Jika kita tadi melihat peluru keluar dari Main Camera, maka kali ini kita akan membuat posisi tembak yang baru dengan menggunakan game object cube.
Pertama buat game object Cube lalu tambahkan game object child dengan nama child 2pada cube tersebut


Pasang script ShootingTarget.cs pada cube tersebut, lalu isi parameter posisi tembak dengan child2 dan peluru pada parameter Bola.



Agar bisa menembak peluru menggunakan klik Mouse kita edit kembali Script ShootingTarget.cs dengan menambahkan method OnGUI dengan script berikut ini 



Lalu jalankan game tersebut dan hasilnya akan seperti ini




Sekian tutorial saya kali ini, mohon koreksi nya jika banyak kesalahan. Terimakasih

Wednesday, April 29, 2020

Membuat Game Labirin Sederhana menggunakan Translate dan Raycast

Assalamualaikum wrwb

Salam sejahtera bagi kita semua

Kali ini saya akan mengimplementasikan fungsi Translate dan Raycast  yang diajarkan oleh dosen saya, yaitu Bpk. Dolly Virgian Shaka Yudha Sakti pada labirin sederhana.

Perlu diketahui Translate adalah sebuah fungsi untuk membuat sebuah objek bergerak secara relatif terhadap posisinya sendiri dan bukan pada posisi dunia. Contohnya jika tombol panah maju ditekan maka objek akan mau ke depannya dan bukan ke arah depan pandangan pengguna.

Fungsi Raycast() merupakan fungsi untuk melakukan penembakan ke arah yang dituju oleh kursor mouse dan menghasilkan koordinat Vector 3D.


Oke langsung aja langkah pertama ialah tentu saja buat project baru dengan nama TranslateRaycast



Setelah itu Tambahkan sebuah GameObject cube dan plane dengan cara klik menu GameObject -> 3D Object -> Cube/Plane dan tambahkan sebuah Component Rigidbody untuk cube melalui menu Component -> Physics -> Rigidbody.


Kemudian atur posisi Cube agar berada tepat di atas Plane seperti berikut dengan menggunakan gizmo atau panel Transform. Sampai langkah ini Anda sudah memiliki sebuah Cube yang memiliki massa dan dipengaruhi oleh gaya gravitasi yang diberikan oleh fungsi Rigidbody




Tambahkan sebuah asset gambar apapun dengan cara klik kanan pada panel Assets lalu pilih Import New ASsets… Pasang texture tersebut pada Cube dan Plane. Gambar ini hanya untuk membuat lebih menarik saja.



Setelah game object nya jadi langkah selanjutnya ialah membuat script dan berinama TranslateScript.cs lalu edit menjadi seperti ini


Pembahasan Code
Baris 12 : Inisialisasi Component Rigidbody. Script ini harus dipasang di sebuah GameObject yang memiliki Component Rigidbody.
Baris 13 : Inisialisasi variabel distGround yang isinya diambil dari Component BoxCollider, khususnya nilai y. Script ini harus dipasang di sebuah GameObject yang mengetahui seberapa jauh jarak antara Cube dengan tanah (Plane, Terrain, atau apapun yang di bawahnya).
Baris 19 : Melakukan pergerakan Cube selama tombol keyboard ditekan dengan arah forward yaitu arah depan dari Cube, bukan arah depan dari Main Camera.
Baris 24 & 30: Deteksi dua tombol keyboard sekaligus untuk membedakan pergerakan Cube ke kiri/kanan atau berputar ke kiri/kanan.
Baris 37 : Perintah memberikan ‘force’ kepada sebuah Component Rigidbody. Dalam hal ini, karena yang dimaksud dalam meloncat maka gaya yang diberikan hanya ke arah y positif (transform.up)
Baris 42 : Sebuah Raycast yang ditembakkan ke arah bawah untuk mendeteksi objek di bawahnya. Khusus untuk Raycast akan dibahas pada materi / script berikutnya.

Jika tidak ada kesalahan (debug) seharusnya game sudah bisa menggerakkan Cube menggunakan keyboard dan meloncat jika menekan tombol spasi.


Berikutnya Cube akan dibuat bergerak menuju suatu titik berdasarkan inputan dari mouse. 
Tambahkan sebuah Plane lainnya, beri nama Target. Kecilkan ukuran Plane tersebut dengan menggunakan gizmo scale dan tambahkan sebuah material dan beri warna tertentu sehinga plane target dapat terlihat kontras dengan Plane yang berada di bawahnya.



Buat Script dengan nama RaycastCube.cs lalu edit script tersebut menjadi seperti ini

Pembahasan Code
Baris 7 : Deklarasi variabel Ray yang akan menghasilkan Vector awal
Baris 8 : Deklarasi variabel RaycastHit yang akan menghasilkan vector akhir (titik perpotongan Ray terhadap sebuah objek)
Baris 16 : Menggunakan klik pada mouse sebagai titik akhir dan posisi MainCamera sebagai titik awal. Fungsi ScreenPointToRay akan menghasilkan vector awal Ray.
Baris 17 : Perintah untuk menembakkan sebuah Ray sepanjang 300 pixel ke depan (sesuai dengan arah titik mouse) dan menyimpan hasilnya di myRaycasthit yang berisi vector akhir (titik perpotongan Ray dengan Plane)
Baris 18 : Perintah untuk memindahkan Plane kecil tepat ke posisi perpotongan tadi. Parameter 0.1f pada fungsi Vector3 membuat posisi Plane kecil agak sedikit naik.
Baris 19 : Perintah untuk membuat sebuah objek melihat ke objek lain.
Baris 21 : Perintah untuk memeriksa jarak 2 titik apakah titik awal sudah sama dengan titik akhir. Karena bilangan float adalah bilangan pecahan, maka posisi transform terkadang tidak benar-benar tepat, maka perlu diberikan toleransi, dalam hal ini diberi toleransi 0.6f, sehingga Cube tidak harus benar-benar tepat di posisi tujuan untuk bisa berhenti bergerak.
Baris 23 & 24 : Merupakan satu perintah, fungsi MoveTowards merupakan fungsi untuk pergerakan sebuah GameObject dari satu titik ke titik lain dengan kecepatan tertentu.
Baris 28 & 29 : Merupakan satu perintah untuk menggambar sebuah Ray. Sedikit berbeda dengan fungsi lain, hasil dari fungsi ini hanya bisa dilihat di tab Scene setelah game dijalankan.


Pasang script tersebut di GameObject Cube, isikan parameter target dengan GameObject plane target yang tadi sudah dibuat. Untuk percobaan awal, biarkan parameter Is Moving tidak dicentang kemudian jalankan Game. Klik kanan pada sembarang tempat di plane pertama, perhatikan plane yang dipasang material akan berpindah pada posis tepat di posisi mouse dan Cube berputar sesuai dengan arah Plane tersebut.



Hal lain yang menarik dari proses ini adalah ketika Anda berpindah dari tab Game ke tab Scene saat Game masih berjalan. Anda dapat melihat sebuah garis lurus berwarna merah yang ditembakkan langsung dari GameObject Main Camera menuju titik pusat plane kecil (target). Kira-kira seperti itulah bentuk ‘nyata’ dari fungsi RayCast yang merupakan salah satu fungsi utama yang sering digunakan untuk menciptakan interaksi antara user dengan lingkungan game.




Kursor mouse TIDAK PERNAH TAHU benda apa yang diklik dalam game. Satu-satunya yang bisa dilakukannya hanya mengirimkan posisi koordinat yang diklik. RayCast merupakan fungsi untuk melakukan penembakan ke arah yang dituju oleh kursor mouse dan menghasilkan koordinat Vector3D (dalam hal ini Plane). Pada posisi perpotongan antara garis merah dan plane putih itulah, objek target berpindah.

Langkah selanjutnya adalah, matikan kembali game, lalu centang parameter Is Moving, dan jalankan kembali game. Kini Cube juga akan bergerak arah posisi titik yang diklik oleh mouse.




Setelah berhasil, lalu jadikan Cube tersebut sebagai prefab dengan cara buat prefab pada Assets dengan Klik Kanan pada Assets -> Prefab. Setelah itu drag and drop Cube pada tab Hierarchy ke prefab tersebut 


Kalau sudah berhasil hapus object cube pada tab hierarchy.
Langkah selanjutnya ialah membuat tembok labirin dengan cara klik menu GameObject -> 3D Object -> Cube. Atur ukuran dan posisi Cube tersebut agar tepat berada di tepi Plane sebagai dinding pembatas menggunakan gizmo atau transorm panel.


Berikan sebuah asset gambar tekstur tembok dengan cara klik kanan pada panel Assets lalu pilih Import New ASsets… Pasang texture tersebut pada tembok tersebut.

Setelah itu jadikan tembok tersebut sebagai prefab dengan cara drag and drop pada tab Hierarchy ke Prefab.

Langkah selanjutnya ialah buat tembok tersebut agar berada di tiap sisi pada plane seperti ini, buatlah jarak pada tepi kiri dan kanan sebagai jalan keluar Kotak nanti.


Atur posisi Main Camera menjadi diatas plane supaya Labirin yang kita buat terlihat oleh Camera, atur menggunakan gizmo atau panel transform pada tab inspector


Langkah selanjutnya ialah membuat tembok labirin seperti dibawah ini menggunakan prefab tembok yang tadi sudah kita buat


Lalu tambahkan Prefab kotak yang sudah kita buat tadi kedalam labirin tersebut

Setelah selesai jalankan game tersebut jika tidak ada eror maka kotak akan bisa digerakan melalui arah keypad pada keyboard dan dapat meloncat jika ditekan spasi.




Sekian tutorial dari saya, apabila ada kesalahan mohon dikoreksi. Terimakasih see u nexttt:)