Tampilkan postingan dengan label mudah. Tampilkan semua postingan
Tampilkan postingan dengan label mudah. Tampilkan semua postingan

Minggu, 18 Oktober 2020

Unity Platformer Tutorial [Part 4]

 

Ini adalah tutorial lanjutan dari part ke-3


Di dalam part 4, kamu akan menambahkan koin yang dapat diambil oleh pemain.

 

Menambahkan Koin


coin.png

Uploadlah gambar diatas ke Unity.
Seperti biasa, buatlah sebuah object kosong di dalam "tiles" bernama "coins". Buat objek koin di dalamnya.
Kemudian tambahkan komponen "Circle Collider 2D" dan ubah nilai Radius menjadi 0.3, jangan lupa untuk mencantum "Is Trigger". Buatlah prefabnya seperti biasa.

Kemudian buatlah sebuah script bernama "CoinScript" seperti berikut:


Tambahkanlah script itu ke prefab coin.
Karena script itu dimasukkan ke prefab koin, ia akan menghapus koin yang disentuh objek yang tagnya adalah "Player" (penggunaan huruf besar berpengaruh).
Sebelum dicoba, kita perlu mengubah tag si player dari "Untagged" menjadi "Player".



Sekarang, player sudah bisa mengambil koin-koin yang berada di level.


Tetapi ada yang kurang, koin langsung menghilang ketika diambil si player. Marilah kita tambahkan efek dengan mengubah script "CoinScript" menjadi seperti ini:



Di script ini kita menambahkan sebuah fungsi IEnumerator, saya menggunakan fungsi ini karena garis kode yield return null; tidak dapat ditulis di dalam fungsi biasa. Garis kode itu menunggu satu frame.





Jumat, 16 Oktober 2020

Unity Platformer Tutorial [Part 3]

Dari part 2, kita akan lanjut ke part 3. 

Di dalam tutorial part 3 ini, kamu akan:
    - menggunakan platform effector,
    - menambahkan platform air,
    - membuat player menyelam di air,
    - menambahkan awan dan matahari,
    - menggunakan sorting layer,
    - dan menghias level.

Tutorial part 3 ini memerlukan waktu kurang lebih 45 menit.

Menggunakan Platform Effector

Kalau kamu menekan tombol panah atas dan panah kanan di waktu yang sama, ketinggian melompat si player tidak sama, terkadang lebih rendah:


Untuk mengatasi ini, tambahkanlah komponen Platform Effector 2D ke "ground" dan "ground grass". Ubah nilai One Way -> Use One Way dari true menjadi false.
Juga ubah komponen Box Collider 2D; cantumkan Used by Effector.
Tapi ingat, kita hanya perlu mengubah prefabnya saja. Inilah yang saya lakukan:



Selesai.

Menambahkan Platform Air

Sekarang hanya ada platform tanah/rumput, mari kita tambahkan platform air.
Download file berikut:

water top.png

water.png
Upload file-file itu ke Unity (bagian Projects, folder "Sprites"). Jangan lupa untuk mengubah Pivot dan Wrap Mode, seperti yang kita lakukan di part 1.

Kemudian "Create Empty" untuk "water" dan "water top", seperti yang kita lakukan di part 1.
Buat prefabnya (drap and drop ke bagian Projects, folder "Prefabs").
Ubahlah nilai "Color" dari komponen Sprite Renderer menjadi agak transparan, (dengan mengklik kotak putih) supaya player tetap terlihat ketika berada di air:



Kemudian tambahkan komponen Box Collider 2D dan komponen Buoyancy Effector 2D. Jangan lupa untuk mencantum "Is Trigger" dan "Used by Effector" di komponen Box Collider 2D.
Kurang lebih seperti berikut:


Buatlah sebuah kolam/danau dengan menduplikat dan mengopi platform-platform itu (di Hierarchy).
Jangan lupa untuk men-snap platform-platform itu. (Edit -> Snap Settings...)

Harusnya player akan mengapung di permukaan air, dan ia akan bisa keluar lewat samping:

Player mengapung di air

Membuat Player Menyelam di Air

Kita akan membuat player menyelam ke bawah kalau tombol panah bawah sedang ditekan, dan kalau player sedang berada di air.

Untuk melakukan ini, kita perlu mengubah script Player.cs menjadi:

Player.cs


Penjelasan Script

Kita tambahkan variabel whatIsWater (LayerMask) dan onWater (bool).
Variabel ini digunakan seperti di part 2 (untuk mencek ketika sedang menyentuh tanah), tetapi kali ini untuk mencek ketika sedang menyentuh air.
Kenapa -jumpforce / 2? Nilai ini tidak berpengaruh kalau kamu mau mengubahnya, tetapi nilai ini harus dibawah 0 supaya player bergerak ke bawah.

Setelah itu, kita perlu mengubah layer prefab "water top" dan "water" menjadi "Water":


Tips: Kalau sedang berada di sebuah GameObject (yang memiliki prefab), kamu bisa mengklik tombol "Select" untuk pindah ke prefabnya:


Selesai! Harusnya player bisa menyelam ketika tombol panah bawah sedang ditekan, seperti:

Player menyelam

Menambahkan Awan dan Matahari

Mulailah dengan menambahkan awan.
Download file ini: (awan berwarna putih)
clouds.png
Dan seperti biasa, upload gambar itu ke Unity (folder Sprites), tetapi kali ini kita hanya ubah nilai Wrap Mode, karena kita tidak akan men-snap awan-awan ini.
Juga ubah nilai "Sprite Mode" dari "Single" menjadi "Multiple". Klik tombol "Apply", kemudian klik tombol "Sprite Editor".
Sebuah Window baru akan terbuka. Di kiri-atas, klik Slice -> tombol Slice, dan klik Apply.
Seperti berikut:


Di bagian Hierarchy, Create Empty dan beri nama "decorations". Di dalam decorations, Create Empty sekali lagi dan beri nama "clouds". Kemudian buatlah 3 GameObject: clouds_0, clouds_1, dan clouds_2. Buatlah sebuah prefab untuk setiap awan:


Sekarang, di bagian "Game", awan berada di depan level dan player.



Untuk memindahkannya ke belakang, kita hanya perlu untuk mengubah nilai posisi Z menjadi sebuah angka yang lebih besar dari 0:



Kemudian ubahlah Main Camera > komponen Camera > nilai Projection dari "Orthographic" menjadi "Perspective" supaya awan terlihat agak jauh. Seharusnya ukuran awan di bagian "Game" menjadi lebih kecil, ini terjadi karena awan menjadi terlihat jauh.

Tips: Ubah posisi Z awan menjadi angka yang berbeda-beda untuk mendapatkan sebuah efek yang menarik. Posisi Z bisa diisi dengan angka yang tidak bulat.

Mungkin kamu mau awan yang agak transparan, ubahlah prefab-prefab awan itu menjadi agak transparan seperti yang kita sudah lakukan ke platform air.
Perbanyak awan-awan itu kalau kamu mau, kamu juga bisa mengubah ukurannya.

Sekarang, kita akan menambahkan matahari. Matahari ini akan dibuat dari beberapa lingkaran dengan warna dan ukuran yang berbeda.
Mulailah dengan membuat sebuah GameObject kosong di dalam decorations bernama "sun".
Ubah posisi Z menjadi sebuah angka yang lebih kecil dari awan-awan, supaya matahari berada di belakang. Posisi Z matahari saya adalah 20.
Kemudian di bagian Projects, folder Sprites, klik kanan dan pilih Create > Sprites > Circle, beri nama "circle".
Buatlah GameObject yang bernama circle 1, 2, 3, dan 4. Seperti:


Ubahlah ukuran dan warna lingkaran-lingkaran itu. Berikut adalah nilai-nilai yang saya gunakan:

circle 1:
Scale: x = 18.5, y = 18.5
Color: #FFAD2564

circle 2:
Scale: x = 26, y = 26
Color: #FFAD1E66

circle 3:
Scale: x = 12.5, y = 12.5
Color: #FFAD28FF

circle 4:
Scale: x = 33.5, y = 33.5
Color: #FFAD1E49


Menggunakan Sorting Layer

Setelah kita mengubah Camera menjadi perspektif, ketika player masuk ke air, player berada di depannya:


Ini terjadi karena kita membuat player sebelum kita membuat air.
Untuk memindahnya kedepan, kita perlu mengubah Sorting Layer untuk mengubah urutan air dan si player.
Untuk melakukan itu, buatlah dua Sorting Layer dengan mengklik Edit -> Project Settings -> Tags and Layers, kemudian di bagian Inspector tambahkan 2 sorting layer bernama "Player" dan "InFrontOf Player".



Ubah nilai Sorting Layer si player (komponen Sprite Renderer) dari "Default" menjadi "Player". Ubah juga nilai Sorting Layer prefab water dan water top menjadi "InFrontOf Player".

Harusnya player berada dibelakang air:



Menghias Level

Kita akan menghias level dengan gambar berikut:

flower.png

tree.png

Upload gambar-gambar itu seperti ketika kita mengupload blok air.
Di bagian Hierarchy, gameobject "decorations", buatlah sebuah object kosong yang bernama "flowers" dan "trees".
Kemudian buat object "flower" di dalam object "flowers" dan buatlah object "tree" di dalam object "trees". Setelah itu buatlah prefabnya.
Kalau agak bingung, lihat gambar berikut:



Hiasi level kamu dengan menaruh dan menduplikat bunga-bunga dan pohon-pohon di tempat yang berbeda beda. Kamu juga bisa menggunakan ukuran yang berbeda-beda.

Tips: Ketika sedang mengubah ukuran sebuah object, tekan tombol Shift supaya perbandingan antara tinggi dan lebarnya sama.

Hiasan-hiasan ini akan otomatis berada di belakang player. Kalau kamu mau ada bunga atau pohon yang berada di depannya, gunakan sorting layer. Ubah nilai sorting layernya menjadi "inFrontOf Player".

Bunga-bunga ini memiliki sorting layer yang berbeda


Part 3 selesai. Namun masih ada part 4.

Kamis, 15 Oktober 2020

Unity Platformer Tutorial [Part 2]


 

Ini adalah tutorial lanjutan dari part 1. Di tutorial part 2 ini, kamu akan membuat player melompat, menggerakkan camera, dan membuat sebuah prefab.

Tutorial part 2 ini memerlukan waktu minimal 30 menit.

Membuat Player Melompat

Kamu bisa mencoba untuk membuat player melompat dengan cara yang sama seperti kita menggerakkan player ke kiri dan ke kanan:
 
Script ini tidak akan digunakan

Script diatas dapat membuat player melompat, tapi script itu membolehkan player untuk terbang.
Player jadi bisa terbang, karena selama kamu menekan tombol panah atas (up arrow), ia akan men-set velocity y menjadi 7.
Harusnya, player hanya bisa melompat kalau sedang menyentuh tanah.
Jadi pseudocode dari script yang akan kita tambahkan adalah:
Kalau tombol panah atas sedang ditekan dan player sedang menyentuh tanah, maka ubah nilai velocity y menjadi 7.
Tetapi bagaimana kita mengecek kalau player sedang menyentuh tanah?
Untuk melakukan itu, kita akan membuat sebuah "sensor" yang mengikuti player, seperti berikut:

Sensor diletakkan dibawah player
Sensor ini tidak akan terlihat.

Mulailah dengan membuat sebuah GameObject kosong (Hierarchy -> Create -> Create Empty) bernama "player ground sensor".
Kemudian buatlah sebuah script untuk sensor ini bernama "FollowPlayer". Script ini akan membuat sensor itu mengikuti si player:

FollowPlayer.cs

Kemudian, ubah nilai y Offset dari komponen Follow Player (Script) dari "player ground sensor" menjadi -0.5, supaya sensor tidak mengikuti pivot/center (tengah) si player, tetapi 0.5 unit dibawahnya.

Posisi sensor = Posisi player - 0.5
Sekarang, sensor sudah ada, dan sudah mengikuti si player.
Yang kurang adalah scriptnya yang mengecek kalau player sedang menyentuh tanah atau tidak. Kita hanya perlu mengubah script Player.cs saja.

Mulailah dengan mendeklarasi variabel-variabel seperti berikut (ke script Player.cs):


groundSensor adalah sebuah variabel yang akan diisi menjadi sebuah sensor yang akan kita buat nanti.
groundSensorRadius adalah ukuran radius si sensor dengan nilai standar 0.1f.
jumpforce adalah tenaga untuk melompat dengan nilai standar 7.
whatIsGround adalah sebuah variabel yang akan diisi dengan layer "Ground" nanti.

Layer player adalah Default

Nanti, layer "ground" dan "ground grass" akan diubah menjadi sebuah layer baru yang dinamai "Ground".

onGround adalah sebuah variabel bertipe boolean, yang nanti akan kita atur supaya nilainya menjadi true ketika sensor sedang menyentuh tanah, dan false ketika sensor tidak menyentuh tanah.

Sekarang, kita akan mengubah fungsi Update () di script Player.cs menjadi seperti berikut:



Penjelasan Script

if (Input.GetKey (KeyCode.UpArrow) && onGround) {
If Statement ini menjadi true kalau tombol panah atas sedang ditekan dan player sedang menyentuh tanah.

onGround = Physics2D.OverlapCircle (groundSensor.position,  groundSensorRadius, whatIsGround);
Baris kode ini mengubah nilai onGround menjadi true kalau si sensor sedang menyentuh sebuah GameObject yang layernya adalah whatIsGround, dan false kalau sensor tidak menyentuh sebuah GameObject yang layernya adalah whatIsGround.

Sekarang, kita perlu mengubah layer "ground" dan "ground grass" menjadi Ground.
Sebelum itu, kita perlu membuat layer baru. Klik sebuah GameObject dan klik Layer -> Add Layer..., kemudian tambahkan sebuah layer bernama "Ground", seperti ini:

Membuat sebuah Layer "Ground"
Ubah layer "ground" dan "ground grass" dari "Default" menjadi "Ground" seperti ini:


Sekarang, di Unity, ubah komponen Player (Script) dari GameObject player menjadi seperti ini:


(drag-and-drop si sensor dari bagian Hierarchy ke variabel Ground Sensor)

Selesai! Mestinya si player sudah bisa melompat.

Menggerakkan Camera

Bagaimana caranya untuk menggerakkan camera supaya camera mengikuti player?
Caranya sangat mudah, tambahkan script FollowPlayer ke Main Camera.
Mestinya Camera akan mengikuti player ketika game di play, tetapi camera akan berubah menjadi langit semua, seperti ini:


Ini terjadi karena posisi z Main Camera adalah 0, yang harusnya adalah -10.
Kita harus mengubah script FollowPlayer.cs menjadi seperti ini:

FollowPlayer.cs

Kita menambahkan sebuah variabel publik zOffset dan mengubah Vector2 menjadi Vector3.

Setelah itu ubah nilai z Offset dari komponen Follow Player (Script) dari Main Camera menjadi -10. Sekarang, mestinya Camera sudah mengikuti player dengan benar.

Membuat Prefab Untuk Platform

Sebuah prefab adalah sebuah GameObject dengan properti yang telah ditentukan. Kamu bisa men-drag sebuah prefab ke bagian Hierarchy seperti kamu telah men-drag sebuah sprite ke bagian Hierarchy, tetapi mereka akan memiliki semua komponen dan nilai yang sudah jadi.

Kamu bisa membuat sebuah prefab dengan men-drag sebuah GameObject dari bagian Hierarchy ke bagian Projects.
Kamu juga bisa mengubah sebuah prefab seperti kamu mengubah sebuah GameObject, tetapi bedanya adalah semua GameObject yang mengikuti si prefab ini juga akan berubah. Ini adalah kelebihan prefab dari GameObject biasa.

Buatlah sebuah folder bernama "Prefabs" (di bagian Projects).
Kemudian, buatlah sebuah prefab untuk "ground" dan "ground grass" seperti berikut:


Seperti yang kamu lihat di atas, GameObject yang men-referensikan sebuah prefab warnanya menjadi biru. Tapi ground (1), ground (2), dll warnanya belum biru.
Yang harus kamu lakukan adalah menghapus semua GameObject yang belum men-referensikan sebuah prefab, seperti ini:


Setelah itu kamu bisa membuat level lagi dengan mengopi atau menduplikat blok-blok itu.

Selanjutnya silahkan lanjutkan ke part 3!

 

Minggu, 06 Agustus 2017

Membuat Game dengan Unity

Ini adalah  tulisan anak ke 2 usia 13 tahun yang sedang bersemangat mempelajari Unity. Awalnya dia mempelajari ini agar dapat membuat game dengan platform Android.

Apa Itu Unity?

Unity adalah sebuah program untuk membuat game. Dengan Unity kamu dapat membuat game 2D atau 3D. Membuat game di Unity adalah mudah, tidak sesusah yang kamu pikir. Marilah mulai membuat sebuah game. Game yang akan dibuat di tutorial ini tampilannya terlihat seperti ini:


Menginstall Unity

Ada Unity yang Pro (harus bayar), juga ada yang free.
Berikut adalah langkah-langkah untuk menginstall Unity yang free:
  • Pergi ke https://store.unity.com/ dan klik tombol "Try Personal"
  • Buka installernya (nama file adalah UnitySetup64) dan klik tombol "Next"
  • Cantum tulisan "I accept the terms of the License Agreement" dan klik "Next" tiga kali
  • Kalau tidak mau menginstall IDE yang lain seperti Visual Studio, kamu harus menginstall "Mono Develop" yang ada dalam paket Unity. Klik yes utnuk m enginstall Mono Develop

Mempersiapkan Unity

Sebelum bermulai membuat sebuah game, siapkanlah Unity terlebih dahulu.
Jalankan Unity dengan Start > Unity. Kemudian kita cari tahu bagaimana kita dapat membuat game dengan Unity. Sebelum kamu dapat menikmati Unity, kau harus login terlebih dahulu.
Setelah selesai, buatlah proyek baru, namakanlah proyek kamu "Collecty" karena game untuk tutorial ini adalah mengambil dan mengkoleksi benda-benda tetapi kamu dapat menamakannya sesuka hati, dan jangan lupa untuk memilih mode "2D", karena kamu akan membuat game 2D di tutorial ini.
Sekarang mulailah mengubah layout Unity.
Menurut saya, layout yang termudah adalah "2 by 3", carilah dropdown yang berada di kanan-atas, ubahlah dropdown itu, dari Default menjadi 2 by 3. Kemudian layout akan berubah menjadi 5 window.
Unity akan terlihat seperti ini:


Kemudian pindahkan window Project ke sebelah kanannya window Game, seperti berikut:


Supaya window Project tidak terlalu sempit, tinggikan window Project ke atas dan klik tombol di atas-kanan window dan klik "One Column Layout", seperti:


Untuk apa fungsi window-window itu?

  • Bagian A adalah Scene, dapat digunakan untuk memindah, memutar dan mengubah ukuran sebuah objek, juga dapat digunakan sebagai preview game.
  • Bagian B adalah Hierarchy, didalamnya adalah daftar benda-benda yang ada di scene ini.
  • Bagian C adalah Inspector, digunakan untuk mengubah-ubah nilai sebuah komponen. (kamu akan mengetahui lebih lanjut)
  • Bagian D adalah Game, dapat digunakan untuk sebuah preview game.
  • Bagian E adalah Project, Itulah dimana Unity menyimpan asset-asset game.
Tidak mengerti? Tidak apa-apa, nanti kamu akan mengerti lebih lanjut.

Membuat Sebuah Game

Marilah bermulai dengan game yang mudah, seperti game mengambil benda-benda.
Sebelum bermulai, simpanlah terlebih dahulu scene-nya dengan File > Save Scenes atau Ctrl+S, namakan scene itu "Game". Buatlah sebuah folder bernama "Scenes" dengan mengklik Create > Folder di bagian Project, masukkan scene Game ke folder itu.
Kemudian di bagian Project buatlah sebuah folder bernama "Sprites". Nama folder tidak mempengaruhi Unity, tetapi nama yang baik dapat mudah dibaca.
Unduh gambar-gambar ini untuk asset project kamu dengan Right Click > Save image as...:

Karakter Kotak

Karakter Lingkaran

Drag-and-drop file-file yang telah di unduh ke Unity bagian Project, masukkan gambar-gambar itu ke folder Sprites supaya rapi.
Selanjutnya klik Create di bagian Hierarchy (kiri atas), dan klik 2D Object > Sprite. Kamu telah membuat sebuah sprite baru, namakanlah sprite itu "Player". Kalau kamu salah memilih mode 2D menjadi 3D, kamu tidak akan berhasil membuat Sprite 2D (lihat kembali penjelsan di atas ketika membuat file baru. )
Kemudian di bagian Hierarchy, bagian komponen "Sprite Renderer", klik lingkaran disebelah None (Sprite) dan pilih "Circle" di daftar Sprite. Kamu juga dapat men'drag' Circle yang sudah dibuat pada Asset ke Inspector bagian Sprite.
Sekarang di bagian "Scene" kamu dapat melihat si pemain, tetapi ukurannya terlalu besar, kan? Kita perlu mengecilkannya dengan mengubah skalanya. Di bagian Inspector, komponen Transform, ubahlah Scale x dan y menjadi 0.25.
Sekarang kita perlu membuatnya bergerak dengan menekan tombol panah keyboard. Untuk melakukan itu, kita perlu membuat script di bahasa C#.
Ada beberapa cara membuat script yaitu:
1. Pada papan menu bagian atas, click bagian Asset dan klik Create > C# Script,
2. Pada panel Inspector cari bagian Add component di paling bawah,  buat nama file baru yaitu "PlayerController", klik bagian "New Script" yang ada di panel dan pilih bahasa C#.
3. Pada panel project, ada tombol Create, click dan pilih bahasa C#.

Nama script yang akan dibuat adalah: "PlayerController". Masukkan script itu ke folder baru bernama "Scripts", kemudian klik dua kali untuk membuka script itu menggunakan MonoDevelop. (Sebuah program untuk mengubah/membuat script C#)

Kode script-nya sudah diberikan, kita tidak perlu mulai dari nol. Script default terlihat seperti ini:


Sebelum kamu membuat pemain bergerak, kamu perlu tahu script apa yang diperlukan untuk mengambil input.
Di Unity ada fungsi untuk mengambil input, yaitu Input.GetAxis(). Di dalam fungsi Update() tambahkan kode berikut:


Diatas kita mendeklarasi variabel moveHorizontal dan moveVertical dengan tipe float, dan nilai variabel di set sebagai input horizontal.Jangan lupa untuk di Save.
Yang bagian ini agak membingungkan, mengapa mengambil inputnya dari "Horizontal" dan "Vertical"? Beginilah cara dia berkerja:
Di Unity, klik Edit > Project Settings > Input, buka dropdown Axes, dan kamu akan menemukan dropdown Horizontal dan Vertical, kalau dropdown Horizontal diklik, akan ada Negative Button dan Positive Button, nilainya diisi dengan left dan right, jadi kalau tombol panah kiri diklik, pemain akan bergerak ke kiri, sama juga untuk tombol panah kanan. Kalau dropdown Vertical diklik, juga akan ada Negative Button dan Positive Button, tetapi nilainya diisi dengan down dan up, kalau tombol panah bawah diklik, pemain akan bergerak ke bawah, sama juga untuk tombol panah atas.


Sekarang kamu sudah mengerti? Bagus, sekarang kita akan membuat si pemain bergerak.
Fungsi AddForce() dapat membuat objek bergerak, yang akan kita gunakan dalam Script Playercontroller yang telah kita buat. Untuk membuatnya kita perlu mengubah setting pada panel Inspector dari komponen Rigidbody2D.  Kamu sudah membuat New Sprite yang ada di hierachy, jadi kamu tinggal menambahkan Add Component pada bagian Inspector. Setelah Add Component di click akan muncul Physics 2D > Rigidbody 2D. Pada bagian Rigidbody 2D, ubah nilai Gravity Scale ke 0 supaya pemain tidak jatuh ketika game dijalankan.
Kita juga memerlukan sebuah variabel untuk menentukan kecepatan pemain, buatlah variabel Speed dengan tipe int, yaitu angka bulat (tidak ada desimalnya) seperti ini:


Variabel dibuat public supaya dapat diakses dari Unity bagian Inspector dan dapat diubah-ubah nilainya.
Selanjutnya kita tambahkan kode berikut untuk membuat pemain bergerak:


Kalau dicoba, pasti pemain tidak dapat bergerak. Mengapa begitu?
Itu adalah karena kita belum menambahkan komponen script PlayerController ke Player. Untuk membetulkan masalah ini, tambahkan komponen script ke Player pada bagian Inspector dengan menekan tombol Add Component > Scripts > PlayerController. Setelah itu isi nilai variabel Speed ke 5.
Masalah sudah diperbaiki, kamu dapat menjalankan game. Sekarang kamu dapat menggerakkan si pemain kesana kemari, tetapi ada masalah lain, si pemain dapat keluar dari layar seperti berikut:

Game memiliki sebuah glitch

Kita dapat mencegahnya dengan menggunakan script  Camera.main.ViewportToWorldPoint, ia dapat digunakan untuk mengukur kelebaran kamera. Kamera dapat berubah ukuran, karena tidak semua layar berukuran sama, ada yang tinggi, lebar, atau bahkan persegi sama panjang. 
Kita perlu membuat 2 variabel untuk menyimpan nilai berformat Vector2 (sebuah format yang selalu memiliki nilai x dan y) karena kita akan menyimpan posisi batas atas, bawah, kanan, dan kiri, seperti:


Kemudian kita set nilai variabel di dalam fungsi Start() seperti:



Mengapa TopLeft adalah (1, 1) dan BottomRight adalah (0, 0)? 
Di Unity, koordinat-koordinat ViewportToWorldPoint adalah seperti berikut:



Sudah mengerti? Baiklah, sekarang tambahkan kode berikut:


Kita baru sahaja memberikan nilai ke variabel-variabel, tetapi kita belum mendeteksi kalau pemain keluar dari layar. Buatlah variabel rb bertipe Rigidbody2D, supaya script kita tidak terlalu panjang:


Set variabel rb menjadi Rigidbody2D si Player seperti berikut:


Tambahkan dan ubahlah script kamu untuk mencegah pemain keluar layar seperti ini:


Sekarang, pemain tidak dapat keluar dari layar. Tetapi 1/2 atau 3/4 dari si pemain dapat keluar dari layar:


Cara membetulkannya mudah, kita dapat membuat variabel lagi dan mengisinya dengan nilai tertentu, menurut saya angka yang paling pas adalah 1.25:


Seharusnya sekarang si pemain tidak dapat keluar dari layar.
Tetapi, game kita belum selesai. Kita perlu menambahkan si kotak untuk diambil dengan si lingkaran. Kalau kotaknya ada banyak, memainkan gamenya pasti asyik.
Buatlah sebuah sprite dengan Create > 2D Object > Sprite di bagian Hierarchy, namakan ia "Square". Sedangkan di bagian Inspector, komponen Sprite Renderer, klik lingkaran disebelah None (Sprite) dan pilih Square. Sekali lagi, objeknya terlalu besar, ubahlah Scale x dan y menjadi 0.1.
Sekarang di bagian "Scene" hanya ada satu kotak, kita mau memperbanyak kotak-kotaknya. Jika kamu tidak melihat si kotak di bagian Game, kamu mungkin perlu mengubah Square > Transform > Position > Z menjadi 0. (sepertinya angka sebelumnya adalah -10)
Ada dua cara untuk memperbanyak mereka, yaitu:
  1. Memperbanyakkan dengan menggunakan script
  2. Menduplikat satu satu
Menurut saya, lebih baik cara yang pertama karena kita dapat men-clone mereka di tempat-tempat yang berbeda, dan kita juga dapat menentukan berapa banyak jumlah kotak yang diperbanyak. Cara yang kedua lebih mudah tetapi posisi kotak-kotaknya tidak akan berubah-ubah.
marilah tambahkan kode berikut di script PlayerController:


Kemudian save scriptnya dan pergi ke Unity, set variabel Collect di script PlayerController (dengan mengklik lingkaran) menjadi Square. Jalankan game dan kotak-kotaknya akan ada 11, itu adalah karena kita meng-clone kotaknya 10 kali dan induknya ada 1, dijumlah menjadi 11.
Tetapi ketika kotak terkena pemain, ia tidak menghilang, seperti:


Untuk membetulkannya, pergi ke Square > Tag > Add Tag... > Tags, klik tombol + dan isi dropdown New Tag Name dengan Square dan klik Save. Kemudian klik lagi dropdown Tag dan pilih Square. Kamu baru sahaja memberikan sebuah objek (Square) sebuah tag bernama Square, ia akan berguna untuk mendeteksi bahwa pemain sedang terkena si kotak atau tidak.
Game ini akan memiliki skor, buatlah variabel Score bertipe int, seperti:


Setelah itu, buatlah fungsi baru bernama OnTriggerEnter2D(Collider2D other) dibawah fungsi Update() seperti ini:


OnTriggerEnter2D bukan nama sembarangan, ia adalah sebuah fungsi yang otomatis dijalankan kalau object ini terkena sebuah Collider2D. Kita perlu menambahkan sebuah komponen Collider2D ke Square supaya terdeteksi. Klik Square di Hierarchy, klik New Component di Inspector, pilih Physics 2D > Polygon Collider 2D, kemudian pergi ke Player, tambahkan komponen Circle Collider 2D dan cantumkan Is Trigger, supaya akan terdeteksi kalau ada objek yang masuk ke dalam collider Player.
Sekarang, pemain dapat mengoleksi semua kotak:


Ubahlah background layar dengan mengklik Main Camera di Hierarchy, cari komponen Camera di Inspector, klik kotak berwarna di sebelah Background, ubahlah warnanya, dari #314D7900 menjadi #D01B5700. (Warna sesuai selera)
Setelah itu, kita memerlukan layar menang, buatlah sebuah Scene dengan mengklik Project > Create > Scene, namakan scene itu "Win", masukkanlah scene ke dalam folder Scenes, kemudian klik dua kali scene itu untuk membukanya.
Kalau ada pop-up yang menanyakan kamu untuk menyimpan scene, pilih Save, seperti berikut:

Sebuah pop-up muncul
Di scene Win, buatlah sebuah Text UI dengan mengklik di bagian Hierarchy, Create > UI > Text, Unity akan otomatis membuat sebuah Canvas dan EventSystem seperti berikut:


Canvas adalah sebuah "layar" yang berisi objek-objek UI, dan EventSystem adalah untuk mendeteksi sesuatu dari mouse kamu. (klik, posisi dll.)
Namakanlah teks itu "WinText" dan klik ia dua kali atau tekan Shift+F.
Kamu akan menemukannya di dalam layar yang lain, yang lebih besar dari kamera, itulah si canvas tadi.
Jangan lupa, kamu harus mengubah komponen Canvas > Canvas Scaler > UI Scale Mode, ubahlah dari "Constant Pixel Size" menjadi "Scale With Screen Size". Ia akan mencocokkan skala UI yang berada di Canvas itu dengan layar kamu.
Ubahlah semua nilai komponen ReplayText seperti berikut:


Setelah itu, buatlah sebuah tombol dengan Hierarchy > Create > UI > Button, namakan tombol itu "ReplayButton", klik segitiga yang berada di ReplayButton, dan klik Text. Ubah teksnya menjadi "Ulang". (sebelumnya adalah "Button")
Kemudian ubahlah Rect Transform-nya si tombol seperti ini:

Mengubah RectTransform sebuah tombol
Ubahlah posisi tombol menjadi (0, 50), width (lebar) dan height (tinggi) tombol menjadi 100 dan 50.
Ingatlah bahwa yang diubah-ubah adalah ReplayButton, bukan Text.

Sekarang pergi lagi ke scene Game, klik dua kali script PlayerController.
Kita perlu mengubah script itu, mendeteksi kalau kondisi game adalah menang.
Pertama, tambahkan using UnityEngine.SceneManagement; seperti berikut:


Kita membutuhkannya karena kita akan mengubah scene dari satu ke yang lain.
Kemudian di dalam fungsi Update(), tambahkan statemen if seperti berikut:


Script itu akan mendeteksi kalau nilai skor lebih dari atau sama dengan 11, scene Win akan dibuka.
Nah, ketika game di jalankan, akan ada error yang muncul, kurang lebih errornya adalah seperti:
"Scene 'Win' couldn't be loaded because it has not been added to the build settings or the AssetBundle has not been loaded."
Itu adalah karena kita belum menambahkan scene Win ke Build Settings.
Caranya adalah klik File > Build Settings... > Add Open Scenes, kamu telah menambahkan scene Game. Untuk menambahkan scene Win, klik dua kali Scene Win itu di belakang, (bagian Project) kemudian klik lagi tombol Add Open Scenes. Silanglah window Build Settings, pergi ke scene Game dan jalankan.
Kalau kamu telah mengoleksi semua kotak dan kamu mencoba mengklik tombol Ulang, tidak ada apa-apa yang terjadi. Ini adalah karena kamu belum men-set apa yang tombol akan lakukan kalau ia ditekan. Exitlah playmode dan pergi ke scene Win, cari dan klik tombol ReplayButton di bagian Hierarchy dan klik Add Component di Inspector, pilih New Script dan namakanlah ia "ReplayButtonScript", kemudian tekan enter. Klik dua kali script itu.
Hapus fungsi Start() dan Update(), kemudian tambahkanlah beberapa kode seperti berikut:


Di Unity, masukkan script ReplayButtonScript ke folder Scripts supaya rapi.
Setelah itu, di komponen Button, tambahkan sebuah list di OnClick() dengan mengklik tombol +:


Set None (Object) menjadi ReplayButton, dan klik No Function > ReplayButtonScript > ButtonPressed ().
Kamu sudah selesai! Sekarang save scene Win dan pergi ke scene Game dan jalankan game untuk mencoba game yang kamu telah buat.

Membuat File .EXE

Untuk membuat file aplikasinya, (.exe) klik File > Build Settings... > Player Settings... > Icon untuk mengubah icon game kamu. Cantumkan "Override for PC, Mac & Linux Standalone" kemudian klik kotak yang paling atas dan pilih Circle. Sekarang pergi ke window Build Settings dan klik tombol Build. Kamu akan ditanya dimana aplikasi itu mau di simpan, dan mau dinamakan apa. Buatlah folder baru bernama "Builds", namakan aplikasi itu Collecty, klik Save, dan kamu sudah selesai! Akhirnya kamu dapat mencobanya juga.
Kalau kamu buka filenya, akan ada window yang terbuka, kurang lebih seperti ini


Klik tombol Play untuk mulai, tetapi ingatlah bahwa untuk keluar dari game kamu harus menekan tombol Alt+Tab. Selamat mencoba!