Panduan Pemula Terbaik Untuk Pembangunan Permainan Dalam Perpaduan

Unity adalah alat yang bagus untuk memprotaip segala-galanya dari permainan, hingga visualisasi interaktif. Dalam artikel ini, kami menjalani semua yang perlu anda ketahui untuk mula menggunakan Unity.

Pertama, sedikit mengenai saya: Saya adalah pembangun kesatuan hobi, pemodel 3d dan pereka grafik yang bekerja dengan Unity dan Blender selama lebih dari 5 tahun. Saya sekarang adalah pelajar Matematik Kewangan di University College Dublin, dan kadang-kadang saya melakukan reka bentuk grafik bebas, prototaip web, dan prototaip permainan.

Pengenalan

Artikel ini ditujukan kepada sesiapa yang tidak pernah menggunakan Unity sebelumnya, tetapi mempunyai pengalaman pengaturcaraan sebelumnya atau dalam reka bentuk / pembangunan web. Pada akhir artikel ini, anda harus mempunyai gambaran umum umum yang baik tentang mesin serta semua fungsi dan kod yang diperlukan untuk mula membuat permainan asas.

Mengapa Perpaduan?

Sekiranya anda mahu membuat permainan

Terdapat sangat sedikit pilihan untuk pembangunan Indie Game. Tiga pilihan utama jika anda ingin membina permainan adalah Unreal, Unity atau GameMaker.

Kesatuan mungkin paling tidak disukai dari 3 platform. Ini memberi anda produk yang sangat mentah di luar kotak, tetapi sangat fleksibel, didokumentasikan dengan baik, dan sangat luas untuk membina hampir semua genre permainan yang anda boleh fikirkan.

Terdapat banyak permainan yang sangat berjaya seperti Escape from Tarkov (FPS), Monument Valley (Puzzler), dan This War of Mine (Strategi / Survival) semuanya dibina dalam Unity.

Sebenarnya mesin yang anda gunakan untuk permainan pertama mungkin tidak kritikal, jadi nasihat saya adalah memilih satu dan menggunakannya.

Sekiranya anda ingin memprotaip pengalaman pengguna

Oleh kerana kesatuan hanyalah sebuah mesin dengan sekumpulan fizik, animasi, dan rendering 3d masa nyata, ia juga merupakan ruang yang bagus untuk membuat prototaip interaktif sepenuhnya untuk kajian UX.

Unity mempunyai sokongan penuh untuk VR dan AR dan oleh itu boleh menjadi alat yang hebat untuk menerokai seni bina, automasi dan simulasi dengan pelanggan.

Bahagian untuk artikel ini

  • Mengapa Perpaduan?
  • Tetingkap Editor Perpaduan
  • Objek Permainan Perpaduan
  • Komponen Builtin Perpaduan
  • Membuat Komponen Khusus
  • Struktur MonoBehaviour
  • Memanipulasi GameObjects
  • Raycasting
  • Pengesanan perlanggaran
  • Ciri Lanjutan
  • Nasihat Untuk Pendatang Baru
  • Sumber dan Komuniti yang bagus
  • Kesimpulannya

Tetingkap editor kesatuan

Tetingkap editor terbahagi kepada beberapa bahagian. Kami akan membahasnya secara ringkas kerana kami akan merujuknya secara berterusan sepanjang artikel. Sekiranya anda sudah biasa dengan perkara ini, sila langkau!

Pemandangan Adegan: Membolehkan penempatan dan pergerakan GameObjects dalam Paparan Permainan Adegan : Meninjau bagaimana pemain akan melihat pemandangan dari kamera Pemeriksa: Berikan perincian mengenai GameObject yang dipilih di tempat kejadian. Aset / Projek: Semua prefab, tekstur, model, skrip dan lain-lain disimpan di sini Hierarki: Membolehkan bersarang dan menyusun GameObjects di tempat kejadian

Sekarang kita baik untuk memulakan!

Objek Permainan Perpaduan

Apa itu GameObjects

GameObjects adalah blok asas dari semua yang ada dalam mesin permainan Unity. Nama itu hampir memberikannya:

Apa sahaja yang anda letakkan dalam pemandangan di Unity mesti dibungkus dengan 'objek permainan.'

Sekiranya anda mempunyai latar belakang reka bentuk web, anda boleh menganggap GameObjects seperti elemen! Bekas yang sangat membosankan, tetapi sangat luas untuk membuat fungsi atau visual yang kompleks.

Secara harfiah segala-galanya dari kesan zarah, kamera, pemain, elemen UI,… (senarai itu berterusan) adalah GameObject.

Mewujudkan Hierarki

Seperti dalam pengembangan web, GameObject juga merupakan wadah. Sama seperti anda bersarang untuk membuat susun atur atau abstraksi yang bervariasi dan diinginkan, anda mungkin mahu melakukan perkara yang sama dengan objek permainan.

Logik di sebalik objek permainan bersarang sama dengan pembangunan web, saya akan memberikan beberapa contoh…

Kekacauan & Kecekapan

Analogi Web: Anda mempunyai banyak elemen serupa yang mungkin dihasilkan secara dinamik dengan cepat sebagai tindak balas terhadap interaksi pengguna dan ingin menjadikannya kemas. Terjemahan Unity: Anda membina klon Minecraft dan anda mempunyai banyak blok di tempat kejadian, anda perlu menambah dan mengeluarkan 'potongan' blok dari tempat kejadian kerana alasan prestasi. Oleh itu, menjadikan mereka diasuh dengan GameObject kosong untuk setiap potongan masuk akal, kerana menghapus induk potongan akan membuang semua blok anak-anak.

Kedudukan

Analogi Web: Anda ingin mengekalkan kedudukan kandungan yang terkandung 'relatif' ke wadah dan bukan ke laman web. Terjemahan Unity: Anda telah membuat banyak drone penolong yang berlegar di sekeliling pemain. Anda sebenarnya tidak lebih suka menulis kod untuk menyuruh mereka mengejar pemain, jadi anda menjadikannya sebagai anak objek permainan pemain.

Komponen Builtin Perpaduan

Model Komponen Pelakon

GameObjects sendiri tidak berguna - seperti yang telah kita lihat bahawa mereka hanyalah bekas. Untuk menambahkan fungsi kepada mereka, kita harus menambahkan komponen, yang pada dasarnya adalah skrip yang ditulis dalam C # atau Javascript.

Unity berfungsi dengan model Actor Component, secara sederhana GameObjects adalah pelakon dan Komponen adalah skrip anda.

Sekiranya anda pernah menulis aplikasi web sebelum ini, anda akan terbiasa dengan idea untuk membuat komponen kecil yang boleh digunakan semula seperti butang, elemen bentuk, susun atur fleksibel yang mempunyai pelbagai arahan dan sifat yang dapat disesuaikan. Kemudian memasang komponen kecil ini ke laman web yang lebih besar.

Kelebihan besar pendekatan ini adalah tahap penggunaan semula dan saluran komunikasi yang jelas antara elemen. Begitu juga dalam pembangunan permainan, kami ingin mengurangkan risiko kesan sampingan yang tidak diingini. Bug kecil cenderung keluar dari kawalan jika anda tidak berhati-hati, dan sangat sukar untuk debug. Oleh itu, membuat komponen kecil, kuat dan boleh digunakan semula adalah penting.

Komponen Terpadu Utama

Saya rasa sudah tiba masanya untuk beberapa contoh komponen bawaan yang disediakan oleh mesin Unity Games.

  • MeshFilter: Membolehkan anda memberikan bahan ke mesh 3D ke GameObject
  • MeshRender: Membolehkan anda menetapkan bahan untuk 3D Mesh
  • [Kotak | Mesh] Collider: Membolehkan pengesanan GameObject semasa perlanggaran
  • Rigidbody: Membolehkan simulasi fizik yang realistik bertindak pada GameObjects dengan 3D Meshes dan akan mencetuskan peristiwa pengesanan pada kotak collider
  • Cahaya: Menerangi bahagian pemandangan anda
  • Kamera: Mendefinisikan ruang pandang pemain yang akan dilampirkan ke GameObject
  • Pelbagai Komponen Kanvas UI untuk memaparkan GUI

Terdapat banyak lagi, tetapi ini adalah perkara utama yang perlu anda ketahui. Satu tip ialah anda boleh mengakses semua dokumen untuk ini melalui manual perpaduan dan rujukan skrip di luar talian di mana sahaja anda berada:

Membuat Komponen Khusus

Komponen bawaan mengawal fizik dan visual terutamanya, tetapi untuk benar-benar membuat permainan, anda perlu menerima input pengguna dan memanipulasi komponen standard serta GameObjects itu sendiri.

Untuk mula membuat komponen, masuk ke GameObject yang diinginkan> Tambah Komponen> ketikkan nama komponen baru anda di bar carian> skrip baru (c #).

Sebagai cadangan umum, saya menyarankan agar tidak menggunakan Javascript di Unity. Itu belum dikemas kini dengan semua perkara hebat yang disertakan dengan ES6, dan kebanyakan barang yang lebih maju bergantung pada barang C # yang diserahkan ke Javascript ... Ia hanya menjadi satu perkara besar dalam pengalaman saya.

Struktur MonoBehaviour

Fungsi Utama

Semua komponen mewarisi dari MonoBehaviour Class. Ia merangkumi beberapa kaedah standard, yang paling penting:

  • batal Start () yang dipanggil setiap kali objek yang mengandungi skrip dibuat di tempat kejadian. Ini berguna bila-bila masa kita ingin melakukan beberapa kod inisialisasi, misalnya. tetapkan peralatan pemain setelah mereka bermain dalam perlawanan.
  • batal Kemas kini () yang dipanggil setiap bingkai. Di sinilah sebahagian besar kod yang melibatkan input pengguna akan pergi, mengemas kini pelbagai sifat seperti gerakan pemain di tempat kejadian.

Pemboleh ubah Pemeriksa

Selalunya kita mahu menjadikan komponen selengkap mungkin. Sebagai contoh semua senjata mungkin mempunyai kerosakan yang berbeza, kadar tembakan, has_sight dll. Walaupun semua senjata pada dasarnya adalah perkara yang sama, kita mungkin dapat membuat variasi yang berbeza dengan cepat melalui penyatuan penyatuan.

Contoh lain di mana kita mungkin mahu melakukan ini adalah ketika membuat komponen UI yang melacak pergerakan tetikus pengguna dan meletakkan kursor di ruang pandang. Di sini kita mungkin ingin mengawal kepekaan kursor terhadap pergerakan (jika pengguna menggunakan joystick atau gamepad vs tetikus komputer). Oleh itu, masuk akal jika pemboleh ubah ini mudah diubah dalam mod edit dan juga bereksperimen dengan mereka semasa menjalankan.

Kita dapat melakukannya dengan mudah dengan hanya menyatakannya sebagai pemboleh ubah awam dalam badan komponen.

Menerima input pengguna

Sudah tentu, kami mahu permainan kami bertindak balas terhadap input pengguna. Cara yang paling biasa untuk dilakukan adalah menggunakan kaedah berikut dalam fungsi Kemas kini () komponen (atau di mana sahaja yang anda suka):

  • Input.GetKey (KeyCode.W) Mengembalikan kekunci True W sedang ditahan
  • Input.GetKeyDown (KeyCode.W) Mengembalikan True apabila kekunci W ditekan pertama kali
  • Input.GetAxis (“Vertical”), Input.GetAxis (“Horizontal”) Mengembalikan antara pergerakan input tetikus -1,1

Memanipulasi GameObjects

Sebaik sahaja kami mempunyai input pengguna, kami ingin GameObjects berada di tempat kami untuk bertindak balas. Terdapat beberapa jenis respons yang mungkin kami pertimbangkan:

  • Terjemahan, Putaran, Skala
  • Buat GameObjects baru
  • Menghantar mesej ke GameObjects / komponen yang ada

Transformasi

GameObjects semuanya mempunyai sifat transformasi yang membolehkan pelbagai manipulasi berguna pada objek permainan semasa dilakukan.

Kaedah di atas cukup jelas, perhatikan bahawa kami menggunakan gameObject huruf kecil untuk merujuk kepada GameObject yang memiliki contoh komponen ini.

Secara amnya adalah praktik yang baik untuk menggunakan [Position, Rotation] tempatan dan bukannya kedudukan global / putaran objek. Ini biasanya menjadikannya lebih mudah untuk memindahkan objek dengan cara yang masuk akal, kerana paksi ruang tempatan akan berorientasi dan berpusat pada objek induk daripada arah asal dunia dan arah x, y, z.

Sekiranya anda perlu menukar antara ruang tempatan dan dunia (yang sering berlaku) anda boleh menggunakan yang berikut:

Seperti yang anda bayangkan, terdapat beberapa aljabar linier yang agak sederhana di belakang ini yang diisyaratkan oleh 'Inverse' dalam nama kaedah.

Membuat GameObjects baru

Oleh kerana GameObjects pada dasarnya adalah segala yang ada di tempat kejadian anda, anda mungkin ingin menghasilkannya dengan cepat. Sebagai contoh jika pemain anda mempunyai semacam pelancar peluru, anda mungkin mahu membuat proyektil dengan cepat yang mempunyai logik tersusun sendiri untuk penerbangan, menangani kerosakan, dan lain-lain ...

Mula-mula kita perlu memperkenalkan konsep Prefab . Kita dapat membuatnya hanya dengan menyeret mana-mana GameObject dalam hierarki pemandangan ke folder aset.

Ini pada dasarnya menyimpan templat objek yang baru kita miliki di tempat kejadian kita dengan semua konfigurasi yang sama.

Setelah kita mempunyai komponen prefab ini, kita dapat menetapkannya kepada pemboleh ubah pemeriksa (seperti yang kita bicarakan sebelumnya) pada komponen mana pun di tempat kejadian, sehingga kita dapat membuat GameObjects baru seperti yang ditentukan oleh prefab setiap saat.

Kami kemudian dapat melakukan 'instansiasi' prefab dan memanipulasinya ke lokasi yang diinginkan di tempat kejadian dan menjalin hubungan ibu bapa yang diperlukan.

Mengakses GameObjects dan Komponen lain

Selalunya kita perlu berkomunikasi dengan GameObjects lain dan juga komponen yang berkaitan dengannya. Sebaik sahaja anda mempunyai rujukan ke objek permainan, ini cukup mudah.

ComponentName comp = some_game_object.GetComponent ();

Selepas itu anda boleh mengakses mana-mana kaedah / pemboleh ubah umum komponen untuk memanipulasi GameObject. Ini adalah sedikit mudah, tetapi sebenarnya mendapatkan rujukan ke GameObject dapat dilakukan dengan beberapa cara…

Akses melalui pemboleh ubah pemeriksa

Ini adalah yang paling mudah. Cukup buat pemboleh ubah awam untuk GameObject, seperti yang telah kami tunjukkan sebelumnya dengan prefab, dan seret dan lepaskan secara manual ke komponen melalui pemeriksa. Kemudian akses pemboleh ubah seperti di atas.

Akses melalui penandaan

Kami dapat menandai GameObjects atau prefab melalui pemeriksa dan kemudian menggunakan fungsi mencari objek permainan untuk mencari rujukan kepada mereka.

Ini hanya dilakukan seperti di bawah.

GameObject some_game_object = GameObject.FindGameObjectWithTag (“Bata”);

Akses melalui transform

Sekiranya kita ingin mengakses komponen dalam beberapa objek induk, kita dapat melakukannya dengan mudah melalui atribut transform.

ComponentName comp = gameObject.transform.parent.GetComponent ();

Akses melalui SendMessage

Sebagai alternatif jika kita ingin mengirim pesan ke banyak komponen lain atau ingin mengirim pesan ke objek yang merupakan hierarki bersarang, kita dapat menggunakan fungsi kirim pesan, yang menerima nama fungsi diikuti dengan argumen.

gameObject.SendMessage ("MethodName", params); // Siarkan messagegameObject.SendMessageUpwards ("MethodName", params); // Hanya diterima oleh komponen yang bersarang di atas.

Raycasting

Anda mungkin pernah mendengar ini sebelum orang membandingkan permainan FPS yang 'berasaskan fizik' atau 'berdasarkan sinar'. Raycasting pada dasarnya seperti mempunyai penunjuk laser yang, ketika bersentuhan dengan 'collider' atau 'rigidbody', ia mengembalikan 'hit' dan mengembalikan butiran objek.

Terdapat dua senario di mana ini sangat berguna (Mungkin ada banyak lagi):

  1. Sekiranya anda merancang sistem senjata untuk permainan, anda dapat menggunakan penyiaran sinar untuk pengesanan hit, dan bahkan menyesuaikan panjang sinar sehingga item jarak dekat hanya 'terkena' pada jarak pendek
  2. Buat sinar dari penunjuk tetikus ke titik di ruang 3d, iaitu jika anda ingin pengguna dapat memilih unit dengan tetikus mereka dalam permainan strategi.

Seperti yang anda lihat, kod untuk ini sedikit lebih terlibat. Perkara utama yang perlu difahami adalah untuk menghantar sinar ke tempat tetikus menunjuk di ruang 3d memerlukan transformasi ScreenPointToRay. Sebabnya ialah kamera menjadikan ruang 3d sebagai ruang pandang 2d di skrin komputer riba anda, jadi secara semula jadi terdapat unjuran yang terlibat untuk memindahkan kembali ke 3d.

Pengesanan perlanggaran

Sebelumnya kami telah menyebut komponen Collider dan Rigidbody yang dapat ditambahkan ke objek. Peraturan untuk perlanggaran adalah bahawa satu objek dalam perlanggaran mesti mempunyai badan yang tegar dan yang lain collider (atau kedua-duanya mempunyai kedua komponen). Perhatikan bahawa semasa menggunakan penyiaran sinar, sinar hanya akan berinteraksi dengan objek dengan komponen collider terpasang.

Setelah disiapkan dalam komponen khusus yang dilekatkan pada objek, kita dapat menggunakan kaedah OnCollisionEnter, OnCollisionStay dan OnCollisionExit untuk bertindak balas terhadap perlanggaran. Sebaik sahaja kita mempunyai maklumat perlanggaran, kita dapat membuat GameObject bertanggungjawab dan menggunakan apa yang kita pelajari sebelumnya untuk berinteraksi dengan komponen yang melekat padanya juga.

Satu perkara yang perlu diperhatikan ialah badan kaku memberikan fizik seperti graviti untuk objek, jadi jika anda mahu ini dimatikan, anda perlu menyemak is_kinematicnya .

Ciri Lanjutan

Kami tidak akan membahasnya sekarang tetapi mungkin dalam artikel yang akan datang - hanya untuk membuat anda sedar bahawa mereka ada.

Membuat GUI

Unity mempunyai mesin UI yang lengkap untuk meletakkan GUI untuk permainan anda. Secara amnya komponen ini berfungsi sama dengan enjin yang lain.

Memperluaskan Editor Perpaduan

Unity membolehkan anda menambahkan butang tersuai pada pemeriksa anda sehingga anda dapat mempengaruhi dunia semasa mod edit. Sebagai contoh, untuk membantu pembinaan dunia, anda mungkin akan mengembangkan tetingkap alat khusus untuk membina rumah modular.

Animasi

Unity mempunyai sistem animasi berasaskan grafik yang membolehkan anda menggabungkan dan mengawal animasi pada pelbagai objek seperti pemain yang menerapkan sistem animasi berasaskan tulang.

Bahan dan PBR

Unity menjalankan mesin rendering berasaskan fizikal yang membolehkan pencahayaan masa nyata dan bahan realistik. Kenyataannya ialah anda perlu mempelajari pemodelan 3d terlebih dahulu atau menggunakan model yang dibuat dan dioptimumkan oleh orang lain sebelum anda mencapai ini, untuk membuat barang yang benar-benar kelihatan baik.

Nasihat Untuk Pendatang Baru

Sekiranya anda merancang untuk menulis permainan pertama anda, jangan memandang rendah kerumitan dan masa yang diperlukan untuk menulis permainan yang paling remeh. Ingatlah bahawa kebanyakan permainan yang keluar di Steam mempunyai pasukan yang bekerja selama bertahun-tahun!

Pilih konsep mudah dan pecahkan menjadi tonggak pencapaian kecil. Sangat disarankan untuk memisahkan permainan anda ke dalam komponen bebas sekecil mungkin, kerana kemungkinan besar anda menghadapi bug jika anda membiarkan komponennya sederhana daripada blok kod monolitik.

Sebelum anda pergi dan menulis kod apa pun untuk bahagian permainan anda, pergi dan selidik apa yang telah dilakukan orang lain sebelum ini untuk menyelesaikan masalah yang sama - kemungkinan mereka akan mempunyai penyelesaian yang lebih licin.

Sumber dan Komuniti yang bagus

Reka bentuk permainan mempunyai salah satu komuniti terbaik di luar sana, dan terdapat banyak profesional berkemahiran tinggi dalam industri ini yang menyediakan kandungan secara percuma atau tanpa apa-apa. Ia adalah bidang yang memerlukan Modeler 3d, Artis Konsep, Pereka Permainan, Pengaturcara dan sebagainya. Saya telah mengaitkan beberapa sumber umum yang hebat yang saya temui untuk setiap bidang berikut:

Konsep seni

  • Sekolah Reka Bentuk Feng Zhu (Tutorial seni konsep lebih dari 90 jam)
  • Tyler Edlin Art (Komuniti seni BST yang hebat dengan maklum balas daripada profesional mengenai cabaran bulanan)
  • Art Cafe (Temu ramah dan Bengkel dengan Artis Konsep Terkenal)
  • Trent Kaniuga (Illustrator dan artis 2D yang juga membuat permainannya sendiri)

Pemodelan 3D

  • Cookie CG (Asas Pemodelan Mesh Terbaik di Blender Pernah, mereka mempunyai banyak kandungan lain yang sangat baik untuk pengisar)
  • Tor Frick (Pemodel & Pemahat Permukaan Keras dalam Blender)
  • Gleb Alexandrov (Tutorial rendering ringkas pendek dalam Blender)

Reka Bentuk Permainan

  • DoubleFine Amnesia Fortnight (GameDevs yang melakukan hackathon 2 minggu dan merakam keseluruhan proses reka bentuk mereka)
  • ToolMakers Toolkit (Mengkaji Prinsip Reka Bentuk Permainan)

Pengaturcaraan

  • Wira Buatan Tangan (Menulis permainan dan mesin dari awal dalam C)
  • Jonathan Blow (Indie dev yang menayangkan perkembangan permainannya)
  • Brackeys (Tutorial Perpaduan Bagus)

Kesimpulannya

Harap anda menyukai tutorial ini! Saya melakukan sedikit kerja reka bentuk grafik serta prototaip permainan dan UI jadi lihat portfolio saya ! Saya juga dihubungkan dalam .

Portfolio| LinkedIn