
Ini adalah bagian kedua dari cerita (dicampur dengan kisah kesalahan saya dan solusi mereka) tentang bagaimana saya (selama sekitar dua tahun di waktu luang saya) mengembangkan aplikasi mobile (untuk iOS / Android) yang akan memotivasi putri saya untuk menyelesaikan contoh matematika. Akibatnya, ternyata sebuah aplikasi yang memungkinkan seorang anak mendapatkan uang dengan pikirannya.
Baca bagian pertama di sini .
Bagian Kedua Rencana
- Tentang menulis kode
- Tentang kontrol versi
- Tentang akting suara
- Tentang ikon
- Tentang pembuatan untuk Android dan tentang ukuran
- Tentang build untuk iOS dan tentang ukuran
- Tentang judul dan promosi
- Statistik
- Apa yang saya sesali
- Apa yang dipahami
- Referensi
Trivia dalam pemrograman yang membuat hidupku lebih mudah
- Sejak Mono, saya terus menggunakan // TODO (dalam komentar) untuk menandai tempat yang perlu diselesaikan. Kemudian, semua tempat ini dapat dengan mudah dipantau pada tab Daftar Tugas (Ctrl + \, T dipanggil):

- Baru-baru ini, saya mulai menggunakan fitur seperti #region , misalnya, untuk menyembunyikan area enumerasi variabel:

- lebih mudah untuk membungkus bagian dari kode dengan beberapa konstruksi menggunakan urutan tombol pintas Ctrl + K, Ctrl + S. Sebagai contoh, saya memilih bagian dari kode yang perlu ditempatkan di dalam if dan tekan Ctrl + K, dan kemudian segera tekan Ctrl + S, masukkan nama operator (jika) yang Anda butuhkan dan tekan Enter.
- itu sangat menyederhanakan pekerjaan dengan kode jika Anda mematuhi gaya tunggal, misalnya, seperti di sini - Panduan Gaya C # dengan Unity dalam pikiran .
- Saya sangat senang bahwa saya berteman dengan Coroutine - ini, kira-kira, fungsi yang meregangkan eksekusi mereka menjadi beberapa bingkai. Yaitu mereka tidak mencoba menyelesaikan tugas apa pun dalam satu frame (menghitungnya selama setengah detik, sehingga mengurangi kinerja menjadi 2 FPS), tetapi mereka melakukan sedikit di frame pertama, sedikit di frame kedua dan seterusnya, sehingga permainan tidak melambat. Tujuan mereka yang lain adalah untuk melakukan sesuatu yang tidak perlu dilakukan secara langsung di setiap frame (misalnya, periksa sesuatu 3 kali per detik).
Contoh di bawah ini menunjukkan coroutine dari lampu lalu lintas yang tanpa batas (setiap sepuluh detik) menyala secara bergantian, lampu kuning, merah, hijau:
IEnumerator TrafficLights() { while (true) { yield return new WaitForSeconds(10f); yield StartCoroutine(this.GetComponent<Lamp>().BlinkYellow()); yield StartCoroutine(this.GetComponent<Lamp>().BlinkRed()); yield StartCoroutine(this.GetComponent<Lamp>().BlinkGreen()); } }
Jika dalam bahasa manusia, maka pernyataan hasil hanya memberitahu Unity bahwa perlu untuk mentransfer pelaksanaan fungsi ke frame berikutnya (sebanyak yang diperlukan) sampai dieksekusi, dan kemudian melanjutkan ke instruksi hasil berikutnya. T.O. Coroutine TrafficLights akan berjalan seperti ini:
- pertama ada menunggu 10 detik (hasil pertama),
- kemudian mulai blinkYellow coroutine (hasil kedua) dan sampai selesai, BlinkRed coroutine tidak dimulai,
- setelah menyelesaikan BlinkYellow, BlinkRed diluncurkan,
- setelah BlinkRed selesai, BlinkGreen diluncurkan,
- kemudian siklus berulang dari awal (lihat poin 1).
Kontrol versi, yah, benar-benar perlu!
Video yang membantu saya mulai menggunakan GitHub bersama dengan Unity - Cara menggunakan GitHub dengan Unity .
Terlepas dari kenyataan bahwa saya sendiri (sendiri, tanpa tim) menulis kode, saya menyadari bahwa kontrol versi dari kode sangat penting bagi saya:
- Saya berhenti takut untuk membuat perubahan penting dalam kode yang dapat merusak proyek.
- Sangat mudah untuk kembali ke kondisi kerja Anda sebelumnya.
- Lebih mudah membandingkan file dengan kode.
- Anda dapat melihat dengan jelas apa yang telah berubah dalam kode.
- Apa pun yang terjadi pada komputer saya, saya selalu memiliki versi cadangan di cloud.
Tetapi hanya ketika bekerja dengan kontrol versi Anda perlu membiasakan diri untuk melakukan (memposting pembaruan) dalam porsi yang sangat kecil. Agar tidak seperti milik saya pada awalnya, saya mengubah 20 file, menambahkan satu ton fungsionalitas baru dan membuatnya semuanya sekaligus dengan nama "Fuh, sekarang akhirnya bekerja".
Adalah baik bahwa saya pernah tahu bahwa lebih baik tidak menambahkan file cache (folder Library), file sementara (tmp, folder obj) ke repositori, dan semua yang dihasilkan Unity dengan cepat. Bahkan, hanya folder Aset dan ProjectSettings yang harus ditambahkan ke repositori.
Tidak perlu menggunakan GitHub, karena minusnya adalah bahwa dalam akun gratis tidak mungkin membuat kode pribadi (hanya dapat dilihat oleh Anda sendiri). Tapi kemudian ada GitLab atau Bitbucket , jika memungkinkan.
Bagaimana saya rprprrruk ke mikrofon
Saya menganggap aplikasi saya bersifat mendidik dan, jika mungkin, tidak menggunakan gangguan. Oleh karena itu, kadang-kadang pengguna mengeluh, misalnya, tentang kurangnya musik atau antarmuka yang sangat sederhana (meskipun antarmuka yang sederhana bukan karena saya sangat menginginkannya, tetapi karena saya tidak tahu bagaimana melakukannya dengan lebih baik). Dengan musik, saya sedikit di persimpangan sekarang: Saya ingin menambahkan dan menyodok (tidak mungkin bahwa guru akan menyetujui keputusan pekerjaan rumah matematika untuk musik).
Musik, musik, tetapi tanpa akting suara adalah hal yang mustahil. Pada awalnya saya mencari suara yang saya butuhkan di antara yang gratis, tetapi kemudian saya menyadari bahwa butuh lebih banyak waktu untuk mencari daripada jika saya membuatnya sendiri. Oleh karena itu, saya hanya menciptakan sebagian besar suara dengan mulut saya di mikrofon telepon, dan kemudian memprosesnya menggunakan Audacity (perangkat lunak multi-platform gratis untuk merekam dan mengedit audio yang saya gunakan untuk mengubah suara dari satu format ke format lainnya).
Paling sering, logika untuk menciptakan efek suara di Audacity adalah sebagai berikut:
- Potong semua yang tidak perlu.
- Menggunakan efek Noise Reduction (untuk menghilangkan noise dari rekaman).
- Ditambahkan suara efek kartun Wahwah.
- Dengan efek, Bass dan Treble dimainkan dengan frekuensi sehingga suara terdengar lebih manis pada speaker smartphone.
- Jika saya mengatakan sesuatu, efek Change Pitch, Speed dan Tempo mengubah suara saya menjadi chipmunks.
Pada awalnya, suara saya jauh tertinggal di belakang acara (bukan di editor, tetapi di smartphone). Opsi Ukuran Penyangga DSP yang diatur ke Best latency (Edit -> Pengaturan Proyek -> Audio) membantu dan ini adalah tips (baik dalam pertanyaan dan dalam jawaban).
Bagaimana Daughter Menghasilkan Ide Ikon
Ketika saya sedang mengembangkan aplikasi, saya mencoba beberapa kali untuk membuat ikon sendiri, tetapi tidak ada yang berakar (dan sebenarnya, semacam ampas keluar). Karena itu, ketika datang untuk membuka publikasi, saya mempercayakan pengembangan ikon untuk putri saya. Saya menjelaskan kepadanya bahwa ikon tersebut harus menarik dan menjelaskan arti dari aplikasi tersebut. Dia muncul dengan sangat antusias dan langsung menggambar gambar yang benar-benar tidak cocok. Saya menolaknya dan menjelaskan apa yang sebenarnya perlu diperbaiki atau tidak digunakan sama sekali. Kemudian semuanya berjalan seperti yang diharapkan - dia tersinggung dan berhenti menggambar ikon.
Setelah setengah bulan, penghinaan berlalu dan dia melakukan tugas dengan lebih teliti: dia memotong kotak dari notebook ke dalam kotak (ukuran ikon di layar iPod-nya) dan mulai menggambar opsi satu per satu:

Membawa saya. Saya memilih ide yang saya suka. Dia mengatakan ke arah mana untuk melanjutkan. Dia pergi untuk menggambar opsi berikut. Setelah dua hari dan tiga lusin opsi, kami duduk di kanan bawah (foto di atas).
Kemudian saya meminta putri saya untuk menggambar versi ikon yang diperbesar (yang pertama di sebelah kiri pada gambar di bawah), yang saya didigitalkan (yang kedua di sebelah kiri) dan ... memanggil teman artis untuk membantu saya dengan pemilihan warna. Hasilnya, versi pusat diperoleh. Kemudian saya mulai secara bertahap menggiling ikon (kedua di sebelah kanan) sepanjang masa aplikasi di toko. Dan sekarang dia terlihat seperti paling kanan:

Android build
Video Unity Android Build ini - Cara membantu saya membuat file APK pertama saya, yang menceritakan cara mengkonfigurasi semuanya tanpa menginstal Android Studio yang berat.
Saya ulangi bahwa saya tidak memiliki perangkat dengan Android (saya hanya meminta teman saya untuk menguji setelah pembuatan baru) dan karena itu saya tidak memiliki kesalahan dengan perangkat yang ditampilkan dalam video.
Tetapi tanpa hambatan, itu masih tidak bisa dilakukan. Saya harus mengotak-atik pembaruan Android SDK untuk waktu yang lama, karena Unity tidak ingin bekerja dengan pembaruan terbaru. Sebagai hasilnya, ternyata perlu untuk memungkinkan Unity memilih dan menginstal versi yang diperlukan dari pembaruan itu sendiri. Yaitu Saya baru saja mengklik tombol Perbarui Android SDK di Unity itu sendiri, dan tidak mencoba memperbarui semuanya sendiri, seperti yang ditunjukkan dalam video.
Masalah memperbarui Android SDK secara manualSampai saya menyadari bahwa saya perlu memperbarui dari bawah Unity, saya menderita untuk waktu yang lama, memperbarui secara manual menggunakan skrip sdkmanager.bat (Anda perlu menggunakan skrip ini dengan parameter --update, dan bukan android.bat, yang ditunjukkan dalam video). Selama pembaruan, dia mengeluh bahwa dia tidak bisa menimpa folder alat (dari mana dia sendiri memulai). Saya mencoba banyak tips dan saya bahkan tidak ingat apa yang membantu, sepertinya semacam solusi dengan tautan simbolik.
Juga, kesalahan yang tidak dapat dipahami terkait dengan java muncul. Ternyata ada masalah dengan versi Java Development Kit - itu juga tidak perlu diinstal dengan versi terbaru. Saya mencoba beberapa yang lama dan salah satunya kesalahan hilang dan semuanya berhasil.
Dengan apk tanda tangan untuk penerbitan di Google Play, Bagaimana cara menandatangani aplikasi Unity untuk video pasar android membantu saya. Dengan hati-hati saya menyimpan dan menyimpan kedua kata sandi ini, karena kata sandi tersebut harus dimasukkan setiap kali Anda membuat bangunan baru. Dan jika Anda kehilangan mereka, Anda tidak akan dapat memperbarui aplikasi (cukup lepaskan yang baru dengan kunci baru).
Ikon, tidak seperti versi iOS, pada awalnya harus dibuat dengan sudut membulat, jika tidak pada beberapa perangkat, itu akan tetap persegi sempurna.
Ukuran build untuk Android
Sekarang ukuran file apk saya adalah 22MB.
Saya mengurangi ukuran perakitan dengan baik dengan format kompresi tekstur / sprite lossy - RGBA Crunched ETC2 (untuk sprite dengan alpha) dan RGB Crunched ETC (untuk tekstur tanpa alpha). Hal utama adalah mengatur Kualitas Kompresor = 100 (parameter ini tidak mempengaruhi kecepatan tekstur pada perangkat akhir, tetapi hanya kualitas tekstur dan kecepatan kompresi di editor).
Tarian lain dengan rebana tidak memungkinkan saya untuk mencapai pengurangan yang signifikan dalam ukuran file apk (kecuali untuk beberapa nuansa yang dijelaskan di bawah).
Sekarang saya menggunakan yang berikut ..
.. pengaturan dari Pengaturan Player ..
.. untuk ukuran minimum di satu sisi dan jangkauan maksimum perangkat di sisi lain:
- Unity 2018.1 (versi yang lebih baru, semakin baik paket dan semakin banyak semua barangnya).
- API Grafik Otomatis (Unity sendiri memilih OpenGLES2 dan 3).
- Scripting Backend - Mono (mungkin tidak lebih cepat dari IL2CPP, tetapi perakitannya pasti lebih kecil).
- Arsitektur Target - ARMv7 dan x86. Dengan menghapus dukungan Intel x86, saya mengurangi ukuran apk sebesar 10MB lainnya (itu akan menjadi 12MB). Tapi saya tidak tahu berapa banyak perangkat yang saya potong dengan menghapus tanda centang ini. Yang saya tahu adalah bahwa ponsel belum dirilis selama dua tahun di bawah arsitektur ini. Dan yang dapat dihitung dengan jari satu tangan (yang terakhir saya tahu adalah Asus Zenfone, Lenovo K 900, Xolo x1000 dan mungkin masih ada beberapa). Harap perbaiki saya di komentar jika saya berbicara omong kosong.
- Level Stirpping - Strip Assemblies - Memotong kode yang tidak perlu dengan aman. Opsi lain dapat dan memang membuat semacam peningkatan ukuran (saya belum perhatikan di rumah), tetapi tidak begitu aman.
- Build System - Gradle (memungkinkan Anda untuk mengaktifkan opsi Minify).
- Minify - Proguard - mempersingkat nama semua kelas dan variabel untuk menghemat ukuran byte yang menyedihkan, tetapi, sebagai bonus, membuat kode tersebut kurang mudah dibaca untuk mencegah rekayasa balik.
IOS build
Saya mengumpulkan aplikasi di macbook istri saya (saya ingat mereka mengambil MacBook Air termurah 2015).
Untuk membangun untuk iOS 7 bahkan dalam Xcode versi 9.3, itu sudah cukup untuk secara manual mendorong nilai 7.0 ke dalam bidang Target Penerapan (pada tab Umum ).
Untuk menambahkan bahasa (di mana saya menerjemahkan aplikasi menggunakan Lean Localization) ke deskripsi aplikasi di AppStore, kami harus menambahkan baris berikut ke file info.plist (di mana saja, misalnya, segera setelah <dict>):
<key>CFBundleLocalizations</key> <array> <string>English</string> <string>Russian</string> </array>
Sekarang saya menggunakan Unity 2017.4 untuk membangun iOS (seperti yang saya tulis di atas, saya butuh dukungan iOS 7, kalau tidak saya akan menggunakan 2018.1).
Ukuran build iOS
Sekarang ukuran file yang diunduh untuk iPhone saya adalah 44 MB.
Sayangnya, di bawah iOS saya tidak dapat menggunakan sprite Crunched, karena mereka tidak didukung pada perangkat yang lebih tua dari iPhone 5s ( tanpa dukungan untuk Metal dan OpenGL ES 3.0 ).
Ketika saya mencoba mengurangi ukuran build dengan biaya berapa pun, ukuran terkecil (34 MB) diperoleh jika:
- gunakan Unity 2018 (mis. versi yang didukung minimum adalah iOS 8),
- API Grafik hanya pilih Logam,
- tinggalkan Target Architecture x64 saja,
- gunakan tekstur yang renyah.
Tetapi saya masih belum menemukan cara untuk bekerja dengan penipisan aplikasi - ini adalah hal yang memungkinkan appstore untuk secara otomatis membangun aplikasi saya untuk iPhone / iPad / iPod pengguna akhir tertentu (yang mengarah pada penurunan ukuran file yang diunduh). Saya sendiri punya waktu untuk menyusun artikel ke dalam bookmark saya:
Pengaturan Player Saya ingin saya bagikan:
- Lebih mudah untuk memasukkan ID Tim Penandatanganan Otomatis satu kali (Anda bisa mendapatkannya di situs web Pengembang Apple di sini Akun> Keanggotaan ) dan centang kotak Otomatis Masuk sehingga Anda tidak melakukannya setiap kali dalam Xcode nanti.
- Saya mengatur Frekuensi Akselerometer ke Dinonaktifkan (Saya menonaktifkan akselerometer), karena saya tidak menggunakannya. Saya bisa menghemat sedikit baterai orang.
- Perilaku di Latar Belakang - Tangguhkan - dengan cara ini aplikasi tidak ditutup ketika Anda menekan tombol Rumah, tetapi terus bekerja di latar belakang (Anda dapat menangkap acara ini menggunakan OnApplicationPause untuk menyimpan permainan, misalnya).
Bagaimana saya memilih nama dan apa yang saya gunakan untuk promosi
Berapa banyak yang menggunakan Booking dan TripAdvisor, tetapi saya tidak pernah memperhatikan bahwa nama mereka di AppStore bukan hanya Pemesanan, tetapi “Penawaran Perjalanan Booking.com” dan “Restoran Hotel TripAdvisor” (nama tersebut diencerkan dengan kata kunci, sehingga aplikasi didasarkan pada kata kunci ini ditemukan dalam mencari apstor). Oleh karena itu, saya memutuskan untuk tidak menggunakan nama lama Math4Ami, tetapi untuk waktu yang lama saya bermain dengan kata-kata yang berbeda untuk memasukkan kata kunci yang saya butuhkan. Pada akhirnya, saya pertama kali datang ke Uang Saku: Matematika, dan kemudian Belajar Matematika & Dapatkan Uang Saku. Di Rusia, opsi ini terdengar seperti Uang Saku untuk Matematika dan Uang Saku dan Matematika: Belajar dan Dapatkan.
Saya mempromosikan aplikasi saya dengan mengirim / menerbitkan tautan ke teman dan kenalan, menulis dua artikel di blog saya dan menggantung spanduk di tempat yang sama.
Omong-omong, jika Anda meletakkan baris ini di halaman web <head>:
<meta name="apple-itunes-app" content="app-id=1372434662" />
.. lalu, membuka halaman ini di iPhone, semua orang akan melihat spanduk aplikasi Anda di bagian atas.
Unduh statistik
Pertama saya merilis versi iOS.

Banyak orang berbicara tentang ketidaksukaan terhadap perangkat apple dan yakin bahwa Android jauh lebih keren. Saya memutuskan untuk memeriksa dan, setelah 20 hari proses perakitan file apk, membuat rilis di Google Play.

Anda tidak akan membuat kesimpulan obyektif (atau tidak sama sekali), tetapi murni subjektif - saya harapkan lebih dari platform Google, tetapi pada saat itu ternyata setengah lebih buruk daripada Apple.
Saya menyesal bahwa:
- Saya tidak melakukan backup saat beralih ke versi baru Unity,
- tidak menggunakan sistem kontrol versi (seperti git),
- Saya mencoba untuk bekerja dengan Perforce (hanya sistem yang mengerikan - itu tidak realistis memperlambat pengembangan),
- belum pernah menggunakan ScriptableObject (SO) sebelumnya - sangat keren
- Saya menulis kode dalam satu lembar panjang (menakutkan untuk mengingat bagaimana saya refactored lembar ini nanti),
- Saya tidak tahu apa itu bau kode , tapi oh betapa saya perlu tahu
- Saya mencoba menggunakan variabel global di mana-mana, dan bukan variabel lokal (berpikir paranoid bahwa jika saya sering meminta fungsi, maka variabel lokal di dalam fungsi akan dibuat lagi dan lagi, dan hanya akan ada satu yang global. Akibatnya, setelah ratusan panggilan ke fungsi dengan variabel lokal, Saya akan memiliki banyak memori yang terbuang dan kehilangan kinerja karena Pengumpul Sampah),
- Saya tidak selalu mematuhi gaya seragam dalam kode dan atas nama semua aset. Ini adalah panutan yang baik untuk UE4 (ada banyak hal berguna tentang penamaan aset dan saya juga menggunakannya di Unity),
- Saya lupa bahwa saya menulis aplikasi terutama untuk putri saya, dan bukan demi kode yang indah atau untuk menyenangkan pengguna lain.
Saya menyadari bahwa:
- anak-anak sangat mudah duduk di aplikasi saya (segera setelah menginstal aplikasi, mereka dapat menggantung selama berjam-jam di dalamnya sampai baterai di telepon duduk),
- anak-anak kecanduan melakukan matematika dalam aplikasi saya, bahkan jika mereka tidak berbicara tentang uang. Jika ada dua anak dalam keluarga, itu bahkan bertengkar melalui telepon untuk memecahkan contoh,
- Aplikasi saya bosan dengan sangat cepat untuk anak-anak. Keesokan harinya, beberapa orang memainkan aplikasi, bahkan jika anak itu menyadari bahwa ia akan menerima uang untuk itu,
- retensi pengguna / anak yang buruk bukan masalah aplikasi saya secara khusus, tetapi spesifik mengajar anak-anak (ini diceritakan kepada saya oleh guru sekolah). Aplikasi harus sangat beragam untuk menjaga minat pada anak setiap saat,
- cukup sering, orang tua dan anak-anak salah mengartikan prinsip aplikasi dan berpikir bahwa dengan memecahkan contoh mereka akan menerima uang dari saya (dari pengembang). Saya menerima surat berbeda dengan pertanyaan seperti: bagaimana cara menarik uang, dapatkah saya menarik ke webmoney atau paypal, di mana menentukan alamat pengiriman uang dengan cek, dll.,
- jika Anda meminta maaf atas kesalahan dan kekeliruan Anda dalam jawaban atas ulasan buruk (dan juga menjelaskan bagaimana seharusnya itu bekerja), maka orang cenderung memaafkan kesalahan dan menghapus nilai buruk,
- Anda tidak melakukan promosi Anda sendiri,
- anak-anak tumbuh sangat cepat dan ketika saya sedang menulis aplikasi - anak saya sudah lebih besar dari itu. Tapi, "tester" baru saya tumbuh!
Referensi
Daftar tautan dari artikel sesuai urutan penyebutannya:
+ Cara menjaga gaya kode tunggal Panduan Gaya C # dengan Unity dalam pikiran .
+ GitHub dan video tentang cara mengacaukan git ke Unity .
+ Ada repositori pribadi gratis di GitLab atau Bitbucket .
+ Audacity Gratis untuk merekam dan mengedit audio.
+ Cara menghapus penundaan suara .
+ Tutorial Video Build Android Unity - Cara .
+ Video Cara menandatangani aplikasi Persatuan untuk pasar android .
+ Perangkat Apple yang mendukung Metal / OpenGL ES 3 .
+ Penipisan aplikasi (Dokumentasi Apple).
+ Penipisan aplikasi (bantuan Persatuan).
+ Alur Kerja AssetBundle (dokumentasi Persatuan).
+ Di mana mendapatkan ID Tim .
+ Apa itu bau kode .
+ Prinsip penamaan aset / sumber daya dalam proyek game di UE4 .
Terima kasih sudah membaca!