Cara Membuat Game Android Dasar dengan Kesatuan
Dalam tutorial Appual sebelumnya berjudul Cara Membuat Permainan Platform Kesatuan Dasar ( dan bagiannya 2), kami beralih menggunakan Unity dan plug-in WebGL bawaan untuk membuat gim browser berbasis HTML5 sederhana - dalam tutorial serupa ini, kita akan membahas cara membuat gim Android dasar menggunakan Unity.
Persyaratan:
- Kesatuan
- Editor teks yang bagus seperti NotePad ++ (Opsional tapi disarankan)
- SDK Android
Luncurkan Kesatuan dan buat proyek baru. Jadikan ini proyek 2D.
Ada beberapa panel untuk membiasakan diri dengan - panel Hirarki yang akan berisi semua elemen adegan kami (adegan = tingkat apa pun yang sedang Anda kerjakan). Lalu ada tab Game yang digunakan untuk memainkan / menguji game Anda saat berada di dalam editor, dan di sebelah kanan Anda memiliki panel Inspektur yang mana Anda akan mengedit berbagai hal seperti pencahayaan, fisika, dll.
Hal pertama yang ingin kita lakukan adalah membuat sprite - ini akan menjadi karakter utama kita (yang kita kontrol). Anda bisa menggambar sprite Anda sendiri, seperti menggambar persegi dengan mata, atau Anda bisa mengambil sprite dari internet - cukup pastikan itu adalah file .PNG (latar belakang transparan).
Seret dan lepaskan sprite Anda ke jendela adegan utama (jendela terbesar) - itu juga akan muncul di panel Hierarki di sebelah kiri.
Jadi sekarang kita akan membuat beberapa platform - ini dapat berupa kotak sederhana, karena kita akan dapat dengan mudah mengubah ukurannya untuk membuat dinding dan platform lainnya.
Jadi, buat sprite persegi baru dan seret dan lepaskan ke jendela Scene seperti yang Anda lakukan dengan karakter sprite Anda.
Sekarang kita perlu menginstruksikan Unity untuk memberikan fisika kepada karakter utama kita - klik pada karakter sprite utama Anda (itu harus disorot dengan warna biru di jendela Scene), kemudian pada panel Inspektur, cari GameObjects.
Klik Tambah Komponen> Fisika 2D> RigidBody2D. Ini secara otomatis akan menambahkan fisika ke sprite Anda, yang sebelumnya Anda harus skrip sendiri di SDK lain.
Kami ingin mencegah karakter sprite utama berputar di luar kendali - jadi temukan tab Batasan di panel Inspektur (dengan sprite utama masih disorot di jendela Scene), dan centang kotak untuk Freeze Rotation Z.
Jika Anda menekan tombol Putar, karakter sprite utama Anda harus jatuh dari langit dan jatuh tanpa henti - kita akan mengurusnya nanti, tetapi perhatikan saja bagaimana kami dengan mudah dapat menerapkan fisika. Fisika yang kami terapkan tergantung pada bentuk yang sedang mereka terapkan - jadi jika Anda menerapkan fisika yang sama ke bola, misalnya, ia akan berguling-guling.
Kami juga ingin memperbaiki orientasi kami untuk mencegah karakter berputar dan freewheeling di sekitar. Cari 'kendala' di inspektur dengan pemain yang dipilih dan centang kotak untuk membekukan rotasi Z. Sekarang klik mainkan lagi dan Anda harus menemukan pemain Anda sekarang turun dari langit ke azabnya yang tak terbatas.
Untuk menghentikan karakter sprite utama kita dari jatuh tanpa henti, kita perlu menambahkan collider. Ini pada dasarnya hanyalah garis bentuk padat yang akan kita tambahkan ke karakter sprite utama. Sorot karakter sprite utama Anda, klik Tambah Komponen> Fisika 2D> BoxCollider2D.
Sekarang lakukan hal yang persis sama dengan platform yang Anda buat sebelumnya. Karakter sprite utama Anda sekarang harus bertabrakan dengan platform dan tinggal di sana.
Jadi sekarang kami ingin memastikan bahwa kamera akan mengikuti karakter sprite utama Anda - di dalam adegan, seharusnya sudah ada objek kamera. Anda ingin menyeret ini di atas karakter sprite utama.
Ini sangat penting jika Anda membuat pelari berbasis 3D, sesuatu seperti Lereng di mana Anda perlu kamera untuk tetap berada di belakang objek permainan utama (karakter sprite utama Anda).
Sekarang pergi ke panel Hierarchy dan dalam daftar GameObjects, Anda ingin menyeret kamera di bawah karakter sprite utama (Player GameObject). Ini akan membuat karakter sprite utama ' induk' dari kamera. Jadi setiap kali Player GameObject bergerak di sekitar layar, kamera harus mengikuti.
Jadi untuk tutorial game ini, kita hanya akan membuat game dasar tanpa akhir, sesuatu seperti Run 3, di mana karakter utama Anda akan berjalan di layar dan menghindari rintangan (atau game over jika Anda menekan rintangan. Ini akan untuk mengambil beberapa skrip, yang sebagian besar akan disediakan dalam panduan ini.
Klik kanan folder Aset dan buat folder baru - beri nama Skrip . Sekarang klik kanan pada folder baru ini dan tekan Create> C # Script dan beri nama PlayerControls . Skrip ini akan menentukan perilaku karakter sprite utama kami.
Ketika Anda mengklik dua kali pada skrip baru ini, itu akan terbuka di Visual Studio - sebagai alternatif (dan preferensi pribadi saya), Anda dapat mengeditnya dalam sesuatu seperti NotePad ++.
File skrip seharusnya sudah memiliki sedikit kode plat boiler di dalamnya - pada dasarnya ini adalah skrip yang perlu dibiarkan sendiri atau hanya disesuaikan dengan kebutuhan Anda, dan akan menghemat banyak waktu. Jadi kita akan menambahkan objek baru.
Di atas baris void Mulai ():
Rigidbody2D rb publik ;
Bit kode berikutnya yang perlu kita tambahkan akan masuk dalam Start (), dan digunakan untuk menemukan benda tegar - pada dasarnya, kita menginstruksikan Kesatuan untuk menemukan fisika yang kita lekatkan ke GameObjects (karakter sprite utama kita), dan Mulai () akan dieksekusi ketika objek atau skrip baru dibuat.
Jadi selanjutnya, cari objek fisik.
rb = GetComponent < Rigidbody2D > ();
Dan Anda akan menambahkan baris ini di dalam Pembaruan ()
rb.velocity = Vector2 baru (3, rb.velocity.y);
Apa yang Update () lakukan adalah terus-menerus menyegarkan, sehingga setiap kode yang ditambahkan di sana akan berjalan terus menerus (kecuali objek tersebut dihancurkan). Jadi apa yang kami lakukan adalah menginstruksikan skrip yang kami inginkan kepada benda tegar untuk memiliki vektor baru menggunakan kecepatan yang sama pada sumbu Y (rb.velocity.y), tetapi dengan kecepatan 3 pada sumbu horizontal. Di masa depan, Anda juga dapat menggunakan ' FixedUpdate ()' yang serupa tetapi berbeda, karena di sana Anda dapat mengontrol jumlah pembaruan / penyegaran skrip.
Simpan skrip dan kembali ke Kesatuan, lalu klik karakter sprite utama Anda untuk menyorotnya. Di panel Inspektur, buka Menambahkan Komponen> Skrip dan tambahkan skrip yang baru saja kami simpan. Sekarang ketika Anda mengklik tombol Play, karakter sprite utama harus terus bergerak menuju tepi platform.
TIP PRO: Jika masalahnya ada pada komputer Anda atau laptop / notebook, Anda harus mencoba menggunakan Perangkat Lunak Reimage Plus yang dapat memindai repositori dan mengganti file yang rusak dan hilang. Ini berfungsi dalam banyak kasus, di mana masalah ini berasal karena sistem yang rusak. Anda dapat mengunduh Reimage Plus dengan Mengklik di SiniMembuat Kontrol Input Pemain
Jadi karena ini adalah permainan bergaya pelari tanpa akhir dengan rintangan, kita perlu menambahkan kontrol untuk pemain seperti tombol 'lompatan'.
Buka kembali skrip dari sebelumnya, dan kami akan menambahkan kode tambahan ini:
if (Input.GetMouseButtonDown (0)) {rb.velocity = Vector2 baru (rb.velocity.x, 5); }
Anda akan memasukkannya ke dalam metode Update (), dan apa yang pada dasarnya dilakukan adalah memberi tahu Unity bahwa ketika pemain mengklik tombol mouse mereka (yang akan diterjemahkan sebagai tap layar di Android), karakter sprite utama akan melompat udara. Ini karena kami telah menambahkan kecepatan pada sumbu Y dengan nilai 5 (nilai yang lebih tinggi berarti lompatan yang lebih tinggi, tentu saja).
Jika Anda tidak terlalu akrab dengan pengkodean, kami menggunakan pernyataan If karena Jika pada dasarnya adalah melakukan atau tidak jenis instruksi - yang secara harfiah mengatakan JIKA ini terjadi, lakukan perintah ini . Jadi jika pemain tidak mengklik mouse (atau mengetuk layar Android mereka) maka jelas skripnya tidak akan berjalan.
Lanjutkan dan klik tombol Putar dan pastikan itu bekerja dengan benar sebelum melanjutkan.
Selanjutnya, kita akan menambahkan rintangan kita (yang dapat menghancurkan sprite karakter utama), skor pertandingan, dan permainan di atas menu.
Jika Anda menguji permainan sejauh ini, satu-satunya masalah yang kita miliki sejauh ini adalah menekan tombol lompat yang kita buat akan melompat karakter tidak peduli apakah mereka membumi atau tidak - ini pada dasarnya Flappy Birds, dan bukan pelari seperti yang kita inginkan . Tapi kita akan memperbaikinya.
Di skrip, tambahkan sedikit kode ini di atas metode Update ():
publik Transform groundCheck; publik Transform startPosition; float groundCheckRadius publik ; LayerMask publik whatIsGround; bool pribadi onGround; Kemudian tambahkan baris berikut ini ke metode Perbarui di atas pernyataan if : onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Dan selanjutnya Anda akan mengubah baris berikut ini untuk menyertakan && onGround jika (Input.GetMouseButtonDown (0) && onGround) {Jadi seluruh skrip kami pada dasarnya harus terlihat seperti ini: PlayerControls kelas publik : MonoBehaviour { public Rigidbody2D rb; publik Transform groundCheck; publik Transform startPosition; float groundCheckRadius publik ; LayerMask publik whatIsGround; bool pribadi onGround; void Mulai () {rb = GetComponent (); } void Update () {rb.velocity = Vector2 baru (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); if (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = Vector2 baru (rb.velocity.x, 5); }}}
Untuk menjelaskan apa yang telah kami lakukan, kami telah membuat transformasi baru, yang berarti posisi dalam ruang dunia game. Kami telah menetapkan radiusnya dan kami menginstruksikan Kesatuan untuk memeriksa apakah radius tumpang tindih dengan lapisan tanah kami - dan jadi jika radius kami disinkronkan dengan tanah, karakter kami harus dapat melompat, dan jika kami sudah berada di udara dari lompatan, kita seharusnya tidak bisa melompat lagi. Pada dasarnya, onGround akan menjadi benar jika transform yang bernama groundCheck tumpang tindih dengan lapisan tanah. Semoga itu masuk akal.
Jadi simpan skripnya dan kembali ke Kesatuan, dan Anda akan melihat bahwa lebih banyak opsi telah ditambahkan ke Inspektur setelah menyoroti pemain. Ini adalah variabel publik dan kami dapat menyesuaikan ini sesuai dengan keinginan kami.
Sekarang klik kanan pada Hirarki dan buat objek kosong baru, dan seret sehingga di bawahnya karakter utama sprite di jendela Scene utama - posisi objek kosong ini di mana kita ingin lantai dideteksi. Ganti nama objek ke Check Ground, lalu seret ke bawah objek permainan pemain seperti yang kita lakukan sebelumnya dengan kamera (untuk membuat hubungan induk - anak di antara objek). Sekarang objek kosong akan mengikuti sprite karakter utama, seperti kamera, dan akan terus memeriksa jarak lantai .cam
Sekarang pilih sprite karakter utama dan pergi ke panel Inspektur - seret objek Cek Ground ke dalam ruang yang disebut groundCheck. Posisi 'mengubah' harus sama dengan posisi objek baru ini, dan di mana dikatakan Radius, membuatnya 0, 1.
Kita perlu mendefinisikan lapisan tanah. Cukup pilih medan tanah dan di Inspektur, cari tombol untuk Layer: Default (ini adalah kotak dropdown) dan pilih Add Layer.
Sekarang pilih tanah sebagai lapisan untuk platform kami, dan ulangi ini untuk platform lain di jendela permainan. Di mana ia mengatakan Apa itu Ground pada objek sprite karakter utama kita, juga pilih layer tanah.
Apa yang kami lakukan adalah menginstruksikan script pemain untuk melakukan pemeriksaan - jika titik kecil di layar tumpang tindih dengan apa pun yang cocok dengan layer, karakter akan melompat hanya jika ini benar.
Game Over on Collision dan Menu Game
Jadi untuk membungkus semuanya, hal terakhir yang ingin kita lakukan adalah A: Membuat bertabrakan dengan rintangan menghasilkan game over, dan B: Buat game di atas layar menu dengan tombol play lagi.
Apa yang pada dasarnya ingin Anda lakukan adalah:
- Tambahkan objek Player dan tetapkan benda tegar dan collider pilihan Anda untuk itu.
- Tambahkan objek Enemy dan tetapkan benda tegar dan collider pilihan Anda untuk itu. (dan opsional, tambahkan tag Enemy untuk itu)
- Buat skrip C # baru dan tambahkan sebagai komponen ke Player (atau gunakan skrip apa pun yang melekat pada pemutar, tidak perlu membuat yang baru jika Anda sudah memilikinya)
- Tambahkan ini di skrip Anda:
void OnCollisionEnter (Collision coll) {Debug.Log ("Tabrakan"); // Periksa untuk melihat apakah ia mencatat tumbukan, jika berhasil Anda dapat menghapus baris ini jika (coll.gameobject.tag == "Enemy") { // melihat apakah objek yang ditabrak pemain Anda memiliki tag bernama "Musuh ", ini dapat diganti dengan if (coll.gameobject.name == ... tetapi menggunakan tag adalah cara mudah untuk melakukannya. // Tambahkan kode Anda di sini, seperti: Application.LoadLevel (" GameOver "); Debug .Log ("Working"); // jika berfungsi, Anda dapat menghapus baris ini. }
Bermain-main dengan contoh skrip - dengan beberapa trial and error, Anda akan mendapatkannya untuk melakukan apa yang kita butuhkan.
Sekarang untuk melihat dengan tepat cara membuat level GameOver dengan tombol Play, lihat bagian terakhir dari panduan Appual's Cara Membuat Game Platform Kesatuan Dasar. 2
TIP PRO: Jika masalahnya ada pada komputer Anda atau laptop / notebook, Anda harus mencoba menggunakan Perangkat Lunak Reimage Plus yang dapat memindai repositori dan mengganti file yang rusak dan hilang. Ini berfungsi dalam banyak kasus, di mana masalah ini berasal karena sistem yang rusak. Anda dapat mengunduh Reimage Plus dengan Mengklik di Sini