Panduan Pemula Utama Untuk Pengembangan Game Dalam Unity

Unity adalah alat yang hebat untuk membuat prototipe segala sesuatu mulai dari game, hingga visualisasi interaktif. Di artikel ini, kami membahas semua yang perlu Anda ketahui untuk mulai menggunakan Unity.

Pertama, sedikit tentang saya: Saya adalah pengembang persatuan hobi, pemodel 3d, dan desainer grafis yang bekerja dengan Unity dan Blender selama lebih dari 5 tahun. Saya sekarang menjadi mahasiswa Matematika Keuangan di University College Dublin, dan kadang-kadang saya mengerjakan desain grafis lepas, pembuatan prototipe web, dan pembuatan prototipe game.

pengantar

Artikel ini ditujukan untuk siapa saja yang belum pernah menggunakan Unity sebelumnya, tetapi memiliki pengalaman pemrograman atau dalam desain / pengembangan web. Di akhir artikel ini, Anda akan memiliki gambaran umum yang baik tentang engine serta semua fungsi dan kode yang diperlukan untuk mulai membuat game dasar.

Mengapa Unity?

Jika Anda ingin membuat game

Ada sangat sedikit pilihan dalam hal pengembangan Game Indie. Tiga pilihan utama jika ingin membangun game adalah Unreal, Unity, atau GameMaker.

Unity mungkin adalah yang paling tidak berpendirian dari 3 platform. Ini memberi Anda produk yang sangat mentah di luar kotak, tetapi sangat fleksibel, terdokumentasi dengan baik, dan sangat dapat diperluas untuk membangun hampir semua genre game yang dapat Anda pikirkan.

Ada banyak game yang sangat sukses seperti Escape from Tarkov (FPS), Monument Valley (Puzzler), dan This War of Mine (Strategy / Survival) yang semuanya dibangun di dalam Unity.

Pada kenyataannya, mesin tempat Anda membuat game pertama Anda mungkin tidak kritis, jadi saran saya adalah memilih satu dan menggunakannya.

Jika Anda ingin membuat prototipe pengalaman pengguna

Karena unity hanyalah sebuah mesin dengan sekumpulan fisika, animasi, dan rendering 3d waktu nyata, ini juga merupakan ruang yang bagus untuk membuat prototipe interaktif yang lengkap untuk studi UX.

Unity memiliki dukungan penuh untuk VR dan AR dan karenanya bisa menjadi alat yang hebat untuk menjelajahi arsitektur, otomatisasi, dan simulasi dengan klien.

Bagian dari artikel ini

  • Mengapa Unity?
  • Jendela Unity Editor
  • Objek Game Unity
  • Komponen Builtin Unity
  • Membuat Komponen Kustom
  • Struktur MonoBehaviour
  • Memanipulasi GameObjects
  • Raycasting
  • Deteksi tabrakan
  • Fitur lanjutan
  • Saran Untuk Pendatang Baru
  • Sumber Daya dan Komunitas yang Baik
  • Kesimpulan

Jendela editor kesatuan

Jendela editor dibagi menjadi beberapa bagian. Kami akan membahas ini dengan sangat singkat karena kami akan merujuknya terus-menerus di seluruh artikel. Jika Anda sudah familiar dengan ini, lewati saja!

Scene View: Memungkinkan penempatan dan pergerakan GameObjects di Scene Game View: Pratinjau bagaimana pemain akan melihat pemandangan dari kamera Inspektur: Memberikan rincian tentang GameObject yang dipilih di tempat kejadian. Aset / Proyek: Semua prefab, tekstur, model, skrip, dll. Disimpan di sini Hierarki: Mengaktifkan penyarangan dan penataan GameObjects di dalam adegan

Sekarang kita baik untuk memulai!

Objek Game Unity

Apa itu GameObjects

GameObjects adalah blok bangunan inti dari semua yang ada di mesin game Unity. Namanya hampir memberikannya:

Apa pun yang Anda tempatkan dalam sebuah adegan di Unity harus dibungkus dalam 'objek game'.

Jika Anda memiliki latar belakang desain web, Anda dapat menganggap GameObjects sebagai elemen yang sangat mirip! Kontainer yang sangat membosankan, tetapi sangat bisa dikembangkan untuk membuat fungsionalitas atau visual yang kompleks.

Secara harfiah segala sesuatu mulai dari efek partikel, kamera, pemain, elemen UI,… (daftarnya terus berlanjut) adalah GameObject.

Menciptakan Hirarki

Seperti dalam pengembangan web, GameObject juga merupakan wadah. Sama seperti Anda membuat layout atau abstraksi yang bervariasi dan diinginkan, Anda mungkin ingin melakukan hal yang sama dengan objek game.

Logika di balik objek game bersarang hampir sama dengan pengembangan web, saya akan memberikan beberapa contoh…

Kekacauan & Efisiensi

Analogi Web: Anda memiliki banyak elemen serupa yang dapat dibuat secara dinamis dengan cepat sebagai tanggapan atas interaksi pengguna dan ingin menjaganya tetap rapi. Terjemahan Persatuan: Anda membangun klon Minecraft dan Anda memiliki banyak blok di tempat kejadian, Anda perlu menambahkan dan menghapus 'potongan' blok dari tempat kejadian untuk alasan kinerja. Jadi, membuat mereka menjadi orang tua ke GameObject kosong untuk setiap potongan masuk akal, karena menghapus induk potongan akan menghapus semua blok anak.

Penentuan posisi

Analogi Web: Anda ingin mempertahankan posisi konten yang terkandung 'relatif' ke wadah dan bukan ke halaman web. Terjemahan Persatuan: Anda telah membuat sekumpulan drone pembantu yang melayang di sekitar pemain. Anda benar-benar tidak lebih suka menulis kode untuk memberi tahu mereka agar mengejar pemain, jadi Anda membuat instance mereka sebagai anak-anak dari objek permainan pemain.

Komponen Builtin Unity

Model Komponen Aktor

GameObject sendiri sangat tidak berguna - seperti yang telah kita lihat, mereka hanyalah wadah. Untuk menambahkan fungsionalitas padanya kita harus menambahkan komponen, yang pada dasarnya adalah skrip yang ditulis dalam C # atau Javascript.

Unity bekerja dengan model Actor Component, sederhananya GameObjects adalah para aktor dan Components adalah skrip Anda.

Jika Anda pernah menulis aplikasi web apa pun sebelumnya, Anda akan terbiasa dengan gagasan membuat komponen kecil yang dapat digunakan kembali seperti tombol, elemen formulir, tata letak fleksibel yang memiliki berbagai arahan berbeda dan properti yang dapat disesuaikan. Kemudian merakit komponen kecil ini menjadi halaman web yang lebih besar.

Keuntungan besar dari pendekatan ini adalah tingkat penggunaan kembali dan saluran komunikasi yang jelas antar elemen. Begitu pula dalam pengembangan game, kami ingin meminimalkan risiko efek samping yang tidak diinginkan. Bug kecil cenderung lepas kendali jika Anda tidak berhati-hati, dan sangat sulit untuk di-debug. Oleh karena itu, sangat penting untuk membuat komponen kecil, kuat, dan dapat digunakan kembali.

Komponen Bawaan Utama

Saya pikir sudah waktunya untuk beberapa contoh komponen bawaan yang disediakan oleh mesin Unity Games.

  • MeshFilter: Memungkinkan Anda untuk menetapkan materi ke mesh 3D ke GameObject
  • MeshRender: Memungkinkan Anda untuk menetapkan material ke 3D Mesh
  • [Kotak | Mesh] Collider: Mengaktifkan deteksi GameObject selama tabrakan
  • Rigidbody: Memungkinkan simulasi fisik yang realistis untuk bertindak pada GameObjects dengan Mesh 3d dan akan memicu peristiwa deteksi pada box colliders
  • Light: Menerangi bagian dari pemandangan Anda
  • Kamera: Mendefinisikan area pandang pemain untuk dilampirkan ke GameObject
  • Berbagai Komponen Kanvas UI untuk menampilkan GUI

Masih banyak lagi, tetapi ini adalah yang utama yang perlu Anda ketahui. Salah satu tipnya adalah Anda dapat mengakses semua dokumen untuk ini melalui manual unity dan referensi skrip offline di mana pun Anda berada:

Membuat Komponen Kustom

Komponen bawaan terutama mengontrol fisika dan visual, tetapi untuk benar-benar membuat game, Anda harus menerima masukan pengguna dan memanipulasi komponen standar tersebut serta GameObject itu sendiri.

Untuk mulai membuat komponen, masuk ke GameObject yang diinginkan> Tambahkan Komponen> ketikkan nama komponen baru Anda di bilah pencarian> skrip baru (c #).

Sebagai rekomendasi umum, saya menyarankan agar tidak menggunakan Javascript di Unity. Itu belum terus diperbarui dengan semua hal hebat yang menyertai ES6, dan sebagian besar hal yang lebih canggih bergantung pada C # hal yang ditransfer ke Javascript… Ini hanya menjadi satu solusi besar dalam pengalaman saya.

Struktur MonoBehaviour

Fungsi utama

Semua komponen diwarisi dari MonoBehaviour Class. Ini mencakup beberapa metode standar, yang paling penting:

  • void Start () yang dipanggil setiap kali objek yang berisi skrip dibuat instance-nya di scene. Ini berguna kapan saja kita ingin menjalankan beberapa kode inisialisasi, mis. mengatur peralatan pemain setelah mereka bertelur ke dalam pertandingan.
  • void Update () yang memanggil setiap frame. Di sinilah sebagian besar kode yang melibatkan input pengguna akan pergi, memperbarui berbagai properti seperti gerakan pemain di tempat kejadian.

Variabel Inspektur

Seringkali kami ingin membuat komponen sefleksibel mungkin. Misalnya semua senjata mungkin memiliki damage, rate of fire, has_sight yang berbeda, dll. Meskipun semua senjata pada dasarnya adalah hal yang sama, kami mungkin ingin dapat membuat variasi yang berbeda dengan cepat melalui kesatuan editor.

Contoh lain di mana kita mungkin ingin melakukan ini adalah saat membuat komponen UI yang melacak pergerakan mouse pengguna dan menempatkan kursor di viewport. Di sini kita mungkin ingin mengontrol sensitivitas kursor terhadap gerakan (jika pengguna menggunakan joystick atau gamepad vs mouse komputer). Oleh karena itu, masuk akal jika variabel ini mudah diubah baik dalam mode edit dan juga bereksperimen dengannya selama waktu proses.

Kita dapat melakukan ini dengan mudah hanya dengan mendeklarasikannya sebagai variabel publik di badan komponen.

Menerima masukan pengguna

Tentu saja, kami ingin game kami merespons masukan pengguna. Cara paling umum untuk melakukannya menggunakan metode berikut dalam fungsi Update () dari sebuah komponen (atau di mana pun Anda suka):

  • Input.GetKey (KeyCode.W) Mengembalikan kunci True W sedang ditahan
  • Input.GetKeyDown (KeyCode.W) Mengembalikan True saat tombol W pertama kali ditekan
  • Input.GetAxis ("Vertical"), Input.GetAxis ("Horizontal") Mengembalikan antara -1,1 gerakan input mouse

Memanipulasi GameObjects

Setelah kami memiliki input pengguna, kami ingin GameObjects dalam adegan kami merespons. Ada beberapa jenis tanggapan yang dapat kami pertimbangkan:

  • Terjemahan, Rotasi, Skala
  • Buat GameObjects baru
  • Mengirim pesan ke GameObjects / komponen yang ada

Transformasi

Semua GameObjects memiliki properti transformasi yang memungkinkan berbagai manipulasi berguna pada objek game saat ini untuk dilakukan.

Metode di atas cukup jelas, perhatikan bahwa kami menggunakan gameObject huruf kecil untuk merujuk ke GameObject yang memiliki contoh spesifik dari komponen ini.

Secara umum adalah praktik yang baik untuk menggunakan [Position, Rotation] lokal daripada posisi global / rotasi suatu objek. Hal ini biasanya mempermudah untuk memindahkan objek dengan cara yang masuk akal, karena sumbu ruang lokal akan diorientasikan dan dipusatkan pada objek induk daripada asal dunia dan arah x, y, z.

Jika Anda perlu mengkonversi antara ruang lokal dan dunia (yang sering terjadi), Anda dapat menggunakan yang berikut ini:

Seperti yang dapat Anda bayangkan, ada beberapa aljabar linier yang cukup sederhana di belakang ini yang diisyaratkan oleh 'Inverse' pada nama metode.

Membuat GameObjects baru

Karena GameObject pada dasarnya adalah segalanya dalam adegan Anda, Anda mungkin ingin membuatnya dengan cepat. Misalnya, jika pemain Anda memiliki semacam peluncur proyektil, Anda mungkin ingin dapat membuat proyektil dengan cepat yang memiliki logika terenkapsulasi sendiri untuk penerbangan, memberikan kerusakan, dll ...

Pertama kita perlu memperkenalkan pengertian prefab . Kita dapat membuatnya hanya dengan menyeret GameObject apa pun dalam hierarki adegan ke dalam folder aset.

Ini pada dasarnya menyimpan template dari objek yang baru saja kita miliki di scene kita dengan semua konfigurasi yang sama.

Setelah kita memiliki komponen prefab ini, kita dapat menetapkannya ke variabel inspektur (seperti yang telah kita bicarakan sebelumnya) pada komponen mana pun di tempat kejadian, sehingga kita dapat membuat GameObjects baru seperti yang ditentukan oleh prefab kapan saja.

Kami kemudian dapat melakukan 'instantiation' dari prefab dan memanipulasinya ke lokasi yang diinginkan di tempat kejadian dan membangun hubungan induk yang diperlukan.

Mengakses GameObjects dan Komponen lainnya

Seringkali kita perlu berkomunikasi dengan GameObject lain serta komponen terkaitnya. Setelah Anda memiliki referensi ke objek game, ini cukup sederhana.

ComponentName comp = some_game_object.GetComponent ();

Setelah itu Anda dapat mengakses salah satu metode / variabel publik dari komponen untuk memanipulasi GameObject. Ini adalah langkah yang mudah, namun sebenarnya mendapatkan referensi ke GameObject dapat dilakukan dengan beberapa cara…

Akses melalui variabel inspektur

Ini yang paling mudah. Cukup buat variabel publik untuk GameObject, seperti yang telah kita tunjukkan sebelumnya dengan prefab, lalu seret dan lepas secara manual ke komponen melalui inspektur. Kemudian akses variabel seperti di atas.

Akses melalui penandaan

Kita dapat menandai GameObjects atau prefabs melalui inspektur dan kemudian menggunakan fungsi objek permainan find untuk menemukan referensi ke sana.

Ini hanya dilakukan seperti di bawah ini.

GameObject some_game_object = GameObject.FindGameObjectWithTag ("Bata");

Akses melalui transformasi

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

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

Akses melalui SendMessage

Alternatifnya jika kita ingin mengirim pesan ke banyak komponen lain atau ingin mengirim pesan ke objek yang berada jauh di atas hierarki bersarang, kita dapat menggunakan fungsi kirim pesan, yang menerima nama fungsi diikuti dengan argumen.

gameObject.SendMessage ("MethodName", params); // Broadcast messagegameObject.SendMessageUpwards (“MethodName”, params); // Hanya diterima oleh komponen yang bertingkat di atas.

Raycasting

Anda mungkin pernah mendengar ini sebelumnya ketika orang membandingkan game FPS yang 'berbasis fisika' atau 'berbasis sinar'. Raycasting pada dasarnya seperti memiliki penunjuk laser yang, ketika bersentuhan dengan 'collider' atau 'rigidbody', mengembalikan 'hit' dan meneruskan detail objek.

Ada dua skenario di mana ini berguna (Mungkin ada lebih banyak lagi):

  1. Jika Anda merancang sistem senjata untuk sebuah game, Anda dapat menggunakan raycasting untuk deteksi hit, dan bahkan menyesuaikan panjang sinar sehingga item melee hanya 'mengenai' pada jarak pendek.
  2. Buat sinar dari penunjuk mouse ke titik dalam ruang 3d, yaitu jika Anda ingin pengguna dapat memilih unit dengan mouse mereka dalam permainan strategi.

Seperti yang Anda lihat, kode untuk ini sedikit lebih terlibat. Hal utama yang harus dipahami adalah bahwa untuk mentransmisikan sinar ke tempat mouse mengarah dalam ruang 3d membutuhkan transformasi ScreenPointToRay. Alasan untuk ini adalah kamera membuat ruang 3d sebagai viewport 2d di layar laptop Anda, jadi tentu saja ada proyeksi yang terlibat untuk mentransfer kembali ke 3d.

Deteksi tabrakan

Sebelumnya kami menyebutkan komponen Collider dan Rigidbody yang dapat ditambahkan ke sebuah objek. Aturan tabrakan adalah bahwa satu benda dalam tumbukan harus memiliki benda kaku dan benda lainnya bertumbukan (atau keduanya memiliki kedua komponen). Perhatikan bahwa saat menggunakan raycasting, sinar hanya akan berinteraksi dengan objek yang memiliki komponen collider terpasang.

Setelah penyiapan dalam komponen kustom apa pun yang dilampirkan ke objek, kita dapat menggunakan metode OnCollisionEnter, OnCollisionStay, dan OnCollisionExit untuk merespons tabrakan. Setelah kami memiliki informasi tabrakan, kami dapat meminta GameObject bertanggung jawab dan menggunakan apa yang telah kami pelajari sebelumnya untuk berinteraksi dengan komponen yang menyertainya juga.

Satu hal yang perlu diperhatikan adalah benda-benda kaku menyediakan fisika seperti gravitasi untuk objek, jadi jika Anda ingin ini dimatikan, Anda perlu memeriksa is_kinematic on.

Fitur lanjutan

Kami tidak akan membahas semua ini sekarang, tetapi mungkin di artikel mendatang - hanya untuk membuat Anda sadar bahwa mereka ada.

Membuat GUI

Unity memiliki mesin UI yang lengkap untuk menata GUI untuk game Anda. Secara umum, komponen ini bekerja sangat mirip dengan bagian mesin lainnya.

Memperluas Editor Unity

Unity memungkinkan Anda menambahkan tombol kustom ke inspektur Anda sehingga Anda dapat memengaruhi dunia selama mode edit. Misalnya, untuk membantu pembangunan dunia, Anda dapat mengembangkan jendela alat khusus untuk membangun rumah modular.

Animasi

Unity memiliki sistem animasi berbasis grafik yang memungkinkan Anda untuk memadukan dan mengontrol animasi pada berbagai objek seperti pemain yang menerapkan sistem animasi berbasis tulang.

Bahan dan PBR

Unity menjalankan mesin rendering berbasis fisik yang memungkinkan pencahayaan waktu nyata dan material realistis. Kenyataannya adalah Anda perlu mempelajari pemodelan 3d terlebih dahulu atau menggunakan model yang dibuat dan dioptimalkan oleh orang lain sebelum Anda melakukannya, untuk membuat barang yang benar-benar terlihat bagus.

Saran Untuk Pendatang Baru

Jika Anda berencana menulis game pertama Anda, jangan meremehkan kerumitan dan waktu yang dibutuhkan untuk menulis game yang paling sepele sekalipun. Ingat sebagian besar game yang keluar di Steam memiliki tim yang mengerjakannya selama bertahun-tahun penuh waktu!

Pilih konsep sederhana dan uraikan menjadi pencapaian kecil yang dapat dicapai. Sangat disarankan untuk memisahkan game Anda menjadi komponen independen sekecil mungkin, karena Anda kemungkinan besar tidak akan mengalami bug jika Anda menjaga komponen tetap sederhana daripada blok kode monolitik.

Sebelum Anda pergi dan menulis kode apa pun untuk bagian mana pun dari game Anda, pergi dan teliti apa yang telah dilakukan orang lain sebelumnya untuk memecahkan masalah yang sama - kemungkinan besar mereka akan mendapatkan solusi yang jauh lebih licin.

Sumber Daya dan Komunitas yang Baik

Desain game memiliki salah satu komunitas terbaik di luar sana, dan ada banyak profesional yang sangat terampil di industri ini yang memasang konten secara gratis atau hampir tidak ada sama sekali. Ini adalah bidang yang membutuhkan Pemodel 3d, Seniman Konsep, Desainer Game, Pemrogram, dan sebagainya. Saya telah menautkan beberapa sumber daya umum hebat yang saya temukan untuk masing-masing bidang di bawah ini:

Konsep seni

  • Feng Zhu Design School (Lebih dari 90 jam tutorial seni konsep)
  • Seni Tyler Edlin (Komunitas seni BST yang hebat dengan umpan balik dari para profesional tentang tantangan bulanan)
  • Art Cafe (Wawancara dan Workshop dengan Artis Konsep Terkenal)
  • Trent Kaniuga (Illustrator dan seniman 2D yang juga membuat game sendiri)

Pemodelan 3D

  • CG Cookie (Dasar-dasar Pemodelan Mesh Terbaik di Blender, mereka memiliki banyak konten bagus lainnya untuk blender)
  • Tor Frick (Pemodel & Pematung Permukaan Keras dalam Blender)
  • Gleb Alexandrov (Tutorial rendering singkat yang kuat di Blender)

Desain permainan

  • DoubleFine Amnesia Fortnight (GameDevs yang melakukan hackathon 2 minggu dan merekam seluruh proses desain mereka)
  • Perangkat GameMakers (Memeriksa Prinsip Desain Game)

Pemrograman

  • Handmade Hero (Menulis game dan mesin dari awal di C)
  • Jonathan Blow (pengembang Indie yang melakukan streaming langsung pengembangan game-nya)
  • Brackeys (Tutorial Persatuan Bagus)

Kesimpulan

Semoga kalian menyukai tutorial ini! Saya melakukan sedikit pekerjaan desain grafis serta prototipe game dan UI jadi lihat portofolio saya ! Saya juga terhubung .

Portofolio| LinkedIn