Buat Video Game 2D Dengan Unity

Dalam Instructable ini, saya akan menunjukkan kepada Anda untuk membuat gim Video 2D yang sangat sederhana. Ini adalah gim gaya pelari tanpa batas, seperti "Fly with Me 'atau" DoodleJump ".

Cobalah di sini !!

Saya telah memberikan zip dari exe game yang akan saya tunjukkan kepada Anda cara membuatnya. Unduh dan coba.

Ini sepenuhnya tidak lengkap sejauh permainan berjalan, tetapi melayani saya sebagai kesempatan yang fantastis untuk belajar sedikit scripting C # dan untuk memperkuat pengetahuan Unity yang saya ambil sejak mengunduhnya dua minggu lalu. Untuk tujuan berbagi, saya memutuskan untuk menggunakan Robot yang sangat menyenangkan yang bisa diajari Instructables. Aku memandangi penghormatan sederhana pada kartun-kartun masa lalu yang dilakukan dengan gaya yang sama. Saya selalu suka ketika pensil berinteraksi dengan kartun.

Saya harus mengatakan bahwa Persatuan adalah alat yang luar biasa. Ada banyak informasi yang tersedia di bagian pembelajaran situs Unity, saya sangat merekomendasikan untuk melihatnya setelah Anda melihat betapa sederhananya untuk mulai membuat game 2D.

Semua yang saya tunjukkan di sini, saya pelajari dari situs Unity, mereka memiliki beberapa tutorial dan sesi pelatihan video yang bagus.

Saya baru mengenal Unity, mungkin atau tidak, jadi ini hanya untuk berbagi kecintaan saya pada lingkungan dan pengalaman belajar saya sejauh ini.

Saya akan memberikan aset sprite untuk setiap langkah sehingga Anda dapat mengikuti, dan membuat game sendiri. Saya sarankan untuk tidak menggunakan kode saya apa adanya, tetapi mengikuti dan menulis versi Anda sendiri dari skrip yang sama.

Saya memiliki sedikit atau tidak ada pengalaman pemrograman dalam C, dan belum scripting di C # cukup cepat .... itu mengingatkan saya pada banyak sekali Arduino dan Pemrosesan, yang saya kenal.

Jadi, bahkan jika Anda tidak terbiasa dengan pemrograman, saya yakin Anda bisa melakukan ini juga. Setidaknya ikuti petualangan saya untuk melihat betapa mudahnya itu.

Langkah 1: Unduh Perangkat Lunak Unity Gratis

Bascillay Unity cukup baik untuk membiarkan kita yang berharap bisa masuk ke game dev, coba pelajari secara gratis, selama kita tidak menghasilkan uang dengan produk yang kita hasilkan menggunakan perangkat lunak mereka. Luar biasa. Terima kasih banyak Unity, atas dorongan dan kebebasan untuk mencobanya, dan untuk perangkat lunak yang luar biasa.

Jika Anda berencana untuk mengikuti, Anda harus pergi ke Halaman Utama Unity dan mengunduh versi gratis perangkat lunak.
Anda juga perlu membuat Unity Login, cukup ikuti langkah-langkah setelah menginstal.

Langkah 2: Buka Persatuan

Jika ini pertama kalinya Anda membuka Unity, Anda akan disajikan kotak dialog untuk membuat proyek baru. Telusuri ke lokasi yang sesuai, dan beri nama proyek Anda, sesuatu seperti "Iblejump".
Sangat penting untuk memeriksa pemilihan 2D di bagian bawah formulir di mana dikatakan "Setup Defaults For".

Anda tidak perlu mengimpor paket apa pun untuk game yang akan kami buat. Saya menyarankan agar tidak mengganggu mereka kecuali Anda membutuhkannya untuk permainan Anda. Tidak ada gunanya memasukkan bulk tambahan ke file build kami.

Ketika Anda telah membuat pilihan yang tepat, silakan dan tekan 'buat'.

Sekarang Unity Editor akan membuka proyek kosong baru kami dan memberi kami popup sambutan yang bagus. Mari kita tutup itu untuk saat ini dan menjelajahi sedikit antarmuka.

Area kerja dibagi menjadi empat bagian berbeda, yang dapat Anda atur sesuai dengan alur kerja Anda.

Jendela hierarki di sisi kiri menunjukkan semua objek yang saat ini ada di adegan Anda. Jendela adegan adalah tempat kami akan membangun dan menempatkan objek permainan kami.

Di bawah, kami memiliki area kerja lain tempat Anda dapat memasang tab yang berbeda-beda. Sebagian besar tab dapat merapat ke area yang Anda rasa nyaman. Ini adalah bagaimana saya mengatur area saya, Anda mungkin melakukan sesuatu yang sedikit berbeda. Hal utama yang harus diperhatikan adalah Anda dapat mengakses semua jendela ini dari menu tarik turun jendela, dan menambah atau mengurangi sesuai kebutuhan. Anda tidak perlu khawatir jika jendela Anda tidak terlihat identik. Saya akan menunjukkan kepada Anda masing-masing bidang yang akan kami gunakan secara lebih rinci.

Untuk saat ini cukup klik pada "Kamera Utama" Anda sehingga Anda dapat melihat apa yang terjadi di kanan di Inspektur dan jendela pemandangan.
Perhatikan bagaimana Anda sekarang memiliki pratinjau adegan kosong Anda di sudut bawah jendela adegan, dan semua komponen dan nilai properti untuk kamera terbuka.

Langkah 3: Buat Obyek Game Pertama Anda


Pertama, Anda akan memerlukan folder Sprite yang telah saya sertakan sebagai file zip. Ekstrak folder ke suatu tempat Anda dapat menemukannya.

Di Unity, turun di area kerja proyek, di bawah tab proyek, dengan Asset dipilih, seret folder membuka ritsleting ke area abu-abu di sebelah kanan. Semua sprite yang perlu Anda duplikasi proyek saya ada di folder ini.

Arahkan ke folder Sprite baru dan temukan sprite bernama "navbar". Seret itu ke atas ke jendela Scene. Letakkan di suatu tempat dekat bagian bawah adegan Anda, seperti yang saya lakukan pada gambar.

Jika Anda mengklik Kamera Utama di jendela hierarki Anda setelah menempatkannya, Anda sudah bisa melihat bagaimana itu akan terlihat di game Anda.

Kita perlu menambahkan beberapa komponen, mari kita mulai dengan colllider kotak, untuk membuat kotak kita solid.

Dengan objek baru Anda dipilih, di Inspektur, klik "Tambahkan Komponen" dan kemudian tambahkan Box Collider 2D, ditemukan di bawah Physics2D

Maju dan tambahkan Box Collider 2D kedua ke objek Anda, yang ini akan kami gunakan untuk memblokir pemain agar tidak jatuh secara jatuh dari sisi navbar tepat di awal permainan.

Karena saya ingin Robot memulai tentang di mana dia berada di halaman web Instructables, saya menyusut collider utama sedikit. Dan collider kedua sebenarnya duduk di ruang terbuka, yang akan mencegah pemain kami berlari dari sisi kiri saat pertandingan dimulai.

Siapkan kotak yang Anda kencangkan agar sesuai dengan ukuran pada gambar, juga atur ukuran x dan y dari parameter transform menjadi 1, 5. Saksikan perubahan yang terjadi di jendela adegan.

Lampiran

  • Unduh Sprites.zip

Langkah 4: Tambahkan Pemain

Sekarang kita memiliki platform untuk pemain berdiri, kita akan membutuhkan pemain.

Klik GameObject di bilah menu atas, pilih buat kosong.

Pilih objek permainan kosong Anda yang baru di jendela Hierarchy, dan ke atas di Inspektur, ubah namanya menjadi Player.
Selanjutnya tambahkan Komponen Renderer Sprite, ditemukan di bawah Rendering.

Dalam folder aset / sprite proyek, temukan Idle_Sprite, klik segitiga kecil di sebelahnya dan kemudian seret salah satu gambar ke nilai Sprite dari komponen sprite renderer.

Kami membutuhkan beberapa komponen lagi untuk Player kami. Pertama, tambahkan Rigidbody2D dari pilihan Physics2D.

Jika Anda menekan tombol putar sekarang, Pemain kami akan jatuh melalui navbar. Ayo coba saja.

Kami akan memperbaikinya dengan menambahkan beberapa colliders. Sedikit melawan secara intuitif, kita akan menambahkan collider lingkaran ke kaki dan tubuh kita, dan collider kotak ke kepala kita.

Sekarang, jika kita menekan tombol play, robot kecil kita akan berguling ke punggungnya seperti yang akan dilakukan oleh robot yang berada di bawah lingkaran. Perbaiki dengan mencentang kotak Fixed Angle, dan kemudian ketika Anda menekan tombol play, robot Anda akan jatuh ke navbar dan beristirahat dengan baik di sana.

Dia agak besar untuk kesukaan saya, jadi saya mengubah ukurannya menjadi 0, 75 x dan 0, 75 y.

Lalu aku mengutak-atik posisi navbar dan robot sampai aku bahagia.

Sekarang adalah saat yang tepat untuk menyelamatkan adegan Anda, berikan nama yang terasa menyenangkan bagi Anda dan simpanlah.

Langkah 5: Tambahkan Beberapa Kehidupan ke Robot

Oke, sekarang setelah kita memiliki objek pemain, kita dapat mulai menambahkan beberapa animasi dan fungsionalitas padanya.

Dengan Objek Player dipilih, tambahkan Komponen Animator. Tambahkan Komponen -> Lain-lain -> Animator.
Hapus centang "Terapkan Gerakan Root", dan centang kotak "Animate Physics".

Sekarang buka jendela Animator Anda. Anda dapat melakukan ini melalui tarik turun Window jika belum terbuka di area kerja proyek. Saya suka merapat milik saya di bagian bawah.

Dengan Pemain masih dipilih dalam Hirarki, Buka jendela Animasi. Itu juga dapat ditemukan di Window pull down. Saya suka merapat milik saya di area yang sama dengan adegan dan jendela permainan saya.

Di jendela Animasi, klik segitiga kecil di samping "sampel" untuk membuat klip baru.

Di bawah, buka folder aset / sprite Anda dan buka lagi sprite idle. Geser pilih seluruh rangkaian gambar dan seret ke atas ke jendela animasi.

Karena animator (saya) murah untuk bingkai, setel ulang ukuran sampel menjadi 10.

Sekarang lihat Animator Anda, Anda seharusnya secara otomatis memiliki dua status ditambahkan, status apa saja, dan status default baru, Diam. Warna oranye memberitahu kita bahwa itu adalah keadaan animasi default.

Jika Anda telah mengikuti langkah-langkah ini dengan benar, Anda harus memiliki Robot animasi sekarang ketika Anda menekan tombol play.

Buat animasi lain dan menyebutnya drive. Gunakan lembar sprite Drive. Sekali lagi, turunkan frame rate. Saya menaruhnya di 20 untuk saat ini. Anda dapat mengubahnya di kemudian hari sesuai keinginan Anda.

Di jendela Animator, Anda akan melihat bahwa keadaan kedua telah dibuat secara otomatis. Bagus! Mari kita tambahkan parameter float bernama "Kecepatan" ke Animator kami sebelum kami membuat transisi.

Sekarang klik kanan pada kondisi Idle, dan pilih "make Transition". Kemudian seret ke status drive. Ini akan membuat bilah panah kecil. pilih segitiga di tengah bilah transisi. Ubah kondisi transisi di inspektur menjadi ketika Kecepatan lebih besar dari 0, 01. Sekarang buat transisi dari drive kembali ke siaga dengan kondisi kecepatan kurang dari 0, 01.

Selanjutnya kita perlu membuat skrip pengontrol untuk Robot.

Langkah 6: Script Pengendali Robot

Sekarang kita memiliki Player dengan beberapa status animasi, kita memerlukan skrip untuk mengontrol karakter. Kami akan menambahkan skrip C # sederhana ke proyek kami untuk mengontrol Player kami.

Di jendela Proyek, buat folder baru dan beri nama Skrip. Buka folder itu dan buat skrip C # baru, sebut saja RobotController.

Klik dua kali skrip untuk meluncurkan MonoDevelop. Butuh beberapa saat untuk membuka diri, bersabarlah.
Masukkan kode berikut untuk memulai
 menggunakan UnityEngine; menggunakan System.Collections; RobotController kelas publik: MonoBehaviour {// Ini akan menjadi kecepatan maksimum kami karena kami akan selalu dikalikan dengan 1 float publik maxSpeed ​​= 2f; // nilai boolean untuk mewakili apakah kita menghadap ke kiri atau tidak bool facingLeft = true; // nilai untuk mewakili Animator Animator anim kami; // Gunakan ini untuk inisialisasi batal Mulai () {// atur anim ke animator kami anim = GetComponent (); } // Pembaruan disebut sekali per bingkai batal FixedUpdate () {float move = Input.GetAxis ("Horizontal"); // Memberi kita satu jika kita bergerak melalui tombol panah // pindahkan Pemain kaku kita rigidbody2D.velocity = Vector3 baru (move * maxSpeed, rigidbody2D.velocity.y); // tetapkan anim.SetFloat kecepatan kami ("Kecepatan", Mathf.Abs (bergerak)); // jika kita bergerak ke kiri tetapi tidak menghadap ke flip kiri, dan sebaliknya jika (pindah 0 && facingLeft) {Balik (); }} // flip jika perlu void Flip () {facingLeft =! facingLeft; Vector3 theScale = transform.localScale; theScale.x * = -1; transform.localScale = theScale; }} 

Simpan skrip dan kembali ke jendela Unity. Seret skrip RobotController baru dari pekerjaan proyek ke objek Player di jendela Hierarchy. Tekan tombol play untuk menjalankan game dan Anda harus dapat mengendalikan robot dengan tombol panah kiri dan kanan. Jika Anda membuka jendela Animator di bawah game, Anda akan melihat animasi berubah dari drive ke idle tergantung pada apakah Robot bergerak atau tidak.

Langkah 7: Dapatkan Melompat - Script Pengontrol Pemain Lanjutan

Hanya beberapa langkah untuk diterapkan agar pemain kami melompat.
Kami akan memerlukan status animasi untuk Melompat dan jatuh, dan juga beberapa kode lagi untuk mengontrol berbagai hal.

Mari mulai dengan menambahkan dua parameter lagi ke Player Animator kami. Tambahkan float yang disebut `vSpeed`` dan Bool bernama` Ground`. Kami akan menggunakan vSpeed ​​untuk menahan kecepatan vertikal kami, dan Ground akan berada di tempat untuk membantu kami mendeteksi ketika karakter kami ada di tanah, memungkinkan untuk lompatan yang lebih realistis. (Melompat di udara tanpa menyentuh tanah lebih seperti terbang).

Kembali ke jendela adegan, buat Obyek Game kosong baru. Sebut saja groundcheck dan tambahkan 2D Circle Collider ke dalamnya.
Seret Collider baru ke objek Player di jendela Hierarchy. Ubah radius collider groundcheck menjadi 0, 1, dan ubah y mentransformasikan posisi menjadi -1. Ini menempatkan lingkaran kecil kecil tepat di bawah kaki Robot. Juga beri tag sebagai Player dan letakkan di Player Layer.

Sekarang mari kita perbarui skrip kami untuk menggunakan parameter baru kami dan menempatkan kode di tempat untuk membuat Robot melompat ketika spasi ditekan.

Perbarui skrip RobotController Anda menjadi seperti berikut.

 menggunakan UnityEngine; menggunakan System.Collections; RobotController kelas publik: MonoBehaviour {// Ini akan menjadi kecepatan maksimum kami karena kami akan selalu dikalikan dengan 1 float publik maxSpeed ​​= 2f; // nilai boolean untuk mewakili apakah kita menghadap ke kiri atau tidak bool facingLeft = true; // nilai untuk mewakili Animator Animator anim kami; // untuk memeriksa ground dan untuk memiliki jumpforce kita dapat mengubah di editor bool grounded = false; Transformasi groundCheck publik; float groundRadius = 0.2f; LayerMask publik whatIsGround; public float jumpForce = 700f; // Gunakan ini untuk inisialisasi batal Mulai () {// atur anim ke animator kami anim = GetComponent (); } membatalkan FixedUpdate () {// atur vSpeed ​​anim.SetFloat kami ("vSpeed", rigidbody2D.velocity.y); // atur bool grounded kami grounded = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround); // atur ground di Animator kami untuk mencocokkan anim.etetool yang di-ground ("Ground", grounded); float move = Input.GetAxis ("Horizontal"); // Memberi kita satu jika kita bergerak melalui tombol panah // pindahkan Pemain rigidbody rigidbody2D.velocity = Vector3 baru (move * maxSpeed, rigidbody2D.velocity.y); // tetapkan anim.SetFloat kecepatan kami ("Kecepatan", Mathf.Abs (bergerak)); // jika kita bergerak ke kiri tetapi tidak menghadap ke flip kiri, dan sebaliknya jika (pindah 0 && facingLeft) {Balik (); }} batal Pembaruan () {// jika kita berada di tanah dan bilah spasi ditekan, ubah status tanah kita dan tambahkan gaya ke atas jika (ground && Input.GetKeyDown (KeyCode.Space)) {anim.SetBool (" Tanah ", salah); rigidbody2D.AddForce (Vector2 baru (0, jumpForce)); }} // flip jika perlu void Flip () {facingLeft =! facingLeft; Vector3 theScale = transform.localScale; theScale.x * = -1; transform.localScale = theScale; }} 
Kembali lagi ke Script Pengendali Robot di Inspektur, dan pastikan untuk mengatur Apa Tanah untuk segalanya kecuali pemain. Pilih semuanya, lalu buka dialog lagi, dan hapus pilihan Player. (Terima kasih c0)

Pada langkah berikutnya kita akan membuat pohon campuran Animator untuk menangani melompat dan jatuh.



Langkah 8: Buat Blend Tree Animation

Mari kita membuat pohon campuran untuk menahan kondisi jatuh / melompat kita yang berbeda. Kami dapat melakukan animasi terpisah untuk keduanya, tetapi ini lebih efisien dan membutuhkan lebih sedikit untuk game kecil kami. Plus itu keren. (Apakah saya menyebutkan bahwa Unity menyelenggarakan beberapa materi pembelajaran yang hebat?)

Kembali ke jendela animasi pemain Anda, dengan objek Player Anda dipilih buat 5 klip animasi baru, beri nama jump1 -jump5.

Untuk setiap klip, seret satu frame dari lembar lompat, secara berurutan. yaitu jumpsheet gambar pertama ke jump1, dan sebagainya.

Buka jendela Animator lagi, klik kanan, buat ... baru dari pohon lunak. Beri nama JumpFall.
Klik dua kali pada negara JumpFall baru, membuka pohon campuran di inspektur.

Klik tanda tambah kecil dan bidang Tambahkan Gerakan, lakukan ini lima kali.

Ubah Threshold ke rentang dari -13 hingga 10, dan ubah parameter threshold menjadi vSpeed.

Jika Anda tidak puas dengan animasi, Anda dapat mengubah nilai dengan menghapus centang Ambang Batas Otomatis. Untuk game sederhana ini, sepertinya cukup bagus. (Animator malas ... lagi)

Sekarang kembali ke jendela Animator, Anda akan melihat pohon campuran terbuka, klik Base Layer di sudut kiri atas untuk kembali ke status dasar kami.

Anda juga harus menghapus semua status lompatan yang dihasilkan secara otomatis, Jump1 hingga Jump5 sekarang. (Terima kasih c0)

Buat Transisi dari Status Apa Saja ke status JumpFall baru, dan kemudian dari JumpFall ke idle. Ini berarti bahwa kita dapat masuk ke animasi lompat dari negara manapun, yaitu jika kita jatuh.

Setel transisi dari Any State ke JumpFall untuk menjadi saat Ground salah, dan transisi dari JumpFall ke idle ke saat ground benar.

Semua selesai, jalankan game lagi dan Anda harus dapat membuat Robot melompat dan hidup dengan space bar. Animasi ini sedikit tersentak karena kurangnya bingkai, Anda dapat bermain dengan bidang gerak untuk mengubahnya sedikit jika Anda suka.

Langkah 9: Penghancur

Dalam langkah-langkah yang akan datang, kita akan membuat objek yang menelurkan lebih banyak objek dan tanpa beberapa pembersihan, permainan kita akan dengan cepat menjadi macet. Dengan mengingat hal itu, kami akan membersihkan dengan menempatkan beberapa objek di luar layar untuk menghancurkan objek saat mereka meninggalkan area bermain.

Gim kami akan menjadi penggulung samping, jadi kami akan menempatkan satu di bawah layar untuk menangkap objek yang jatuh (seperti Player) dan satu dari layar ke kiri untuk membersihkan apa pun yang telah digulir oleh.

Mulailah dengan membuat quad. Klik GameObject -. Buat yang lain -> Quad. Ubah posisi transform ke x ke -25 dan y ke 0. Kemudian atur skala transformasi sehingga X adalah 1 dan y adalah 25.

Beri nama objek quad nama keren, seperti Destroyer Hapus komponen Mesh Collider dan tambahkan kotak 2D collider, tapi kali ini centang kotak bertanda "Is Trigger".

Juga tambahkan benda tegar 2D ke dalamnya, tetapi atur skala gravitasi di jendela Inspektur menjadi nol.

Di area kerja proyek, buka folder skrip Anda, dan tambahkan skrip C # baru, beri nama Destroyer. Klik dua kali dan buka Monodevelop.

Masukkan kode berikut ke dalam skrip baru dan simpan.

 menggunakan UnityEngine; menggunakan System.Collections; Destroyer kelas publik: MonoBehaviour {// Gunakan ini untuk inisialisasi batal Mulai () {} batal OnTriggerEnter2D (Collider2D lainnya) {// jika objek yang memicu peristiwa tersebut diberi tag pemain if (other.tag == "Player") {Debug .Break (); kembali; } if (other.gameObject.transform.parent) {Hancurkan (other.gameObject.transform.parent.gameObject); } else {Hancurkan (other.gameObject); }}} 

Seret skrip Destroy ke objek Destroyer.
Sekarang klik kanan pada objek Destroyer di jendela Hierarchy, dan pilih Duplicate. Ubah transformasi Destroyer baru menjadi di posisi x = 0, y = -15, dan skala ke x = 50 dan y = 1.

Jika Anda menjalankan game Anda sekarang, dan berjalan keluar dari platform (ingat, ada penghalang yang tidak terlihat di sebelah kiri), itu harus menghentikan sementara permainan dan membawa Anda kembali ke editor.

Kami akan memperbaikinya di langkah selanjutnya.

Hal terakhir yang harus dilakukan dengan objek Destroyer kami adalah menjadikan mereka anak-anak dari objek kamera, karena kami ingin mereka mengikuti atau mereka tidak akan melakukan banyak hal sama sekali. Untuk melakukan ini, pilih dan seret ke objek Kamera Utama.

Langkah 10: Tangan

Tangan yang menarik garis cukup sederhana. Mari kita membuatnya.

Pertama-tama tarik sprite tangan ke jendela adegan Anda, posisikan dengan menggunakan objek kamera Anda untuk melihat di mana dalam adegan itu duduk.

Ubah skala jadi x = 2 dan y = 2.

Buat objek game baru yang kosong, dan beri nama Penciltip. Gunakan editor adegan untuk menempatkannya di ujung pensil.

Berikan tag kecil agar Anda dapat menemukannya dengan mudah jika perlu. Lakukan ini dengan mengklik ikon kubus kecil di Inspektur.

Sekarang seret Penciltip ke objek tangan untuk memasangkannya. Terakhir, seret objek tangan ke Kamera Utama di jendela Hierarki.

Belum melakukan apa-apa, tetapi potongan sudah ada. mari kita atur beberapa bit lain yang kita perlukan.

Langkah 11: Garis Pensil

Sebuah cetakan adalah seperti rekaman suatu objek, Anda membuat objek menjadi cetakan dan dapat menggunakannya sesuka hati dalam adegan Anda.
Kami akan menggunakannya untuk banyak sisa permainan, karena level dihasilkan secara terprogram.

Mulailah dengan membuat folder baru di folder Aset, dan namai Prefab. Buat Prefab baru dengan mengklik kanan dan memilih Prefab. Beri nama pensil cetakan cetakan baru.

Temukan sprite yang disebut pencilline di folder sprite, dan seret ke gameObject baru di jendela hierarki.

Tambahkan kotak collider 2D dan ubah ukurannya agar pas dengan gambar pensil.0, 03 kali 0, 05.

Buka folder Prefab Anda, lalu seret GameObject ke prefab. Ikon akan berubah agar sesuai dengan cetakan awal yang baru.

Hapus objek gim setelah Anda memasukkannya ke dalam cetakan. Kami tidak perlu lagi yang asli.

Sekarang tambahkan skrip C # baru ke folder Skrip Anda, sebut saja itu pencilline. Buka dan masukkan skrip berikut.

 menggunakan UnityEngine; menggunakan System.Collections; pencilline kelas publik: MonoBehaviour {// untuk merujuk pada objek GameObject publik cetakan prefab kami; float lastx = 0f; // Gunakan ini untuk inisialisasi batal Mulai () {} // Pembaruan disebut sekali per bingkai batal Pembaruan () {// jika kita telah bergerak cukup jauh, buat pensil baru if (transform.position.x> (lastx + 0.02f )) {Instantiate (obj, transform.position, Quaternion.identity); lastx = transform.position.x; lastx = transform.position.x; }}} 
Seret skrip ke objek penciltip di Tangan. Kemudian dengan penciltip masih dipilih, buka folder prefab Anda dan seret prefab pensil Anda ke parameter obj baru pada pengontrol skrip Anda.

Kamera kami masih tidak memiliki skrip kontrol, tetapi jika Anda menjalankan permainan, Anda akan melihat satu objek pensil yang dihasilkan di ujung pensil. Anda dapat melihatnya karena latar belakang berwarna biru dan garis dibuat untuk latar belakang putih.

Langkah 12: Gulung Kamera!

Mari kita mulai menggulung Kamera.
Objek Kamera semuanya dibuat, jadi kita benar-benar hanya membutuhkan skrip pengontrol.

Hanya satu perubahan kecil sebelum kita menulis skrip. Warna latar belakang. Itu harus berwarna putih, garis akan terlihat rapuh jika tidak, belum lagi posting yang dicatat jika Anda memutuskan untuk menggunakannya.

Cukup pilih kamera utama di jendela hierarki, dan klik contoh warna di Inspektur, pemilih warna akan muncul. Pilih putih.

Oke, skrip baru, saya panggil pancam milik saya. Buat satu di folder skrip Anda dan buka di Monodevelop, dan masukkan yang berikut ini.

 menggunakan UnityEngine; menggunakan System.Collections; pancam kelas publik: MonoBehaviour {float ydir = 0f; pemain GameObject publik; // Gunakan ini untuk inisialisasi // Perbarui disebut sekali per bingkai batal Pembaruan () {// periksa bahwa ada pemain dan kemudian lanjutkan. kalau tidak, kita mendapatkan kesalahan ketika pemain mati jika (pemain) {// jika pemain telah melewati posisi x -1 kemudian mulai bergerak kamera ke depan dengan posisi Y acak jika (player.transform.position.x> -1) {float randy = 0f; randy = Random.Range (0f, 100f); if (randy 20 && randy 80) {ydir = 0f; } transform.position = Vector3 baru (transform.position.x + 0.03f, transform.position.y + ydir, -10); }}}} 
Sekarang Anda hanya perlu menerapkan skrip ke Kamera Utama Anda dalam hierarki, dan kemudian seret objek Player ke parameter skrip.

Coba permainan lagi, Anda baru saja membuat pelari tanpa batas !!! Hampir saja. Kami masih membutuhkan beberapa hal, tetapi semakin dekat sekarang.

Tangan saya hanya sedikit lebih tinggi dari yang saya inginkan, tetapi saya hanya akan mendorongnya sedikit di editor adegan.

Langkah 13: Tambahkan Skor

Tambahkan objek GUIText baru dari menu GameObject dan beri nama Score.

Ubah nilai Teks menjadi Skor dan warna menjadi hitam di Inspektur.
Buka jendela Game, jika tidak tersedia, Anda dapat menemukannya di bawah Window pull down di bagian atas.

Sesuaikan posisi Transform, itu bekerja aneh untuk objek GUI untuk beberapa alasan, anggap itu sebagai persen dari layar yang dapat dilihat, di mana 0, 5 adalah 50% dan 0, 0 adalah sudut kiri bawah.
X = 0, 3 dan y = 0, 97 menempatkannya tepat di dekat bagian atas di sudut kiri.

Sekarang kita perlu menambahkan sedikit kode ke skrip Kamera kita. Perbarui skrip dengan perubahan tesis ini.
 menggunakan UnityEngine; menggunakan System.Collections; pancam kelas publik: MonoBehaviour {float ydir = 0f; pemain GameObject publik; // untuk objek GUIText kami dan gui GUIElement publik skor kami; float playerScore = 0; // fungsi ini memperbarui objek guitext kami membatalkan OnGUI () {gui.guiText.text = "Nilai:" + ((int) (playerScore * 10)). ToString (); } // ini adalah fungsi generik yang dapat kita panggil untuk meningkatkan skor dengan jumlah publik batal meningkatScore (jumlah int) {playerScore + = jumlah; } // Pembaruan disebut sekali per frame batal Pembaruan () {// periksa bahwa ada pemain dan kemudian lanjutkan. jika tidak, kita mendapatkan kesalahan ketika pemain mati jika (pemain) {// jika pemain telah melewati posisi x -1 kemudian mulai bergerak kamera ke depan dengan posisi Y acak jika (player.transform.position.x> -1) {/ / Perbarui skor kami setiap centang jam, pemainScore + = Time.deltaTime; float randy = 0f; randy = Random.Range (0f, 100f); if (randy 20 && randy 80) {ydir = 0f; } transform.position = Vector3 baru (transform.position.x + 0.03f, transform.position.y + ydir, -10); }}}} 

Simpan skrip pancam dan kembali ke persatuan.

Pilih Kamera Utama lagi, dan Anda akan melihat bahwa parameter baru tersedia di komponen Script di Inspektur. Seret objek Skor GuiText ke parameter Gui.

Coba mainkan lagi, seharusnya skor kamu sudah naik.

Langkah 14: Membom

Belum ada bahaya nyata bagi pahlawan kita. Kami akan memperbaikinya. Mari kita membuat beberapa bom kartun jatuh dari langit dan memecahkan garis.

Buat objek game baru yang kosong, dan beri nama Bomb. Di folder sprite, temukan bom sprite, buka dan tambahkan frame pertama ke Bomb. Sesuaikan skala transformasi ke X = 0, 5, Y = 0, 5.

Tambahkan 2D lingkaran collider dan ubah skala dan posisinya agar terlihat bagus. Kami ingin bom jatuh, jadi kami juga akan membutuhkan 2D benda tegar, tambahkan komponen itu juga.

Kami juga membutuhkan Animator untuk mengendalikan keadaan bom kami, jadi tambahkan juga. Hapus centang Terapkan Root Motion dan centang kotak Animate Physics di Inspektur.

Buka jendela animasi, pastikan Anda masih memiliki Bomb_0 dari bom yang masih dipilih. Tambahkan animasi dan sebut itu bombidle, ini akan membuat status default baru di Animator kami. Gunakan 3 frame pertama dari sprite sheet (seret dan lepas) dan kemudian kurangi kecepatan frame dengan menjatuhkan Sample ke sekitar 20.

Buat klip baru lainnya, panggil ini satu bombexplode dan gunakan frame yang tersisa dari lembar sprite bom. Sekali lagi, kurangi framerate menjadi sekitar 20.

Turun di jendela Animator, buat transisi dari bombidle ke bombexplode, biarkan kondisi untuk waktu keluar dan ubah nilainya menjadi 5, 00. Ini berarti bom kami akan tetap idle (menyala sekering) selama 5 detik sebelum mengubah status menjadi meledak.

Buat animasi ketiga di jendela Animasi, sebut saja bombdead dan biarkan kosong. Di Animator, buat transisi dari bombexplode ke bombdead.

Buat skrip baru yang disebut bomb di folder skrip Anda.

 menggunakan UnityEngine; menggunakan System.Collections; bom kelas publik: MonoBehaviour {// pemegang animator Animator kami; // float publik untuk radius ledakan float publik explodeRadius = 1f; // Gunakan ini untuk inisialisasi batal Mulai () {anim = GetComponent (); } // Pembaruan disebut sekali per frame batal Pembaruan () {// jika kita selesai meledak if (anim.GetCurrentAnimatorStateInfo (0) .IsName ("bombdead")) {// hancurkan semua objek dalam radius kecuali mereka Tagged Player atau tangan Collider2D [] colliders = Physics2D.OverlapCircleAll (transform.position, explodeRadius); foreach (Collider2D col in colliders) {if (col.tag! = "Player" && col.tag! = "hand") {Hancurkan (col.collider2D.gameObject); }} Hancurkan (this.gameObject); }}} 
Terakhir, seret skrip bom ke objek bomb_0 Anda.

Satu hal kecil yang saya hampir lupa, adalah menandai tangan sebagai tangan. untuk melakukan ini, pilih objek tangan Anda di jendela hierarki, dan kemudian di bawah tag, pilih tambahkan tag. Buat tag baru di elemen0 bernama tangan, lalu dengan objek tangan Anda dipilih, ubah tag ke tangan. Juga ganti tag objek penciltip ke tangan.

Coba jalankan gamenya, bomnya harus jatuh, meledak, dan keluarkan navbar. (tergantung tentu saja di mana Anda memposisikannya)

Langkah 15: Pemijahan Bom

Agak sulit untuk memainkan permainan sekarang, apa yang akan kita lakukan adalah membuat objek untuk menelurkan bom, sangat mirip dengan penciltip memunculkan pensil.

Hal pertama yang kita butuhkan adalah Prefab bom kita. Arahkan ke folder cetakan dan buat cetakan baru, beri nama itu bom. Seret objek Bom ke dalam prefab bom. Hapus Objek Bom asli dalam hierarki setelah Anda memilikinya sebagai Prefab.

Buat nama objek quad baru itu BombSpawn. Posisikan di atas verifikasi kamera di tampilan Kamera Utama atau di jendela Game.

Buat skrip baru di folder skrip Anda yang disebut BombSpawner, dan berikan kode berikut.

 menggunakan UnityEngine; menggunakan System.Collections; kelas publik BombSpawner: MonoBehaviour {// array objek publik yang objeknya akan menelurkan GameObject [] obj publik; // mnt dan waktu maks untuk pemunculan publik lainnya spawnMin = 3f; public float spawnMax = 2f; membatalkan Start () {// start spawn Spawn (); } membatalkan Spawn () {// dapatkan angka acak float rand = Random.Range (0, 1000); // jika angka acak lebih besar dari 700 buat bom jika (rand> 700) {Instantiate (obj [Random.Range (0, obj.GetLength (0))], transform.position, Quaternion.identity); } // aktifkan spawn pada interval waktu acak antara min dan max Invoke ("Spawn", Random.Range (spawnMin, spawnMax)); }} 
Pertama-tama buatlah objek BombSpawn sebagai anak dari Kamera Utama dengan menyeretnya ke kamera melalui jendela hierarki.
Sekarang seret skrip ke objek BombSpawn di jendela Hierarchy. Sekarang dengan BombSpawn dibuka di Inspektur, seret prefab Bom ke segitiga kecil berlabel Obj di komponen skrip.

Kami harus menambahkan pernyataan if di dalam naskah Bom kami (dari langkah terakhir) untuk menunda bom yang jatuh sampai setelah pemain mulai berjalan di telepon. Pemeriksaan cepat di adegan saya menunjukkan tangan duduk di 7.something jadi saya akan menunda tetes sampai bom melewati 12.
Berikut adalah skrip Bom yang dimodifikasi.

 bom kelas publik: MonoBehaviour {// pemegang animator Animator kami; // float publik untuk radius ledakan float publik explodeRadius = 1f; // Gunakan ini untuk inisialisasi batal Mulai () {anim = GetComponent (); } // Pembaruan disebut sekali per frame batal Pembaruan () {// jika bom ini muncul setelah spawner mencapai posisi melewati x = 12 if (transform.position.x> 12) {this.gameObject.SetActive (true) ; } // jika tidak bom tidak ada pekerjaan lain {this.gameObject.SetActive (false); } // jika kita selesai meledak if (anim.GetCurrentAnimatorStateInfo (0) .IsName ("bombdead")) {// hancurkan semua objek dalam radius kecuali mereka ditandai dengan Player atau tangan Collider2D [] colliders = Physics2D.OverlapCircleAll ( transform.position, explodeRadius); foreach (Collider2D col in colliders) {if (col.tag! = "Player" && col.tag! = "hand") {Hancurkan (col.collider2D.gameObject); }} Hancurkan (this.gameObject); }}} 
Sekarang Robot dapat melompat pada garis dan berjalan sedikit sebelum bom mulai jatuh ... coba. Masih tidak terlalu menantang. Mari kita duplikat objek BombSpawn !! Lalu, gerakkan sedikit dan kita punya dua peledak bom, ayo kita mainkan.

Langkah 16: Platform (atau Corat-coret)

Untuk menghasilkan platform doodle, kita mulai dengan membuat beberapa cetakan. Buat folder baru di folder Prefab dan beri nama Doodles.

Buat 10 prefab baru bernama doodle1 ke doodle10.

Buat objek game baru yang kosong, tidak perlu menyebutkannya.

Buka folder sprite dan temukan lembar orat-oret, buka dan pilih orat-oret pertama. Seret ke objek game kosong di jendela hierarki.

Tambahkan kotak collider 2D ke dalam inspektur, lalu mainkan dengan skala dan pusat untuk membuatnya duduk dengan baik di orat-oret. Ingat, inilah tujuan Robot akan mendarat.

Buka folder Rak itan / Doodles Anda dengan cetakan kosong di dalamnya, lalu seret GameObject baru ke dalam cetakan doodle1.

Sekarang, daripada mengulangi seluruh proses ini, cukup arahkan kembali ke folder sprite, ambil orat-oret berikutnya, dan seret ke dalam komponen Sprite Renderer dari Obyek Game, sesuaikan posisi collider dan masukkan ke dalam prefab doodle berikutnya.

Ulangi ini untuk cetakan awal doodle yang tersisa. Setelah semuanya direkam sebagai cetakan, Anda dapat menghapus GameObject yang kami buat untuk membuatnya.

Sekarang Gandakan objek BombSpawn di bawah kamera Utama kami, dan pindahkan dari layar ke kanan. Berikan nama baru di Inspektur, sesuatu seperti DoodleSpawn.

Kemudian seret setiap prefab baru ke parameter Obj dari komponen skrip kami. Seret yang pertama ke elemen 0 untuk mengganti bom, dan yang lainnya ke segitiga kecil di samping Obj untuk menambahkannya ke daftar.

Mainkan dengan parameter min / maks dalam komponen skrip untuk mengubah seberapa sering mereka dihasilkan. Gandakan objek DoodleSpawn dan naikkan jika Anda ingin set level lainnya.

Satu hal yang saya perhatikan saat bermain adalah bahwa kecepatan maksimum Robot terlalu rendah, saya meningkatkannya di sini. Pergi ke objek Player Anda dan sesuaikan variabel maxSpeed ​​dalam komponen Script jika Anda menemukan masalah yang sama.

Langkah 17: Pengambilan Poin Bonus

Membuat Pickup sangat mirip dengan membuat coretan. Beberapa perbedaan kecil. Mulailah dengan membuat folder baru di folder Rak itan yang disebut Bonus, dan isi dengan 6 rak itan kosong.

Kami akan membutuhkan skrip untuk menangani penambahan poin bonus ke objek GUIText, jadi di folder skrip, buat skrip baru yang disebut BonusPoints. Berikut ini skrip yang harus dimasukkan di Monodevelop.

 menggunakan UnityEngine; menggunakan System.Collections; BonusPoints kelas publik: MonoBehaviour {// membuat wadah untuk menampilkan pancam hud; membatalkan OnTriggerEnter2D (Collider2D col) {if (col.tag == "Player") {hud = GameObject.Find ("Kamera Utama"). GetComponent (); hud.increaseScore (10); Hancurkan (this.gameObject); }}} 

Sekarang kembali ke tempat kejadian dan buat GameObject kosong baru. Temukan powerups di folder sprite, dan seret sprite pertama ke GameObject baru.

Ubah skala menjadi x = 2, y = 2 di inspektur, lalu tambahkan kotak 2D collider. Kali ini kami ingin mencentang kotak bertanda Is Trigger.

Sekarang seret skrip BonusPoints ke dalam powerups_0. Buka folder cetakan / bonus dan seret GameObject ke dalam cetakan.

Seperti pada langkah sebelumnya, cukup ganti Sprite Renderer Sprite untuk setiap cetakan dan simpan.

Setelah enam Bonus Prefab dibuat, kami dapat menghapus GameObject yang kami gunakan untuk membuatnya.

Untuk menelurkan bonus kami, kami hanya akan menduplikasi objek DoodleSpawn, ganti namanya BonusSpawn, naikkan sedikit dan ganti objek yang ditimbulkannya.

Langkah 18: Game Over

The home stretch!! All we need now is for the player to die rather than a break in the code. That, and we'll need a second scene, to display that the game has ended and offer the chance to play again.

Lets add this scene to the build before we start the new scene. In the File pulldown menu, select Build Settings.
In the dialog box that opens up, click the Add Current button, and verify that the scene has a scene # of zero. Close the dialog box.

Make sure you save your current scene and then select New Scene. Name the scene GameOver and put it in the Assets folder.

Add a GUIText object from the GameObject pulldown menu. In the inspector, change Anchor to upper center and alignment to center. Also change the font size to 20 and the color to black.

Back in the scene, drag the sticky note called notes_score to the scene and position it roughly center, use the Game window to see how it will look. Do the same with the Game Over sprite, just drop it where it looks good.

Create a gameOver script in the script folder, like this one.

 using UnityEngine; using System.Collections; public class GameOver : MonoBehaviour { int score = 0; public GUIElement gui; // Use this for initialization void Start () { //get our score from playerprefs score = PlayerPrefs.GetInt ("Score"); //multiply by 10 as we did on displayed score score = score * 10; } void OnGUI(){ //set our text to our score gui.guiText.text = score.ToString (); //if retry button is pressed load scene 0 the game if(GUI.Button(new Rect(Screen.width/2-50, Screen.height/2 +150, 100, 40), "Retry?")){ Application.LoadLevel(0); } //and quit button if(GUI.Button(new Rect(Screen.width/2-50, Screen.height/2 +200, 100, 40), "Quit")){ Application.Quit(); } } } 

Simpan dan seret ke Kamera Utama di adegan baru kami.

Hampir semua selesai, kita perlu menambahkan fungsi ke skrip kamera kami untuk meneruskan skor, dan kita perlu mengubah skrip perusak kami di mana kami memiliki istirahat kode untuk mengirim kami ke adegan GameOver.

Skrip Kamera baru.

 menggunakan UnityEngine; menggunakan System.Collections; pancam kelas publik: MonoBehaviour {float ydir = 0f; pemain GameObject publik; // untuk objek GUIText kami dan gui GUIElement publik skor kami; float playerScore = 0; // fungsi ini memperbarui objek guitext kami membatalkan OnGUI () {gui.guiText.text = "Nilai:" + ((int) (playerScore * 10)). ToString (); } // ini adalah fungsi generik yang dapat kita panggil untuk meningkatkan skor dengan jumlah publik batal meningkatScore (jumlah int) {playerScore + = jumlah; } // Kamera akan dinonaktifkan ketika kita memuat level, atur skor dalam playerprefs void OnDisable () {PlayerPrefs.SetInt ("Score", (int) (playerScore)); } // Pembaruan disebut sekali per frame batal Pembaruan () {// periksa bahwa ada pemain dan kemudian lanjutkan. kalau tidak, kita mendapatkan kesalahan ketika pemain mati jika (pemain) {// jika pemain telah melewati posisi x -1 kemudian mulai bergerak kamera ke depan dengan posisi Y acak jika (player.transform.position.x> -1) {/ / Perbarui skor kami setiap centang jam, pemainScore + = Time.deltaTime; float randy = 0f; randy = Random.Range (0f, 100f); if (randy 20 && randy 80) {ydir = 0f; } transform.position = Vector3 baru (transform.position.x + 0.03f, transform.position.y + ydir, -10); }}}} 

Skrip Destroyer yang diperbaiki

 menggunakan UnityEngine; menggunakan System.Collections; Destroyer kelas publik: MonoBehaviour {void OnTriggerEnter2D (Collider2D lainnya) {// jika objek yang memicu peristiwa tersebut ditandai pemain if (other.tag == "Player") {Application.LoadLevel (1); } if (other.gameObject.transform.parent) {Hancurkan (other.gameObject.transform.parent.gameObject); } else {Hancurkan (other.gameObject); }}} 

Tebak apa? Anda baru saja membuat game! Saya juga melakukannya !! woot untuk kita!
Ok, jadi ini bukan game terbaik di dunia, tapi itu bukan intinya. Setidaknya itu bukan untukku. Saya terkejut melihat betapa sederhananya semua ini, dan saya harus berbagi. Pergi berkreasi, saya tidak sabar untuk memainkan beberapa game keren baru!

Langkah 19: File, Dll

Saya menyertakan langkah terakhir ini untuk membuat skrip yang baru saja kami tulis menjadi sedikit lebih mudah diakses.
Jadi di sini adalah skrip yang baru saja kita lalui.

Terima kasih banyak untuk mampir, saya harap Anda menikmatinya seperti saya.
Bagikan dan nikmati.

Oh dan ...... pilih fjordcarver?

Lampiran

  • bomb.zip Unduh
  • Unduh BombSpawner.zip
  • Unduh BonusPoints.zip
  • Destroyer.zip Unduh
  • Unduh GameOver.zip
  • Unduh pancam.zip
  • Download pencilline.zip
  • Unduh RobotController.zip

Artikel Terkait