Buat Permainan Video 2D Dengan Perpaduan

Dalam Pengajaran ini, saya akan menunjukkan kepada anda untuk membuat permainan Video 2D yang sangat mudah. Ia adalah permainan gaya pelari tak terhingga, seperti "Fly with Me" atau "DoodleJump".

Cuba di sini !!

Saya telah menyediakan zip dari exe permainan saya akan menunjukkan kepada anda bagaimana untuk membuat. Muat turun dan cuba.

Ia sepenuhnya tidak lengkap sehinggalah permainan berlangsung, tetapi telah melayan saya sebagai peluang yang hebat untuk mempelajari sedikit skrip C # dan untuk memperkuat pengetahuan Perpaduan saya telah mengambil sejak memuat turunnya dua minggu lalu. Untuk tujuan berkongsi, saya memutuskan untuk menggunakan Robot yang sangat disukai oleh Instructables sebagai watak utama. Saya pergi mencari rupa yang sederhana dalam penghormatan kepada kartun-kartun zaman dahulu yang dilakukan dalam gaya yang sama. Saya selalu suka apabila pensil berinteraksi dengan kartun itu.

Saya harus mengatakan bahawa Perpaduan adalah alat yang luar biasa. Terdapat banyak maklumat yang terdapat dalam seksyen pembelajaran laman Perpaduan, saya sangat mengesyorkan memberi pandangan melalui sebaik sahaja anda melihat betapa mudahnya untuk memulakan permainan 2D.

Semua yang saya tunjukkan di sini, saya belajar dari laman Unity, mereka mempunyai beberapa tutorial dan sesi latihan video yang hebat.

Saya baru kepada Perpaduan yang anda mungkin atau mungkin tidak, jadi ini hanya untuk berkongsi cita rasa alam sekitar dan pengalaman pembelajaran saya setakat ini.

Saya akan menyediakan aset sprite untuk setiap langkah supaya anda dapat mengikuti, dan membuat permainan itu sendiri. Saya cadangkan tidak menggunakan kod saya seperti yang ada, tetapi sebaliknya mengikuti dan menulis versi skrip anda sendiri.

Saya mempunyai sedikit pengaturcaraan pengalaman dalam C, namun skripnya dalam C # cukup cepat .... ia mengingatkan saya banyak Arduino dan Pemprosesan yang hebat, yang saya kenal.

Jadi walaupun anda tidak mempunyai kebiasaan dengan pengaturcaraan, saya percaya anda boleh melakukan ini juga. Sekurang-kurangnya mengikuti pengembaraan saya untuk melihat betapa mudahnya.

Langkah 1: Muat turun Perisian Unity Percuma

Bascillay Perpaduan cukup baik untuk membiarkan orang-orang kita yang ingin kita dapat masuk ke dalam permainan, mengambil tekad untuk belajar secara percuma, selagi kita tidak membuat apa-apa wang dengan produk yang kita gunakan menggunakan perisian mereka. Awesome. Terima kasih banyak sekali, untuk dorongan dan kebebasan untuk mencubanya, dan untuk perisian yang luar biasa.

Jika anda merancang untuk mengikuti, anda perlu pergi ke Laman Utama Perpaduan dan muat turun versi perisian percuma.
Anda juga perlu membuat Log masuk Perpaduan, hanya ikuti langkah selepas memasang.

Langkah 2: Terbuka Perpaduan

Jika pembukaan kali pertama anda Perpaduan, anda akan dibentangkan dengan kotak dialog untuk membuat projek baru. Layari ke lokasi yang sesuai, dan berikan projek anda nama, seperti "Iblejump".
Adalah sangat penting untuk menyemak pemilihan 2D di bahagian bawah borang di mana ia mengatakan "Setup Defaults For".

Anda tidak perlu mengimport sebarang pakej untuk permainan yang akan kami buat. Saya akan menasihatkan tidak mengganggu mereka melainkan anda memerlukannya untuk permainan anda. Tidak masuk akal termasuk pukal tambahan untuk membina fail kami.

Apabila anda telah membuat pilihan yang betul, teruskan dan tekan 'buat'.

Sekarang Perpaduan Editor akan membuka projek kosong kami dan membawakan kami dengan pop selamat datang yang baik. Mari tutup bahawa untuk sekarang dan meneroka antara muka sedikit.

Kawasan kerja dibahagikan kepada empat bahagian yang berbeza, yang boleh diatur mengikut alur kerja anda.

Tetingkap hierarki di sebelah kiri menunjukkan kepada anda semua objek yang sedang berada di tempat kejadian anda. Tetingkap tempat kejadian adalah tempat kami membina dan meletakkan objek permainan kami.

Di bawah ini kita mempunyai satu lagi kawasan kerja di mana anda boleh berlabuh tab yang berbeza. Kebanyakan tab boleh disambung ke kawasan yang anda selesaikan. Ini adalah bagaimana saya menetapkan kawasan saya, anda mungkin melakukan perkara yang agak berbeza. Perkara utama yang perlu diberi perhatian adalah bahawa anda boleh mengakses semua tetingkap ini dari menu tarik turun tetingkap, dan menambah atau tolaknya sebagai perlu. anda tidak perlu risau jika tetingkap anda tidak kelihatan sama. Saya akan menunjukkan kepada anda setiap kawasan yang akan kami gunakan dengan lebih terperinci apabila kami pergi.

Buat masa ini hanya klik pada "Main Kamera" supaya anda dapat melihat apa yang berlaku di sebelah kanan di tetingkap Inspektor dan adegan.
Perhatikan bagaimana anda kini mempunyai pratonton adegan kosong anda di sudut bawah tetingkap tempat kejadian, dan semua komponen dan nilai harta untuk kamera terdedah.

Langkah 3: Buat Objek Permainan Pertama Anda


Mula-mula anda perlu folder Sprite yang telah saya sertakan sebagai fail zip. Ekstrak folder ke tempat yang anda boleh cari.

Dalam Perpaduan, di bawah kawasan kerja projek, di bawah tab projek, dengan Aset yang dipilih, tarik folder yang tidak terjejas ke kawasan kelabu di sebelah kanan. Semua sprite yang anda perlukan untuk menduplikasi projek saya berada dalam folder ini.

Navigasi ke folder Sprite baharu dan cari sprite bernama "navbar". Seret ke tetingkap Scene. Letakkannya di suatu tempat berhampiran bahagian bawah adegan anda, seperti yang telah saya lakukan dalam imej.

Jika anda mengklik Kamera Utama dalam tetingkap hierarki anda selepas meletakkannya, anda sudah dapat melihat bagaimana ia akan kelihatan dalam permainan anda.

Kita perlu menambah beberapa komponen, mari kita mulakan dengan kotak colllider, untuk menjadikan kotak kita pepejal.

Dengan objek baru anda dipilih, dalam Inspektor, klik pada "Tambah Komponen" dan kemudian tambah Kotak Collider 2D, yang terdapat di bawah Physics2D

Pergi ke Hadapan dan tambahkan 2D Collider Box kedua ke objek anda, yang akan kami gunakan untuk menyekat pemain dari sengaja jatuh dari sisi kanan navbar pada permulaan permainan.

Kerana saya mahukan Robot dimulakan di mana dia berada di halaman web Instructables, saya mengecilkan pelanggar utama sedikit. Dan collider kedua sebenarnya duduk di ruang terbuka, yang akan menghalang pemain kami lari dari sebelah kiri ketika permainan dimulai.

Sediakan pengikat kotak anda untuk memadankan saiz dalam imej, juga tetapkan saiz x dan y parameter transformasi menjadi 1.5. Tonton perubahan berlaku di tetingkap tempat kejadian.

Lampiran

  • Muat turun Sprites.zip

Langkah 4: Tambah Pemain

Sekarang bahawa kami mempunyai platform untuk pemain kami bertahan, kami memerlukan pemain.

Klik pada GameObject di bar menu atas, pilih buat kosong.

Pilih objek permainan kosong baru anda dalam tetingkap Hierarki, dan seterusnya dalam Inspektor, ubah namanya kepada Pemain.
Seterusnya menambah Component Renderer Sprite, didapati di bawah Rendering.

Dalam aset projek / folder sprite, cari Idle_Sprite, klik segitiga kecil di sebelahnya dan kemudian seret salah satu imej ke dalam nilai Sprite komponen penarik sprite.

Kami memerlukan beberapa lagi komponen untuk Pemain kami. Pertama tambahkan Rigidbody2D dari pilihan Physics2D.

Jika anda menekan butang mainan sekarang, Pemain kami akan jatuh melalui navbar. Pergi mencuba.

Kami akan memperbetulkannya dengan menambah beberapa penampung. Sedikit kaunter secara intuitif, kami akan menambah penjejak bulatan ke kaki dan badan kami, dan kotak kolider ke kepala kami.

Sekarang, jika kita tekan main, robot kecil kita akan menggulung ke belakangnya kerana robot robot yang ada di bawahnya. Betulkannya dengan memeriksa kotak semak Tetap Tetap, dan kemudian apabila anda menekan main, robot anda harus jatuh ke navbar dan berehat di sana dengan baik.

Dia agak besar untuk saya sukakan, jadi saya menukar saiznya untuk berubah menjadi .75 x dan .75 y.

Kemudian saya memancing dengan kedudukan navbar dan robot sehingga saya gembira.

Kini adalah masa yang baik untuk menyelamatkan adegan anda, memberikan nama yang terasa baik kepada anda dan simpannya.

Langkah 5: Tambah Beberapa Kehidupan untuk Robot

Okay, sekarang kita mempunyai objek pemain di tempatnya, kita boleh mula menambah beberapa animasi dan kefungsian kepadanya.

Dengan Objek Pemain dipilih, tambah Komponen Animator. Tambah Komponen -> Pelbagai -> Animator.
Nyahtandai "Memohon Pergerakan Akar", dan semak kotak "Animasi Fizik".

Sekarang buka tetingkap Animator anda. Anda boleh melakukan ini melalui tetingkap turun jika ia belum dibuka di kawasan kerja projek. Saya suka berlabuh di bawah.

Dengan Pemain masih dipilih dalam Hierarki, Buka tetingkap Animasi. Ia juga boleh didapati di Jendela tarik ke bawah. Saya suka berlabuh di kawasan yang sama seperti adegan dan tingkap permainan saya.

Dalam tetingkap Animasi, klik segitiga kecil kecil di sebelah "sampel" untuk membuat klip baru.

Turun di bawah, buka folder aset / sprite anda dan buka lagi sprit idle. Shift pilih keseluruhan siri imej dan seretnya ke tetingkap animasi.

Kerana animator (saya) murah pada bingkai, set semula saiz sampel hingga 10.

Sekarang perhatikan Animator anda, anda secara automatik akan mempunyai dua negeri yang ditambah, mana-mana keadaan, dan keadaan lalai baru, Idle. Warna oren memberitahu kita bahawa ia adalah keadaan animasi lalai.

Jika anda telah mengikuti langkah-langkah ini dengan betul, anda perlu mempunyai Robot animasi sekarang apabila anda menekan main.

Buat animasi lain dan panggil ia memandu. Gunakan helaian Spray Drive. Sekali lagi, turunkan kadar bingkai. Saya meletakkannya pada 20 sekarang. Anda boleh tweek kemudian ke citarasa anda.

Dalam tetingkap Animator, anda akan melihat bahawa keadaan kedua secara automatik dicipta. Hebat! Mari tambahkan parameter float bernama "Kelajuan" kepada Animator kami sebelum kita membuat peralihan.

Sekarang klik kanan pada keadaan Idle, dan pilih "buat Peralihan". Kemudian seret ke keadaan pemacu. Ini harus membuat bar panah kecil. pilih segitiga di tengah bar peralihan. Tukar keadaan peralihan di inspektor apabila Speed ​​lebih besar dari 0.01. Sekarang buat peralihan dari pemacu semula ke keadaan terbiar dengan keadaan Speed ​​kurang dari 0.01.

Seterusnya kita perlu membina skrip pengawal untuk Robot.

Langkah 6: Skrip Pengawal Robot

Sekarang bahawa kita mempunyai Pemain dengan beberapa keadaan animasi, kita memerlukan skrip untuk mengawal watak. Kami akan menambah skrip C # mudah ke projek kami untuk mengawal Pemain kami.

Dalam tetingkap Projek, buat folder baru dan sebut sebagai Skrip. Buka folder itu dan buat skrip C # baru, panggilnya RobotController.

Klik dua kali skrip untuk melancarkan MonoDevelop. Ia boleh mengambil masa untuk membuka, bersabar.
Masukkan kod berikut untuk bermula
 menggunakan UnityEngine; menggunakan System.Collections; RobotController kelas awam: MonoBehaviour {// Ini akan menjadi kelajuan maksimum kita kerana kita akan sentiasa didarab dengan 1 floating public maxSpeed ​​= 2f; // nilai boolean untuk mewakili sama ada kita menghadapi kiri atau tidak bool menghadapLeft = true; // nilai untuk mewakili Animator Sixator kami; // Gunakan ini untuk permulaan tidak sah Mula () {// set anim ke animator kami anim = GetComponent (); } // Kemas kini dipanggil sekali setiap bingkai tidak sah FixedUpdate () {float move = Input.GetAxis ("Horizontal"); // Memberi kami satu jika kami bergerak melalui tombol panah // memindahkan pemain kami tegar tegar2. Vektor3 baru (langkah * maxSpeed, rigidbody2D.velocity.y); // tetapkan kelajuan kami anim.SetFloat ("Kelajuan", Mathf.Abs (bergerak)); // jika kita bergerak ke kiri tetapi tidak menghadap flip kiri, dan sebaliknya jika (bergerak 0 && menghadapDiri) {Flip (); }} // flip jika diperlukan tidak sah Flip () {faceLeft =! facingLeft; Vector3 theScale = transform.localScale; theScale.x * = -1; transform.localScale = theScale; }} 

Simpan skrip dan kembali ke tetingkap Perpaduan. Seret skrip RobotController baru dari kerja projek ke objek Pemain dalam tetingkap Hierarki. Tekan butang main untuk menjalankan permainan dan anda harus dapat mengawal robot dengan kekunci anak panah kiri dan kanan. Sekiranya anda membuka tetingkap Animator di bawah permainan, anda harus melihat perubahan keadaan animasi dari pemacu untuk menganggur bergantung sama ada Robot bergerak atau tidak.

Langkah 7: Dapatkan Jumping - Skrip Pengawal Pemain Dilanjutkan

Hanya beberapa langkah untuk dilaksanakan untuk mendapatkan pemain kami melompat.
Kami akan memerlukan keadaan animasi untuk Melompat dan jatuh, dan juga beberapa lagi kod untuk mengawal perkara-perkara.

Mari bermula dengan menambah dua lagi parameter kepada Animator Player kami. Tambah apungan yang dinamakan `vSpeed` dan Bool dipanggil` Ground`. Kami akan menggunakan vSpeed ​​untuk memegang kelajuan menegak kami, dan Ground akan disediakan untuk membantu kami mengesan apabila watak kami berada di lapangan, membolehkan lompatan yang lebih realistik. (Melompat melalui udara tanpa menyentuh tanah adalah lebih seperti terbang).

Kembali dalam tetingkap tempat kejadian, buat Objek Permainan kosong yang baru. Panggil penjejakan tanah dan tambahkan Collider Circle 2D kepadanya.
Seret Collider baru ke objek Pemain dalam tetingkap Hierarki. Tukar jejari penjejak bumi kepada 0.1, dan tukar kedudukan transformasi y kepada -1. Ini meletakkan bulatan kecil sedikit di bawah kaki Robot. Juga tagkannya sebagai Pemain dan letakkan pada Lapisan Pemain.

Sekarang mari kita kemas kini scrip kami untuk menggunakan parameter baru kami dan letakkan kod itu di tempat untuk membuat Robot melompat apabila bar ruang ditekan.

Kemas kini skrip RobotController anda sebagai berikut.

 menggunakan UnityEngine; menggunakan System.Collections; RobotController kelas awam: MonoBehaviour {// Ini akan menjadi kelajuan maksimum kita kerana kita akan sentiasa didarab dengan 1 floating public maxSpeed ​​= 2f; // nilai boolean untuk mewakili sama ada kita menghadapi kiri atau tidak bool menghadapLeft = true; // nilai untuk mewakili Animator Sixator kami; / / untuk memeriksa tanah dan mempunyai jumpforce yang kita boleh tukar dalam bool editor grounded = false; awam Transform groundCheck; float groundRadius = 0.2f; awam LayerMask whatIsGround; melayari awam jumpForce = 700f; // Gunakan ini untuk permulaan tidak sah Mula () {// set anim ke animator kami anim = GetComponent (); } void FixedUpdate () {// set kami vSpeed ​​anim.SetFloat ("vSpeed", rigidbody2D.velocity.y); / / set kami mendatar bool berasaskan = Physics2D.OverlapCircle (groundCheck.position, groundRadius, whatIsGround); / / set bumi di Animator kami untuk memadankan anim.SetBool ("Ground", berasaskan); float move = Input.GetAxis ("Horizontal"); // Memberi kami satu jika kami bergerak melalui tombol panah // memindahkan Pemain kami tegar tegas2D.velocity = baru Vector3 (bergerak * maxSpeed, rigidbody2D.velocity.y); // tetapkan kelajuan kami anim.SetFloat ("Kelajuan", Mathf.Abs (bergerak)); // jika kita bergerak ke kiri tetapi tidak menghadap flip kiri, dan sebaliknya jika (bergerak 0 && menghadapDiri) {Flip (); }} void Update () {// jika kita berada di lapangan dan bar ruang ditekan, ubah keadaan dasar kita dan tambahkan daya ke atas jika (grounded && Input.GetKeyDown (KeyCode.Space)) {anim.SetBool (" Ground ", false); rigidbody2D.AddForce (Vector2 baru (0, jumpForce)); }} // flip jika diperlukan tidak sah Flip () {faceLeft =! facingLeft; Vector3 theScale = transform.localScale; theScale.x * = -1; transform.localScale = theScale; }} 
Kembali ke Skrip Pengawal Robot di Inspektor, dan pastikan untuk menetapkan Apa Ground kepada segala-galanya kecuali pemain. Pilih segalanya, kemudian buka dialog sekali lagi, dan tanggalkan Pemain. (Terima kasih c0)

Dalam langkah seterusnya kita akan mewujudkan pokok campuran Animator untuk mengendalikan melompat dan jatuh.



Langkah 8: Buat Animasi Pokok Campuran

Mari kita membuat pokok campuran untuk memegang keadaan jatuh / melompat yang berbeza. Kami boleh melakukan animasi yang berasingan untuk kedua-duanya, tetapi ini lebih cekap dan memerlukan kurang banyak untuk permainan kecil kami. Plus ia adalah sejuk. (Adakah saya menyebut bahawa Unity menjadi tuan rumah beberapa bahan pembelajaran yang hebat?)

Kembali ke tetingkap animasi pemain anda, dengan objek Pemain anda dipilih mencipta 5 klip animasi baru, namakan mereka jump1 -jump5.

Untuk setiap klip, seret satu bingkai dari jumpsheet, mengikut urutan. contohnya jumpsheet imej pertama untuk melompat1, dan sebagainya.

Buka tetingkap Animator sekali lagi, klik kanan, buat ... baru dari pokok hambar. Nama JumpFall itu.
Klik dua kali pada keadaan JumpFall baru, membuka pokok campuran di dalam pemeriksa.

Klik tanda tambah kecil dan Tambah medan Motion, lakukan ini lima kali.

Tukar Threshold dari range -13 hingga 10, dan ubah parameter ambang menjadi vSpeed.

Sekiranya anda tidak berpuas hati dengan animasi, anda boleh mengubah nilai dengan menanggalkan Ambang Automatik. Untuk permainan mudah ini, nampaknya cukup baik. (Animator mendapat malas ... lagi)

Sekarang kembali ke tetingkap Animator, anda akan melihat pokok campuran dibuka, klik Base Layer di sudut kiri atas untuk kembali ke keadaan dasar kami.

Anda harus memadamkan semua keadaan melompat yang dihasilkan secara automatik, Jump1 melalui Jump5 sekarang juga. (Terima kasih c0)

Cipta Peralihan dari Mana-mana Negara ke negeri JumpFall yang baru, dan kemudian dari JumpFall ke atas terbiar. Ini bermakna kita boleh pergi ke animasi melompat dari mana-mana negeri, iaitu jika kita jatuh.

Tetapkan peralihan dari Mana-mana Negeri ke JumpFall untuk menjadi apabila Ground adalah palsu, dan peralihan dari JumpFall untuk menganggur apabila tanah adalah benar.

Segala yang dilakukan, jalankan permainan sekali lagi dan anda sepatutnya dapat membuat Robot melompat dan bernyawa dengan bar ruang. Animasi itu sedikit jerky kerana kekurangan bingkai, anda boleh bermain dengan bidang gerakan untuk mengubah sedikit jika anda suka.

Langkah 9: Penghancur

Dalam langkah-langkah yang akan datang, kami akan membuat objek yang menanam lebih banyak objek dan tanpa beberapa pembersihan berlaku, permainan kami akan menjadi lemah. Dengan itu, kami akan menjaga membersihkan dengan meletakkan beberapa objek dari skrin untuk memusnahkan objek semasa mereka meninggalkan kawasan permainan.

Permainan kami akan menjadi skuter sampingan, jadi kami akan meletakkan satu di bawah tempat kejadian untuk menangkap objek jatuh (seperti Pemain) dan satu skrin di sebelah kiri untuk membersihkan apa-apa yang telah diterbangkan oleh.

Mula dengan membuat quad. Klik GameObject - Buat lagi -> Quad. Tukar kedudukannya berubah menjadi x ke -25 dan y ke 0. Kemudian tetapkan skala transformasi supaya X adalah 1 dan y ialah 25.

Berikan objek quad nama sejuk, seperti Destroyer Buang komponen Mesh Collider dan tambahkan kotak collider 2D, tetapi kali ini tandakan kotak yang bertanda "Is Trigger".

Juga tambahkan 2D tegar kepada itu, tetapi tetapkan skala graviti dalam tetingkap Inspektor kepada sifar.

Di kawasan kerja Projek, buka folder Skrip anda, dan tambah skrip C # baru, namakannya Pemusnah. Klik dua kali dan buka Monodevelop.

Masukkan kod berikut ke skrip baru dan simpannya.

 menggunakan UnityEngine; menggunakan System.Collections; kelas awam Destroyer: MonoBehaviour {// Use this for initialization void Start () {} void OnTriggerEnter2D (Collider2D other) {// if object that triggered event is tagged player if (other.tag == "Player") {Debug .Break (); kembali; } jika (other.gameObject.transform.parent) {Memusnahkan (other.gameObject.transform.parent.gameObject); } else {Destroy (other.gameObject); }}} 

Seret skrip Memusnahkan ke objek Destroyer.
Sekarang klik kanan pada objek Destroyer dalam tetingkap Hierarki, dan pilih Duplikat. Tukar transformator Destroyer baru berada pada kedudukan x = 0, y = -15, dan skala ke x = 50 dan y = 1.

Jika anda menjalankan permainan anda sekarang, dan berjalan di luar platform (ingat, terdapat halangan yang tidak kelihatan di sebelah kiri), ia sepatutnya menghentikan jeda dan membawa anda kembali ke editor.

Kami akan membetulkannya dalam satu langkah seterusnya.

Perkara terakhir yang perlu dilakukan dengan objek Destroyer kami adalah untuk menjadikan mereka kanak-kanak dari objek kamera, kerana kami akan mahu mereka mengikutinya atau mereka tidak akan melakukan banyak perkara sama sekali. Untuk melakukan ini, pilih mereka dan seretnya ke objek Kamera Utama.

Langkah 10: Tangan

Tangan yang menarik garis itu cukup mudah. Mari buatkannya.

Pertama seret sprit tangan ke dalam tetingkap adegan anda, meletakkannya dengan menggunakan objek kamera anda untuk melihat di mana di tempat kejadian ia duduk.

Mengubah skala jadi x = 2 dan y = 2.

Buat objek permainan kosong yang baru, dan namakannya Penciltip. Gunakan editor tempat untuk meletakkannya di hujung pensinya.

Beri tag sedikit supaya anda dapat menemuinya dengan mudah jika perlu. Lakukan ini dengan mengklik pada ikon kiub kecil di Inspektor.

Sekarang seret Penciltip ke objek tangan untuk memasangkannya bersama. Akhirnya seret objek tangan ke dalam Kamera Utama dalam tetingkap Hierarki.

Ia tidak melakukan apa-apa lagi, tetapi kepingan itu ada. sediakan beberapa bit lain yang kita perlukan.

Langkah 11: Talian Pensil

Sebuah prefab adalah seperti rakaman objek, anda membuat objek ke dalam prefab dan boleh menggunakannya mengikut kehendak anda.
Kami akan menggunakan mereka untuk banyak permainan yang lain, kerana tahap dihasilkan secara pemprograman.

Mula dengan membuat folder baru dalam folder Aset, dan panggilnya Prefab. Buat Prefab baru dengan mengklik kanan dan memilih Prefab. Namakan pencabutan Prefab baru.

Cari sprite yang disebut pencilline dalam folder sprite, dan seret ke gameObject baru dalam tetingkap hierarki.

Tambah kotak collider 2D dan ubah saiznya agar sesuai dengan pencillin image.0.03 oleh 0.05 berfungsi.

Buka folder Prefab anda, kemudian seret GameObject ke dalam prefab. Ikon akan berubah untuk dipadankan dengan prefab baru.

Padamkan objek permainan sebaik sahaja anda meletakkannya ke dalam prefab anda. Kami tidak perlu lagi yang asal.

Sekarang tambahkan skrip C # baru ke folder Skrip anda, panggil ia pencillin. Bukanya dan masukkan skrip berikut.

 menggunakan UnityEngine; menggunakan System.Collections; pencillin kelas awam: MonoBehaviour {// untuk merujuk kepada pencabulan prefab awam kita GameObject obj; float lastx = 0f; / / Gunakan ini untuk permulaan tidak sah Mula () {} // Kemas kini dipanggil sekali setiap bingkai tidak sah Kemaskini () {// jika kita telah berpindah cukup jauh membuat pencillin baru jika (transform.position.x> (lastx + 0.02f )) {Instantiate (obj, transformation.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 pencolok anda ke parameter obj baru pada pengawal skrip anda.

Kamera kami masih tidak mempunyai skrip kawalan, tetapi jika anda menjalankan permainan, anda harus melihat satu objek pencill yang dihasilkan di hujung pensil. Anda dapat melihatnya kerana latar belakang biru dan garisan dibuat untuk latar belakang putih.

Langkah 12: Kamera Roll!

Mari kita dapatkan Rolling Camera.
Objek kamera semuanya dibuat, jadi kita hanya perlu skrip pengawal.

Hanya satu perubahan sedikit sebelum kita menulis skrip. Warna latar belakang. Ia perlu berwarna putih, garis akan kelihatan crumby jika tidak, belum lagi nota catatan itu jika anda memutuskan untuk menggunakannya.

Cukup pilih kamera utama dalam tetingkap hierarki, dan klik padanan warna di Inspektor, pemilih warna akan muncul. Pilih putih.

Okay, skrip baru, saya panggil pancam lombong. Buat satu dalam folder skrip anda dan membukanya dalam Monodevelop, dan masukkan yang berikut.

 menggunakan UnityEngine; menggunakan System.Collections; kelas awam pancam: MonoBehaviour {float ydir = 0f; pemain GameObject awam; / / Gunakan ini untuk permulaan // Kemas kini dipanggil sekali per bingkai tidak sah Kemaskini () {// periksa pemain yang ada dan kemudian lanjutkan. jika tidak, kita akan mendapat ralat apabila pemain mati jika (pemain) {// jika pemain telah lulus kedudukan x -1 maka mula bergerak ke depan kamera dengan posisi Y randomish jika (player.transform.position.x> -1) {float randy = 0f; randy = Random.Range (0f, 100f); jika (randy 20 && randy 80) {ydir = 0f; } transform.position = new Vector3 (transform.position.x + 0.03f, transform.position.y + ydir, -10); }}}}} 
Sekarang anda hanya perlu memohon skrip ke Kamera Utama anda dalam hierarki, dan kemudian seret objek Pemain ke parameter skrip.

Cuba permainan sekali lagi, anda baru saja membuat pelari tak terhingga !!! Nah, hampir. Kami masih memerlukan beberapa perkara, tetapi semakin dekat sekarang.

Tangan saya hanya sedikit lebih tinggi daripada yang saya mahukan, tetapi saya hanya akan menjatuhkannya sedikit di editor tempat kejadian.

Langkah 13: Tambah Skor

Tambah objek GUIText baru dari menu GameObject dan namakan Skor.

Tukar nilai Teks ke Markah dan warna menjadi hitam di Inspektor.
Buka tetingkap Permainan, jika tidak tersedia, anda boleh menemuinya di bawah Tetingkap tarik ke bawah di bahagian atas.

Laraskan kedudukan Transform, ia berfungsi pelik untuk objek GUI kerana sebab tertentu, fikirkannya sebagai peratus daripada skrin yang dapat dilihat, di mana 0.5 adalah 50% dan 0, 0 adalah sudut kiri bawah.
X = 0.3 dan y = 0.97 meletakkannya di dekat bahagian atas di sudut kiri.

Sekarang kita perlu menambah sedikit lagi kod ke skrip Kamera kita. Kemas kini skrip dengan perubahan tesis.
 menggunakan UnityEngine; menggunakan System.Collections; kelas awam pancam: MonoBehaviour {float ydir = 0f; pemain GameObject awam; // untuk objek GUIText kami dan skor kami GUIElement gui awam; float playerScore = 0; // fungsi ini mengemas kini objek guitext kami yang tidak sah OnGUI () {gui.guiText.text = "Score:" + ((int) (playerScore * 10)). ToString (); } // ini adalah fungsi generik yang boleh kita panggil untuk meningkatkan skor dengan jumlah undian awam yang tidak sah (jumlah int) {playerScore + = jumlah; } // Kemas kini dipanggil sekali setiap bingkai tidak sah Kemaskini () {// semak pemain itu wujud dan kemudian teruskan. jika tidak, kita akan mendapat ralat apabila pemain mati jika (pemain) {// jika pemain telah melepasi kedudukan x -1 maka mula bergerak ke depan kamera dengan posisi Y randomish jika (player.transform.position.x> -1) {/ / update skor kami setiap tanda jam pemainScore + = Time.deltaTime; float randy = 0f; randy = Random.Range (0f, 100f); jika (randy 20 && randy 80) {ydir = 0f; } transform.position = new Vector3 (transform.position.x + 0.03f, transform.position.y + ydir, -10); }}}}} 

Simpan skrip pancam dan kembali ke perpaduan.

Pilih Main Utama sekali lagi, dan anda akan melihat bahawa parameter baru tersedia dalam komponen Skrip di Inspektor. Seret Skor objek GuiText ke parameter Gui.

Cuba main semula, kini anda harus mempunyai skor naik.

Langkah 14: Bom Away

Tiada bahaya lagi untuk wira kita. Kami akan membetulkannya. Mari buat beberapa bom kartun jatuh dari langit dan pecahkan baris.

Buat objek permainan kosong yang baru, dan namakannya Bom. Dalam folder sprite, cari sprite bom, buka dan tambah bingkai pertama ke Bom. Laraskan skala transformasi ke X = 0.5, Y = 0.5.

Tambah collider circle 2D dan ubah skala dan posisi untuk kelihatan baik. Kami mahu bom jatuh, jadi kami juga akan memerlukan 2D tegar, tambah komponen itu juga.

Kami juga memerlukan Animator untuk mengawal keadaan bom kami, jadi tambah juga. Nyahtandai Memohon Pergerakan Akar dan semak kotak Physate Animate di Inspektor.

Buka tetingkap animasi, pastikan anda masih mempunyai Bomb_0 bom yang masih terpilih. Tambah animasi dan sebut sebagai bombidle, ini akan mewujudkan keadaan lalai baru dalam Animator kami. Gunakan 3 bingkai pertama lembaran sprite (seret dan lepaskan) dan kemudian mengurangkan kadar bingkai dengan menjatuhkan Sampel ke sekitar 20.

Buat satu lagi klip baru, hubungi satu bombexplode ini dan gunakan baki baki lembaran bumerang yang lain. Sekali lagi, kurangkan framerate kepada kira-kira 20.

Turun di tetingkap Animator, buat peralihan dari bombidle ke bombexplode, biarkan keadaan untuk keluar dari masa dan ubah nilai menjadi 5.00. Ini bermakna bom kami akan tetap terbiar (sekering menyala) selama 5 saat sebelum menukar keadaan untuk meletup.

Buat animasi ketiga dalam tetingkap Animasi, panggil ia bombdead dan biarkan kosong. Dalam Animator, buat peralihan dari bombexplode ke bombdead.

Buat skrip baru yang dikenali sebagai bom dalam folder skrip anda.

 menggunakan UnityEngine; menggunakan System.Collections; bom kelas awam: MonoBehaviour {// pemegang untuk Animator animator kami; // float umum untuk radius letupan peledakan awam meletupRadius = 1f; / / Gunakan ini untuk permulaan tidak sah Mula () {anim = GetComponent (); // Pembaruan dipanggil sekali setiap bingkai tidak sah Kemaskini () {// jika kita selesai meletup jika (anim.GetCurrentAnimatorStateInfo (0) .IsName ("bombdead")) {// memusnahkan semua objek dalam jejari melainkan mereka tagged Player or hand Collider2D [] colliders = Physics2D.OverlapCircleAll (transformation.position, explodeRadius); foreach (Collider2D col in colliders) {if (col.tag! = "Player" && col.tag! = "hand") {Destroy (col.collider2D.gameObject); }} Hancurkan (this.gameObject); }}} 
Akhirnya, seret skrip bom ke objek bomb_0 anda.

Satu perkara kecil yang hampir terlupa, adalah untuk menandai tangan sebagai tangan. untuk melakukan ini, pilih objek tangan anda dalam tetingkap hierarki, dan kemudian di bawah teg, pilih tambah teg. Buat tag baru di element0 bernama tangan, kemudian dengan objek tangan anda dipilih, tukar tag ke tangan. Juga tukar tag objek penciltip ke tangan.

Cuba lari permainan, bom harus jatuh, meletup dan keluar navbar. (bergantung pada kursus di mana anda telah meletakkannya)

Langkah 15: Spawning Bom

Sukar untuk bermain permainan sekarang, apa yang akan kita lakukan adalah membuat objek bertelur untuk menanam bom, sangat seperti pencidakip yang memancarkan pencillin.

Perkara pertama yang kita perlukan adalah bumbung bom kami. Navigasi ke folder prefab dan buat prefab baru, namakan ia bom. Seret objek Bom ke dalam prefab bom. Padamkan Objek Bom asal dalam hierarki sebaik sahaja anda memilikinya sebagai Prefab.

Buat objek kuad baru yang dikenali sebagai BombSpawn. Posisikannya di atas kamera mengesahkan dalam paparan Kamera Utama atau dalam tetingkap Permainan.

Buat skrip baru dalam folder skrip anda yang dikenali sebagai BombSpawner, dan berikan kod berikut.

 menggunakan UnityEngine; menggunakan System.Collections; kelas awam BombSpawner: MonoBehaviour {// pelbagai objek awam yang objeknya menimbulkan GameObject awam [] obj; // minit min dan max untuk spawn float umum lainin = 3f; pampasan awam spawnMax = 2f; void Start () {// start spawn Spawn (); } tidak sah Spawn () {// dapatkan nombor rawak float rawak = Random.Range (0, 1000); // jika nombor rawak lebih besar daripada 700 membuat bom jika (rand> 700) {Instantiate (obj [Random.Range (0, obj.GetLength (0))], transformation.position, Quaternion.identity); } // memanggil bertelur pada selang masa rawak antara min dan max Invoke ("Spawn", Random.Range (spawnMin, spawnMax)); }} 
Pertama buat objek BombSpawn sebagai kanak-kanak Kamera Utama dengan menyeretnya ke dalam kamera melalui tingkap hierarki.
Sekarang seret skrip ke objek BombSpawn dalam tetingkap Hierarki. Sekarang dengan BombSpawn dibuka di Inspektor, seret prefab Bom ke segitiga kecil yang dilabelkan Obj dalam komponen skrip.

Kami perlu menambah pernyataan jika kembali dalam skrip Bom kami (dari langkah terakhir) untuk melambatkan bom yang jatuh sehingga selepas pemain mula berjalan pada baris. Cek cepat dalam adegan saya menunjukkan tangan duduk di 7.something sehingga saya akan menunda titisan sehingga bom melewati 12.
Inilah skrip Bom yang diubahsuai.

 bom kelas awam: MonoBehaviour {// pemegang untuk Animator animator kami; // float umum untuk radius letupan peledakan awam meletupRadius = 1f; / / Gunakan ini untuk permulaan tidak sah Mula () {anim = GetComponent (); } // Kemas kini dipanggil sekali setiap bingkai tidak sah Kemaskini () {// jika bom ini dibangkitkan selepas pemula mencapai kedudukan lalu x = 12 jika (transform.position.x> 12) {this.gameObject.SetActive (true) ; } // sebaliknya bom tidak berfungsi lagi {this.gameObject.SetActive (false); } // jika kami selesai meletup jika (anim.GetCurrentAnimatorStateInfo (0) .IsName ("bombdead")) {// memusnahkan semua objek dalam radius melainkan ia ditandakan Player atau tangan Collider2D [] colliders = Physics2D.OverlapCircleAll ( transformation.position, explodeRadius); foreach (Collider2D col in colliders) {if (col.tag! = "Player" && col.tag! = "hand") {Destroy (col.collider2D.gameObject); }} Hancurkan (this.gameObject); }}} 
Sekarang Robot boleh melompat ke garisan dan berjalan sedikit sebelum bom mula jatuh ... cuba. Masih tidak begitu mencabar. Let's duplicate the BombSpawn object !! Kemudian hanya bergerak sedikit demi sedikit dan kami mempunyai dua buah bom, mari kita bermain.

Langkah 16: Platform (atau Doodle)

Untuk menjana platform coretan, kita mulakan dengan membuat beberapa prabayar. Buat folder baru dalam folder Prefab dan panggilnya Doodles.

Buat 10 prefab baru bernama doodle1 walaupun untuk doodle10.

Buat objek permainan kosong yang baru, tidak perlu namakannya.

Buka folder sprite dan cari helaian doodle, buka dan pilih doodle pertama. Seret ke objek permainan kosong dalam tetingkap hierarki.

Tambah kotak collider 2D ke dalam inspektor, kemudian bermain dengan skala dan pusat untuk mendapatkannya duduk dengan baik di doodle. Ingat, inilah yang Robot akan mendarat.

Buka folder Prefabs / Doodles anda dengan prefab kosong di dalamnya, kemudian seret GameObject baru ke dalam prefab doodle1.

Sekarang, bukannya mengulangi proses keseluruhan ini, hanya menavigasi ke folder sprite, ambil coretan seterusnya, dan seret ke komponen Sprite Renderer dari Objek Permainan, laraskan kedudukan collider dan masukkan ke dalam prefab doodle seterusnya.

Ulangi ini untuk prefabs doodle yang tinggal. Sebaik sahaja semuanya dicatatkan sebagai prefab, anda boleh memadamkan GameObject yang kami buat untuk menciptanya.

Sekarang Duplikat objek BombSpawn di bawah kamera Utama kami, dan gerakkan skrin ke sebelah kanan. Berikannya nama baru dalam Inspektor, seperti DoodleSpawn.

Kemudian seret setiap prefabs baru ke dalam parameter Obj komponen skrip kami. Seret yang pertama ke dalam elemen 0 untuk menggantikan bom, dan yang lainnya ke segitiga kecil di sebelah Obj untuk menambahkannya ke senarai.

Main dengan parameter min / max dalam komponen skrip untuk menukar kekerapannya. Duplikat objek DoodleSpawn dan gerakkannya jika anda mahu satu lagi tahap.

Satu perkara yang saya perhatikan semasa bermain adalah bahawa kelajuan Robot max terlalu rendah, saya meningkatkannya di sini. Pergi ke objek Pemain anda dan laraskan pemboleh ubah maxSpeed ​​dalam komponen Skrip jika anda mencari isu yang sama.

Langkah 17: Bonus Point Pickups

Membuat Pickup sangat mirip dengan membuat doodle. Beberapa perbezaan kecil. Mula dengan membuat folder baru dalam folder Prefabs yang dipanggil Bonus, dan mengisi dengan 6 prefab kosong.

Kami memerlukan skrip untuk mengendalikan menambah mata bonus kepada objek GUIText, jadi dalam folder skrip, buat skrip baru yang disebut BonusPoints. Inilah skrip untuk masuk dalam Monodevelop.

 menggunakan UnityEngine; menggunakan System.Collections; BonusPoints kelas awam: MonoBehaviour {// buat bekas untuk pameran pancam hud; void OnTriggerEnter2D (Collider2D col) {if (col.tag == "Player") {hud = GameObject.Find ("Camera Utama"). GetComponent (); hud.increaseScore (10); Musnahkan (this.gameObject); }}} 

Sekarang kembali ke tempat kejadian dan buat GameObject kosong yang baru. Cari powerups dalam folder sprite, dan seret sprite pertama ke GameObject yang baru.

Transform skala ke x = 2, y = 2 ke dalam pemeriksa, kemudian tambah kotak collider 2D. Kali ini kita mahu menyemak kotak yang ditandakan Is Trigger.

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

Seperti pada langkah sebelumnya, hanya gantikan Sprite Renderer Sprite untuk setiap prefab dan simpannya.

Sebaik sahaja enam prufus Bonus dibuat, kami boleh memadamkan GameObject yang kami gunakan untuk membinanya.

Untuk menanam bonus kami, kami hanya akan menduplikasi objek DoodleSpawn, menamakan semula BonusSpawn, bergerak sedikit demi sedikit dan menggantikan objek yang ia ditanam.

Step 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 dalam adegan baru kami.

Hampir semua selesai, kami perlu menambah fungsi pada skrip kamera kami untuk lulus skor ke hadapan, dan kami perlu mengubah skrip pemusnah kami di mana kami memecahkan kod untuk menghantar kami ke tempat kejadian GameOver.

Skrip kamera baru.

 menggunakan UnityEngine; menggunakan System.Collections; kelas awam pancam: MonoBehaviour {float ydir = 0f; pemain GameObject awam; // untuk objek GUIText kami dan skor kami GUIElement gui awam; float playerScore = 0; // fungsi ini mengemas kini objek guitext kami yang tidak sah OnGUI () {gui.guiText.text = "Score:" + ((int) (playerScore * 10)). ToString (); } // ini adalah fungsi generik yang boleh kita panggil untuk meningkatkan skor dengan jumlah undian awam yang tidak sah (jumlah int) {playerScore + = jumlah; } // Kamera akan dilumpuhkan apabila kita memuat tahap, menetapkan skor dalam playerprefs void OnDisable () {PlayerPrefs.SetInt ("Markah", (int) (playerScore)); } // Kemas kini dipanggil sekali setiap bingkai tidak sah Kemaskini () {// semak pemain itu wujud dan kemudian teruskan. jika tidak, kita akan mendapat ralat apabila pemain mati jika (pemain) {// jika pemain telah melepasi kedudukan x -1 maka mula bergerak ke depan kamera dengan posisi Y randomish jika (player.transform.position.x> -1) {/ / update skor kami setiap tanda jam pemainScore + = Time.deltaTime; float randy = 0f; randy = Random.Range (0f, 100f); jika (randy 20 && randy 80) {ydir = 0f; } transform.position = new Vector3 (transform.position.x + 0.03f, transform.position.y + ydir, -10); }}}}} 

Skrip Penghancur tetap

 menggunakan UnityEngine; menggunakan System.Collections; public class Destroyer: MonoBehaviour {void OnTriggerEnter2D (Collider2D other) {// if object that triggered event is tagged player if (other.tag == "Player") {Application.LoadLevel (1); } jika (other.gameObject.transform.parent) {Memusnahkan (other.gameObject.transform.parent.gameObject); } else {Destroy (other.gameObject); }}} 

Tahu tak? Anda hanya membuat permainan! Saya juga !! woot untuk kami!
Ok, jadi ini bukan permainan terbaik di dunia, tapi itu tidak begitu penting. Sekurang-kurangnya ia bukan untuk saya. Saya terkejut betapa mudahnya semuanya menjadi, dan saya terpaksa berkongsi. Pergi buat, saya tidak sabar untuk bermain beberapa permainan baru yang hebat!

Langkah 19: Fail, Dll

saya memasukkan langkah terakhir ini untuk membuat skrip yang kami tulis bersama sedikit lebih mudah untuk diakses.
Jadi inilah skrip yang kami lalui.

Terima kasih banyak kerana berhenti, saya harap anda menikmatinya seperti yang saya lakukan.
Berkongsi dan nikmati.

Oh dan ...... mengundi fjordcarver?

Lampiran

  • bomb.zip Muat turun
  • Muat turun BombSpawner.zip
  • BonusPoints.zip Muat turun
  • Destroyer.zip Muat turun
  • Muat turun GameOver.zip
  • pancam.zip Muat turun
  • pencilline.zip Muat turun
  • Muat turun RobotController.zip

Artikel Berkaitan