Ada banyak artikel tentang
Unity untuk pendatang baru, tetapi saya tidak ingin mengulang sendiri, tetapi saya ingin berbagi pengalaman dalam mengembangkan game pertama dan, lebih khusus, untuk berbicara tentang apa yang saya temukan. Ini akan memberikan kesempatan bagi Anda semua, pengembang terkasih, untuk melindungi diri Anda di masa depan dari pekerjaan yang tidak direncanakan dan kehilangan waktu. Saya berharap materi ini akan dibaca oleh pengembang
Unity untuk meningkatkan produk mereka.
Perhatian , di bawah screenshot kucing
16+ !
Karena kebanyakan dari kita adalah orang-orang teknis, saya akan meletakkan semuanya di rak, mode, dan mencoba menyajikan materi sesingkat mungkin, secara ringkas dan tanpa air.
Tantangan
Saya ingin menulis sesuatu Tahun Baru, sederhana dalam pengertian dan manajemen. Sebagai hasil dari diskusi dengan target audiens (anak saya), diputuskan bahwa permainannya akan seperti ini:
- 2D (karena lebih nyaman memainkan game 2D di ponsel)
- Kontrol satu jari (terkadang maksimal dua)
- Time killer (hanya menyodok agar tidak membuat otak tegang)
- Sistem pencapaian (untuk membuatnya setidaknya sedikit menarik untuk dilanjutkan)
- Kartun
- Musik yang bagus
- Tanpa internet
- Android (kemudahan pemasangan file apk pengujian)
Itu semua menghasilkan gagasan
" Setan Santa menembak rusa yang mengganggu tasnya .
"
Dan kemudian semuanya dimulai ...
1. Perpustakaan android pihak ketiga
Masalah: Saya menghabiskan dua hari menemukan SDK, JDK, NDK yang tepat, dan membuat Unity bekerja dengan mereka. Di komputer saya sebelum Unity, SDK dari studio android sudah ada, tetapi tidak dimulai dengan mereka, saya harus mencari sesuatu yang lain, menginstal, mencoba, mencari lagi ... dua hari ...
Saran untuk perbaikan: alangkah baiknya jika SDK yang diperlukan dari versi terbaru dipasang secara otomatis selama instalasi Unity, dan jika ada yang perlu menurunkan versi atau memutakhirkan - maka biarkan yang ini mengkonfigurasi dirinya sendiri, dengan pena.

2. Gambar vektor
Masalah: Persatuan di luar kotak tidak mengerti
SVG . Bahkan segala macam kerangka JS kecil seperti Paper.js hanya bekerja dengan cerdas dengan vektor, tetapi gajah seperti Unity tidak.
Solusi: Saya menginstal beberapa paket beta yang sepertinya membaca SVG, tetapi pada akhirnya mengubahnya menjadi raster. Diterima, tapi memalukan, Persatuan!
3. platform 2D
Masalah: seperti yang Anda lihat di tangkapan layar, ada tanah, dan ada bola salju di atasnya. Dan ini juga
Mesh dan
Polygon Collider . Artinya, itu adalah permukaan yang berinteraksi dengan objek dan yang dapat diubah di editor. Jadi dalam versi Unity saat ini tidak ada alat standar yang dapat digunakan untuk mensimulasikan ini.
Solusi:- Anda dapat menggambar raster dengan alpha (minus - mengedit sumur ini cukup merepotkan)
- Anda dapat membeli plugin yang melakukan ini (dikurangi - menghabiskan uang)
- Anda dapat menulis sendiri plugin (minus - perlu waktu lama untuk mencari tahu, butuh waktu lama untuk menulis)
Saya memilih cara yang panjang tetapi gratis;) Jika ada yang membutuhkan plugin semacam itu - tulis, bagikan, beri tahu cara menggunakannya, saya tidak keberatan :)
Ngomong-ngomong, saya menonton demo beta Unity baru, sepertinya hal seperti itu akan muncul di luar kotak! Terima kasih untuk itu teman-teman!
Ya, saya akan menambahkan panel untuk dengan cepat membuat primitif 2D, lingkaran di sana, kotak ... kalau tidak, mereka tidak ada, well, atau Anda harus masuk ke sisi aset dan melihat.
4. Rotasi & Quaternion
Masalah: sistem penentuan posisi dan rotasi 3d yang sangat kompleks, tidak perlu dalam game 2D.
Solusi: Anda hanya perlu memahami dan menerimanya, karena game 2D adalah game 3D dengan koordinat Z = 0. Tapi alangkah baiknya untuk menyederhanakan sistem ini dalam mode 2D, kawan;)
Saya menghabiskan banyak waktu dan hampir mematahkan otak saya, mencoba memutar objek ke arah yang benar dengan sudut yang tepat, relatif terhadap objek lain, ketika saya baru saja menulis
player.a = 45 di mesin lain
; Ya, dan banyak metode yang jelas dalam versi saat ini akan dikurangi.
5. Debug
Masalah: bagi kami, pemula, kemungkinan debugging hanya tersedia dalam bentuk keluaran nilai variabel ke konsol menggunakan metode
print () . Istirahat penuh adalah banyak dari mereka yang membayar. Perbaiki saya di sini, jika saya salah, tetapi saya tidak dapat mengonfigurasi Visual Studio untuk debugging dengan cara apa pun, meskipun saya menemukan video yang jelas tidak perlu dikonfigurasikan, itu harus bekerja dengan sendirinya. Dia menyimpulkan bahwa debug tersedia dalam versi berbayar.
Solusi: Saya hanya menggunakan
print () ... dan saya mengerti bahwa debugging proyek yang kompleks akan menjadi faktor penentu dalam memperoleh versi Unity yang berbayar. Para pemasar dari perusahaan itu sangat menghormati :(
Dipecahkan! berkat prompt
Leopotam, saya menginstal paket tambahan untuk studio, tombol
“Attach to Unity debugger” muncul.
6. Ketuk dan klik, geser dan geser
Masalah: terlepas dari kenyamanan sistem input pengguna internal, kesederhanaan dalam memproses kaset tunggal biasa, klik dan gesekan tidak cukup. Saya ingin menggunakan satu metode yang akan mengembalikan koordinat satu klik / ketuk untuk berbagai jenis perangkat: sentuhan dan desktop dengan mouse, misalnya.
Solusi: Saya harus menulis layer kelas saya dan membungkus peristiwa yang diperlukan.
Mungkin saya akan meninggalkan satu komentar lagi mengenai sistem manajemen. Terima kasih banyak kepada pengembang Unity untuk Input universal, tetapi untuk perangkat sentuh saya juga ingin kontrol universal. Misalnya, geser ke atas - ikat ke Melompat, visualisasikan salib dan tombol, seperti pada joystick, dan sebagainya. Anda dapat membeli ini dalam paket berbayar atau, sekali lagi, tulis sendiri, habiskan waktu dengan sepeda.
7. Kebingungan dengan koordinat
Masalah: Anda tidak dapat menetapkan koordinat klik untuk objek dan melihatnya di tempat yang tepat, dan ini agak tidak terlihat.
Solusi: Pertama, Anda perlu membaca dokumentasi, memahami dan menggunakan berbagai metode untuk memetakan koordinat:
WorldToScreenPoint ()
ScreenToViewportPoint ()
transform.TransformPoint ()dan lainnya ...
Saya akan menjelaskan ini karena jarak dalam adegan diukur dalam satuan acak selain piksel, dan di samping itu, objek memiliki sistem bersarang, masing-masing, penentuan posisi relatif terhadap induknya.
8. Set kecil kontrol UI
Masalah: hanya elemen yang paling dasar yang dikirim dari kotak, dan bahkan kemudian Anda harus mengotak-atiknya.
Solusi: Anda bisa puas dengan sedikit. Sebagai contoh, saya menghabiskan banyak waktu untuk membuat daftar dinamis gulir. Anda dapat membeli kontrol keren (dikurangi pengeluaran uang).
9. Ukuran file APK besar
Masalah: ketika membangun proyek kosong, ukurannya adalah
21,9 MB (23.061.612 byte)
Solusi: Anda perlu menghemat segalanya. Saya mencubit file mp3, tekstur terkompresi, mencoba untuk tidak memasukkan sesuatu yang berlebihan dalam proyek. Tetapi ketika paket tambahan terhubung, ukurannya meningkat tanpa ampun, berjuang untuk seratus.
Google Play meminta pengembang untuk mengirim aplikasi
<100Mb . (22 sudah melahap). Tentu saja ada mekanisme pemisahan, pemuatan sumber daya yang dinamis, tetapi kami adalah pendatang baru, dan tujuan kami adalah mempelajari dasar-dasarnya, mewujudkan impian-impian kami yang berharga, dan tidak bertarung dengan batasan pasar.
10. Sirilik
Masalah: Setelah menyusun proyek untuk platform JS / HTML5 (untuk tes), ternyata tidak ada teks yang ditulis dalam bahasa Rusia.
Solusi: Anda perlu mengunduh file font, mengimpornya ke dalam aset, dan kemudian menentukan font yang diimpor ini dalam pengaturan untuk setiap teks.
Ini entah bagaimana sangat aneh.
11. Kinerja fisika
Masalah: Permainan mulai melambat sangat ketika ada colliders yang kompleks, ketika menggunakan mode
Continuous untuk
Collision Detection , ketika beberapa
Sistem Partikel digunakan dalam satu adegan, singkatnya, ketika semuanya digunakan yang memberikan efek dan keindahan pada game.
Solusi: gunakan hanya collider
Circle dan
Rectangle primitif,
Collision Detection seharusnya hanya
Discrete , jumlah partikel dalam
Sistem Partikel harus diatur ke minimum yang dapat diterima. Yah dan masih, tidak mengakui kesalahan saya dan tidak menggunakan tabrakan di dalam sistem partikel. Efeknya, tentu saja, indah, karena darah mengalir ke bawah benda, tetapi sangat padat sumber daya.

Secara alami, ini semua berlaku untuk game seluler 2D. Tetapi saya ingin Unity untuk mengembangkan, menggunakan shader keren baru untuk partikel, dan untuk tabrakan, dan untuk segala sesuatu yang kompleks dan indah.
Kesimpulan
Tentu saja ada jebakan-jebakan lain, tetapi ini adalah hal-hal sepele. Ada keuntungan tak terduga, seperti:
- Rak itan
- Dokumentasi dan komunitas yang baik
- Secara otomatis membuat collider poligon menggunakan saluran alpha sprite
- Kemudahan menggunakan efek suara.
- Animasi yang sangat nyaman pada bingkai kunci (dengan penambahan Anima2D dan membalikkan kinematika)
Tapi ini adalah kisah yang sangat berbeda ...
Adapun waktu tugas, saya sangat terhambat oleh poin No. 3 (pengembangan plug-in untuk pemodelan platform). Sebagai pengembang yang berpengalaman, saya menilai masalah untuk diri saya sendiri dan menilainya sebagai berikut: 20, 30, 40 (malam hari / hari libur karena pada hari itu saya sibuk dengan pekerjaan utama), di mana 20 optimis dan 40 pesimis. Jika bukan karena poin nomor 3, maka saya akan mencapai 20-30, tetapi pada akhirnya saya menghabiskan sekitar dua bulan. (tidak, saya tidak bekerja setiap malam, yaitu sekitar 40 tahun).
Jika ada yang tertarik, saya akan mengatakan bahwa saya harus menggambar sendiri, berkat program
Inkscape . Saya memilih musik secara eksklusif dengan lisensi untuk penggunaan gratis.
Saya harus menghabiskan beberapa hari menerbitkan di
Google Play .
Dua hari lagi dihabiskan untuk integrasi iklan (Anda kemungkinan besar tidak akan melihatnya, saya hanya benar-benar ingin mencobanya, walaupun mainan itu tidak dianggap sebagai iklan komersial)
Ya, banyak yang bisa ditingkatkan, tetapi saya ingin menghibur teman-teman saya sebelum liburan Tahun Baru.
Jangan salah paham, ini bukan posting PR. Yang terpenting, saya ingin mereka yang membuat mesin Unity memperhatikan kekurangan ini dan, tentu saja, menghilangkannya (yah, ini ideal). Dan saya juga ingin membantu saudara-saudara roh saya untuk tidak menyapu yang sama seperti saya.
Dan jika saya salah dalam sesuatu, maka jangan menilai dengan ketat, bagikan kiat Anda di komentar!