Cara Membuat Permainan Android Asas dengan Unity

dalam tutorial serupa ini, kita akan membahas cara membuat asas Android permainan menggunakan Perpaduan.



Keperluan:

  • Perpaduan
  • Penyunting teks yang baik seperti NotePad ++ (Pilihan tetapi disyorkan)
  • SDK Android
Sekiranya anda belum memilikinya, anda harus bermula dengan memuat turun dan memasang Unity SDK dan juga Android SDK. Kami memerlukan Android SDK sehingga kami dapat menguji APK permainan di dalam lingkungan Android.

Lancarkan Unity dan buat projek baru. Jadikannya projek 2D.



Terdapat beberapa panel yang perlu anda ketahui - panel Hierarki yang akan mengandungi semua elemen pemandangan kita (pemandangan = apa sahaja 'tahap' yang sedang anda kerjakan). Kemudian ada tab Game yang digunakan untuk bermain / menguji permainan anda ketika berada di dalam editor, dan di sebelah kanan anda mempunyai panel Inspektor di mana anda akan mengedit pelbagai perkara seperti pencahayaan, fizik, dll.



Perkara pertama yang ingin kita lakukan ialah membuat sprite - ini akan menjadi watak utama kita (yang kita kendalikan). Anda boleh melukis sprite anda sendiri, seperti melukis persegi dengan mata, atau meraih sprite dari internet - pastikan fail itu .PNG (latar belakang telus).



Seret dan jatuhkan sprite anda ke tetingkap pemandangan utama (tetingkap terbesar) - ia juga akan muncul di panel Hierarki di sebelah kiri.

Jadi sekarang kita akan membuat beberapa platform - ini boleh menjadi kotak sederhana, kerana kita akan dapat mengubah ukurannya dengan mudah untuk membuat dinding dan platform lain.

Oleh itu, hanya buat 'sprite' persegi baru dan seret dan lepaskan ke tetingkap Scene seperti yang anda lakukan dengan watak sprite anda.



Sekarang kita perlu mengarahkan Unity untuk memberikan fizik kepada watak utama kita - klik pada watak sprite utama anda (ia harus diserlahkan dengan warna biru di tetingkap Scene), kemudian pada panel Inspektor, cari 'GameObjects'.

Klik pada 'Tambah Komponen> Fizik 2D> RigidBody2D'. Ini secara automatik akan menambahkan fizik ke sprite anda, yang mana anda harus membuat skrip anda sendiri di SDK lain.

Kami ingin mengelakkan watak sprite utama berputar di luar kawalan - jadi cari tab Kekangan di panel Inspektor (dengan sprite utama masih disorot di tetingkap Scene), dan tandakan kotak untuk 'Freeze Rotation Z'.

Sekiranya anda menekan butang 'Main', watak sprite utama anda harus jatuh dari langit dan jatuh tanpa henti - kami akan mengurusnya kemudian, tetapi perhatikan bagaimana kami dapat menerapkan fizik dengan mudah. Fizik yang kami terapkan bergantung pada bentuk yang digunakan - jadi jika anda menggunakan fizik yang sama pada bidang, misalnya, ia akan bergulir.

Kami juga mahu memperbaiki orientasi kami untuk mengelakkan watak berputar dan berputar bebas. Cari 'kekangan' di pemeriksa dengan pemain yang dipilih dan tandakan kotak untuk membekukan putaran Z. Sekarang klik main lagi dan anda akan mendapati pemain anda sekarang jatuh dari langit ke azabnya yang tidak terhingga.

Untuk menghentikan watak sprite utama kita dari jatuh tanpa henti, kita perlu menambahkan collider. Ini pada dasarnya hanyalah garis besar bentuk yang akan kita tambahkan pada watak sprite utama. Serlahkan watak sprite utama anda, klik 'Tambah Komponen> Fizik 2D> BoxCollider2D.

Sekarang lakukan perkara yang sama dengan platform yang anda buat sebelumnya. Watak sprite utama anda sekarang harus 'bertembung' dengan platform dan terus berada di sana.

Jadi sekarang kami ingin memastikan bahawa kamera akan mengikuti watak sprite utama anda - di dalam tempat kejadian, sudah semestinya ada objek kamera. Anda mahu menyeret ini di atas watak sprite utama.

Ini amat penting jika anda membuat Pelari berasaskan 3D , sesuatu seperti Cerun di mana anda memerlukan kamera untuk terus berada di belakang objek permainan utama (watak sprite utama anda).

Sekarang pergi ke panel Hierarki dan dalam senarai GameObjects, anda mahu menyeret kamera di bawahnya watak sprite utama (Player GameObject). Ini akan menjadikan watak sprite utama sebagai ‘ ibu bapa ’ kamera. Oleh itu, setiap kali Pemain GameObject bergerak di sekitar skrin, kamera harus mengikuti.

Oleh itu, untuk tutorial permainan ini, kami hanya akan membuat permainan jenis pelari tanpa henti asas, seperti Lari 3 , di mana watak utama anda akan melintasi layar dan mengelakkan halangan (atau 'permainan selesai' jika anda menghadapi halangan '. Ini akan mengambil beberapa skrip, yang sebahagian besar akan diberikan dalam panduan ini.

Klik kanan folder 'Aset' dan buat folder baru - beri nama Skrip . Sekarang klik kanan pada folder baru ini dan tekan 'Buat> C # Skrip' dan beri nama Kawalan Pemain . Skrip ini akan menentukan tingkah laku watak sprite utama kita.

Apabila anda mengklik dua kali pada skrip baru ini, ia semestinya buka di Visual Studio - sebagai alternatif (dan pilihan peribadi saya), anda boleh mengeditnya seperti NotePad ++.

Fail skrip sudah semestinya mempunyai sedikit kod 'piring boiler' di dalamnya - pada dasarnya ini adalah skrip yang perlu dibiarkan begitu sahaja atau disesuaikan dengan keperluan anda, dan akan menjimatkan banyak masa. Oleh itu, kita akan menambah objek baru.

Di atas garis kosong Mula ():

awam Rigidbody2D rb;

Sebilangan kod seterusnya yang perlu kita tambahkan akan masuk dalam Start (), dan digunakan untuk mencari badan yang tegar - pada dasarnya, kita mengarahkan Unity untuk mencari fizik yang kita lampirkan pada GameObjects (watak sprite utama kita), dan Mula () akan dilaksanakan ketika objek atau skrip baru dibuat.

Oleh itu, cari objek fizik.

rb = GetComponent< Rigidbody2D > ();

Dan anda akan menambah baris ini di dalam Kemas kini ()

rb.velocity = baru Vektor2 (3, rb.velocity.y);

Apa yang dikemas kini () sentiasa disegarkan, jadi mana-mana kod yang ditambahkan di dalamnya akan terus berjalan (kecuali jika objek itu musnah) Oleh itu, apa yang telah kami lakukan adalah mengarahkan skrip bahawa kami mahu badan tegar mempunyai vektor baru menggunakan kelajuan yang sama pada paksi Y (rb.velocity.y), tetapi dengan kelajuan 3 pada paksi mendatar. Di masa hadapan, anda juga boleh menggunakan ‘ FixedUpdate () ’ yang serupa tetapi berbeza, kerana di sana anda dapat mengawal jumlah kemas kini / penyegaran skrip.

Simpan skrip dan kembali ke Unity, kemudian klik watak sprite utama anda untuk menyerlahkannya. Di panel Inspektor, pergi ke Tambah Komponen> Skrip dan tambahkan skrip yang baru kita simpan. Sekarang apabila anda mengklik butang Main, watak sprite utama harus terus bergerak ke arah tepi platform.

Membuat Kawalan Input Pemain

Oleh kerana ini adalah permainan gaya pelari tanpa henti, kita perlu menambahkan kawalan untuk pemain seperti butang ‘lompat’.

Buka semula skrip dari sebelumnya, dan kami akan menambahkan kod tambahan ini:

 sekiranya (Input.GetMouseButtonDown (0)) {rb.velocity = baru Vector2 (rb.velocity.x, 5); }

Anda akan memasukkannya ke dalam kaedah Kemas kini (), dan yang pada dasarnya adalah memberitahu Unity bahawa apabila pemain mengklik butang tetikus mereka (yang akan diterjemahkan sebagai ketukan layar pada Android), watak sprite utama akan 'melompat ' di udara. Ini kerana kami telah menambahkan halaju pada sumbu Y dengan nilai 5 (nilai yang lebih tinggi bermaksud lompatan yang lebih tinggi, tentu saja).

Sekiranya anda tidak terlalu biasa dengan pengekodan, kami menggunakan Sekiranya penyataan kerana Sekiranya pada dasarnya adalah jenis arahan 'jangan atau tidak' - yang secara harfiah mengatakan JIKA ini berlaku, lakukan arahan ini . Jadi jika pemain tidak mengklik tetikus (atau mengetuk skrin Android mereka) maka jelas skrip tidak akan berjalan.

Teruskan dan klik butang 'Main' dan pastikan ia berfungsi dengan betul sebelum meneruskan.

Seterusnya, kami akan menambahkan rintangan kami (yang dapat 'menghancurkan' sprite watak utama), skor permainan, dan menu 'game over'.

Sekiranya anda menguji permainan sejauh ini, satu-satunya masalah yang kami jalani ialah menekan butang 'lompat' yang kami buat akan melonjak watak tidak kira sama ada ia diasaskan atau tidak - ini pada dasarnya Flappy Birds, dan bukan pelari seperti kami mahu. Tetapi kita akan memperbaikinya.

Dalam skrip, tambahkan sedikit kod ini di atas kaedah Kemas kini ():

 awam Ubah tanahCheck; awam Transform startPosition; awam   terapung groundCheckRadius; awam LayerMask whatIsGround; peribadi   bool onGround; Dan kemudian tambahkan baris seterusnya ke kaedah Kemas kini di atas sekiranya pernyataan: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Dan seterusnya anda akan menukar baris berikut ini untuk memasukkan '&& onGround' sekiranya (Input.GetMouseButtonDown (0) && onGround) {Oleh itu, keseluruhan skrip kami pada dasarnya akan kelihatan seperti ini: awam   kelas   Kawalan Pemain : MonoBehaviour { awam Rigidbody2D rb; awam Ubah tanahCheck; awam Transform startPosition; awam   terapung groundCheckRadius; awam LayerMask whatIsGround; peribadi   bool onGround; batal   Mulakan () {rb = GetComponent (); } batal   Kemas kini () {rb.velocity = baru Vektor2 (3, rb.velocity.y); onGround = Fizik2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); sekiranya (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = baru Vector2 (rb.velocity.x, 5); }}}

Untuk menjelaskan apa yang telah kami lakukan, kami telah membuat 'transformasi' baru, yang bermaksud posisi di ruang dunia permainan. Kami telah menetapkan radius dan kami menginstruksikan Unity untuk memeriksa apakah radius bertindih dengan lapisan 'ground' kami - dan jadi jika radius kami diselaraskan dengan 'ground', watak kami harus dapat melompat, dan jika kami kita sudah berada di udara dari lompatan, kita seharusnya tidak dapat melompat lagi. Pada asasnya, onGround akan menjadi kenyataan sekiranya transformasi yang dinamakan semakan tanah bertindih dengan lapisan tanah. Mudah-mudahan itu masuk akal.

Oleh itu, simpan skrip dan kembali ke Unity, dan anda akan melihat bahawa lebih banyak pilihan telah ditambahkan ke Inspektor setelah menonjolkan pemain. Ini adalah pemboleh ubah awam dan kami dapat menyesuaikannya mengikut keinginan kami.

Sekarang klik kanan pada Hierarki dan buat objek kosong baru, dan seret sehingga ia berada di bawah watak utama sprite di tetingkap Scene utama - letakkan objek kosong ini di mana kita mahu lantai dikesan. Ganti nama objek ke 'Check Ground', dan kemudian seret ke bawah objek permainan pemain seperti yang kami lakukan sebelumnya dengan kamera (untuk mewujudkan hubungan ibu bapa - anak antara objek). Sekarang objek kosong akan mengikuti sprite watak utama, sama seperti kamera, dan ia akan terus memeriksa jarak lantai.cam

Sekarang pilih sprite watak utama dan pergi ke panel Inspektor - seret objek Check Ground ke ruang yang disebut 'groundCheck'. Posisi 'transform' harus sama dengan kedudukan objek baru ini, dan di mana ia mengatakan 'Radius', menjadikannya 0.1.

Kita perlu menentukan lapisan tanah. Cukup pilih medan tanah dan di Inspektor, cari butang untuk 'Layer: Default' (ini adalah kotak dropdown) dan pilih 'Add Layer'.

Sekarang pilih 'landasan' sebagai lapisan untuk platform kami, dan ulangi ini untuk platform lain di tetingkap permainan. Di mana tertulis 'What is Ground' pada objek sprite watak utama kami, pilih juga lapisan tanah.

Apa yang telah kami lakukan adalah memerintahkan skrip pemain untuk melakukan pemeriksaan - sekiranya titik kecil di skrin bertindih dengan apa sahaja yang sepadan dengan lapisan, watak akan melompat hanya jika ini benar.

Game Over on Collision dan Game Menu

Oleh itu, untuk menyelesaikannya, perkara terakhir yang ingin kita lakukan adalah A: Membuat pertembungan dengan rintangan mengakibatkan permainan berakhir, dan B: Buat layar menu 'game over' dengan butang main lagi.

Yang pada dasarnya ingin anda lakukan ialah:

  1. Tambahkan Pemain objek dan memberikan a jasad tegar dan a pelanggar pilihan anda untuk itu.
  2. Tambah sebuah Musuh objek dan memberikan a jasad tegar dan a pelanggar pilihan anda untuk itu. (dan pilihan, tambah Tanda 'Musuh' untuk itu)
  3. Buat yang baru Skrip C # dan tambahkan sebagai komponen untuk Pemain (atau gunakan skrip apa pun yang dilampirkan pada pemain, tidak perlu membuat skrip baru jika anda sudah memilikinya)
  4. Tambahkan ini dalam skrip anda:
batal OnCollisionEnter ( Perlanggaran kol) { Nyahpepijat . Log ('Perlanggaran'); // Periksa untuk melihat sama ada berlaku perlanggaran, jika ia berfungsi, anda boleh membuang garis ini jika (coll.gameobject. teg == 'Musuh') { // melihat apakah objek yang dilanggar pemain anda mempunyai tag yang disebut 'Musuh