Kisah saya tentang membuat aplikasi motivasi (iOS dan Android) untuk anak perempuan dengan anak perempuan di Unity dan C #

Kisah penciptaan aplikasi yang memungkinkan anak-anak mendapatkan uang dengan pikiran mereka


Ini adalah bagian pertama 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 dan Android yang akan memotivasi putri saya untuk memecahkan contoh matematika sehingga dia mencapai otomatisme dalam dasar-dasar aritmatika (nomor gudang 10 atau pelat multiplikasi). Akibatnya, ternyata sebuah aplikasi yang memungkinkan seorang anak mendapatkan uang dengan pikirannya.


Saya menggunakan mesin Unity dan bahasa C #, serta seperangkat perangkat lunak tambahan seperti Photohsop atau Audacity wajib (untuk membuat suara).


Garis besar cerita (bagian satu)


  • Latar belakang
  • Tentang monetisasi
  • Mengapa bersatu
  • Tentang Objek Skrip
  • Tentang Plugin Anima2D
  • Tentang Pelokalan Lean
  • Tentang ITween
  • Tentang Unity Analitics
  • Tentang Visual Studio
  • Referensi

Latar belakang dan kumbang Colorado


Pengalaman saya sebelumnya adalah beberapa tahun dalam 3D dan, baru-baru ini, pengembangan beberapa game indie bersama dengan seorang programmer, di mana saya bertindak terutama sebagai desainer dan artis (sangat jarang menulis beberapa skrip dasar dalam C #). Meskipun demikian, saya terbiasa dengan pemrograman secara langsung (saya terbiasa memukul Basic di sekolah dan mencoba-coba C / C ++ di universitas).


Seluruh epik ini dimulai dengan masalah. Saya melihat bahwa ketika menyelesaikan masalah sekolah, putri saya "kios" dan keliru, bukan pada sesuatu yang rumit, tetapi atas dasar. Saya memutuskan akan menyenangkan jika saya menulis kepadanya aplikasi lucu di mana dia akan memecahkan contoh dalam bentuk permainan (mendapatkan pengalaman dengan cara ini dan mencapai otomatisme). Dan untuk lebih memotivasi dia, saya memastikan bahwa dia menerima uang untuk keputusan yang benar dari contoh (jumlah uang dihitung oleh aplikasi berdasarkan jumlah jawaban yang benar, dan kemudian saya menyimpulkan jumlah yang diperlukan, membayar tunai kepada putri saya).


Meskipun ... cerita ini dimulai lebih awal. Pertama, saya menjadikan putri saya aplikasi yang membayar uang untuk belajar kata-kata bahasa Inggris. Tetapi aplikasi ini ternyata jauh lebih sulit untuk diterapkan sehingga menjadi nyaman tidak hanya untuk saya (pengembang) dan putri saya, tetapi juga untuk orang tua lainnya. Oleh karena itu, aplikasi bahasa Inggris masih merupakan pengembangan internal.


Saya memilih uang sebagai motivator, karena itu yang paling mudah diterapkan. Dan juga karena kenangan masa kecil pribadi: Saya suka melakukan segalanya demi uang. Bahkan jika itu adalah pekerjaan yang sangat membosankan, seperti mengumpulkan kumbang kentang Colorado. Saya ingat mengumpulkan toples setengah liter mereka (orang tua saya membayar saya 1 kopeck untuk setiap bug). Jadi saya pikir sejak putriku (saya tidak memeriksanya, tapi saya cukup yakin tentang itu), maka dia harus menyukainya. Nah, pada akhirnya saya tidak rugi.


Istri saya menentang mendorong anak-anak untuk melakukan sesuatu demi uang. Tapi argumen saya sedikit meyakinkannya: dalam hal aplikasi ini, anak menerima uang bukan untuk apa yang harus ia lakukan (seperti pekerjaan rumah), tetapi karena fakta bahwa ia juga mempraktikkan matematika di waktu luangnya.


Alasan kedua saya mulai berkembang adalah karena saya ingin berlatih pemrograman. “Menjadi seorang programmer” telah menjadi impian saya sejak kelas satu di sekolah (tepat setelah mimpi "menjadi seorang ilmuwan", tetapi sebelum mimpi "membuat kartun").


Monetisasi dan kesenangan


Awalnya, saya membuat aplikasi ini (nama kerjanya adalah Math4Ami) khusus untuk iPod touch 5 putri saya. Saya bahkan tidak berpikir untuk membuat aplikasi tersedia di semua perangkat iOS atau menerbitkannya untuk semua orang dan, terutama, saya tidak berpikir untuk merilisnya untuk platform Android (saya mendengar banyak cerita menyeramkan dari para pengembang iOS plus, saya tidak memiliki apa pun untuk menguji versi Android aktif).


Beberapa waktu yang lalu, saya tergoda untuk menerbitkannya di AppStore (saya sangat tertarik dengan pemikiran bahwa saya akan memiliki aplikasi saya sendiri di toko Apple dan semua orang bisa melihatnya).


Saya pikir dalam sebulan saya akan berhasil. Lagipula, semua fungsi sudah siap, satu-satunya yang tersisa adalah membuatnya berfungsi untuk semua rasio aspek layar dan dimengerti tidak hanya untuk saya, tetapi juga untuk orang tua lainnya. Dan sekarang, enam bulan kemudian, saya menerbitkannya di AppStore dan Google Play.


Awalnya saya memutuskan untuk membuat Math4Ami benar-benar gratis tanpa sedikitpun monetisasi. Ada beberapa alasan untuk keputusan ini.


Yang pertama. Seperti yang sudah Anda pahami, pada awalnya saya membuatnya gratis untuk putri saya dan tidak ingin mengacaukan apa pun pada "akhir" perkembangannya.


Yang kedua. Saya memutuskan bahwa itu akan menjadi pengembangan untuk kesenangan saya sendiri. Saya sudah memiliki pengalaman serupa - saya membuat blog untuk kesenangan (yang awalnya hanya memakan uang: uang untuk hosting dan nama domain, waktu untuk menulis artikel dan promosi mereka). Logika saya adalah ini: jika saya membayar uang untuk mengunjungi taman air, membeli buku atau es krim untuk bersenang-senang, lalu mengapa saya tidak mampu membayar uang untuk hosting, nama domain atau keanggotaan dalam Program Pengembang Apple, jika itu juga membawa saya kesenangan.


Yang ketiga - demi audiens yang lebih luas, yang akan dipotong secara signifikan, membuat aplikasi dibayar (seperti banyak pengembang aplikasi anak-anak lakukan). Saya menolak jenis monetisasi lain karena alasan yang dijelaskan di bawah ini.


Saya tidak tahan dengan iklan dalam gim - saya tidak suka kalau desain aplikasi rusak oleh pesan iklan (kecuali untuk iklan dalam bentuk penayangan video sesuka hati , dan tidak ketika video muncul di sudut jalan). Selain itu, untuk berpartisipasi dalam program "Dibuat untuk anak-anak" di Apple dan "Dirancang untuk Keluarga" di Google, Anda perlu memfilter iklan yang ditampilkan kepada anak-anak secara ketat.


Pembelian dalam game, saya sendiri, sebagai orang tua, memblokir semua perangkat dan anak-anak, ketika mereka mengunduh aplikasi sendiri, secara fisik tidak dapat membeli apa pun di dalam aplikasi. Hal lain adalah ketika orang tua sendiri awalnya membeli aplikasi untuk anak tersebut (tetapi saya sudah mengatakan hal ini di atas).


Mengapa Persatuan dan Bagaimana


Saya memilih Unity karena saya bekerja di dalamnya sebelumnya dan saya menyukainya. Saya juga punya teman baik sebagai programmer C # dan saya berharap dia akan membantu saya dengan pemrograman, jika itu. Unity juga memiliki komunitas yang cantik dan sangat mudah untuk menemukan jawaban di Google untuk hampir semua pertanyaan mengenai penerapan sesuatu di C # + Unity.


Saya juga bekerja dengan Unreal (sebagai seniman 3D), tapi saya tidak mengerti fungsionalitas C ++ atau 2D.


Awalnya, Math4Ami "mendung", meskipun dikatakan keras. Semua data disimpan di eVPS saya (Elastic Virtual Private Server) dan saya menggunakan FTP untuk mentransfer file TXT dengan pengaturan data dan aplikasi (tangan saya tidak mencapai basis data, meskipun saya sudah menulis langkah pertama menulis server saya di node.js melakukan). Untuk bekerja dengan ftp saya memasang Unity ke Wikipedia C # FTP Class yang mudah digunakan .


Kemudian, ketika saya memutuskan untuk membuat aplikasi publik, saya meninggalkan sisi server.


Di satu sisi, itu akan terlalu membingungkan: untuk melakukan otentikasi (pengguna tidak suka ini) atau menyimpan pengidentifikasi sesi di iCloud menggunakan NSUbiquitousKeyValueStore (ini akan secara otomatis mengidentifikasi pengguna antara mencopot pemasangan aplikasi dan menginstalnya kembali), tetapi saya masih belum mengetahuinya dengan ini (mungkin artikel yang saya tulis plugin Unity dengan benar akan membantu saya . Bagian 1: iOS , tapi belum).


Di sisi lain, data dalam aplikasi ini tidak begitu penting sehingga perlu disimpan di server.


Di pihak ketiga, tidak perlu sinkronisasi server. Di sini untuk aplikasi saya untuk mengajar bahasa Inggris - ya di sana, sinkronisasi diperlukan. Karena orang tua menambahkan kata-kata baru dalam aplikasi orang tua, dan anak itu mengajarkannya dalam aplikasi anak-anak (walaupun mungkin saya seorang amatir yang memperumit masalah).


Sebagai hasilnya, saya memastikan bahwa semuanya disimpan secara lokal (pada perangkat), tetapi tidak dalam txt, tetapi dalam format JSON.


ScriptableObject dan jawaban yang benar


Format JSON dalam hubungannya dengan ScriptableObject ternyata menjadi penemuan yang indah. Saya menggunakan metode asli UnityEngine untuk membuat serialisasi objek di json - JsonUtility (dan kemudian menyimpan file teks json secara lokal di perangkat ke folder Application.persistentDataPath ).


ScriptableObject (SO) adalah topik pembicaraan yang terpisah, tetapi saya masih akan menyentuhnya. Saya bahkan tidak bisa membayangkan bagaimana saya hidup tanpa SO.


Semua yang saya gunakan dalam pekerjaan saya, saya dapatkan dari dua video mega-berguna ini tentang prinsip-prinsip bekerja dengan SO (dan kode yang menyertainya pada GitHub dan Bitbucket):



Secara pribadi, saya menggunakan SO untuk tujuan tersebut:


  • Untuk menyimpan data (sehingga Anda tidak perlu masuk ke kode setiap kali untuk menambahkan fungsionalitas atau data baru):
    • berbagai contoh
    • jenis mata uang
    • gaya tombol (saya memiliki tombol yang sama di banyak tempat dan saya hanya membuat skin untuk mereka berdasarkan SO),
    • nilai hadiah, dll.

  • Sebagai variabel global (yang terlihat di semua adegan):
    • jumlah jawaban yang benar
    • jumlah uang yang didapat
    • pengaturan saat ini aktif
    • jenis contoh saat ini
    • pengatur waktu, skor tinggi, dll.

  • Untuk menyimpan logika (misalnya, berlangganan acara menerima jawaban yang benar).

Satu-satunya minus dari SO untuk bekerja dengan data adalah bahwa Anda tidak dapat menyimpan data antara sesi aplikasi di dalamnya: Aset SO (setelah awal yang dingin dari aplikasi) akan selalu berisi data yang Anda tulis di editor. Karena itu, logika pekerjaan saya adalah sebagai berikut:


  1. Setelah memulai aplikasi, saya membaca file json dari disk dan memuat data dari mereka ke dalam aset SO (metode FromJsonOverwrite).
  2. Saat aplikasi sedang berjalan dan saya membutuhkan kinerja maksimum - Saya hanya bekerja dengan aset Objek Skrip. Aset ini menyimpan data sepanjang waktu saat aplikasi sedang berjalan atau di latar belakang.
  3. Ketika Anda perlu menyimpan data (misalnya, pada penghentian aplikasi atau saat Anda bekerja), saya membuat serialisasi SO ke json (metode ToJson) dan menyimpannya ke disk.

Ada kelemahan (jelas) dari pendekatan ini - Anda tidak dapat menyimpan hanya satu parameter yang diubah ke disk (jika ada beberapa dari mereka dalam SO), Anda harus menyimpan seluruh file teks json sepanjang waktu.


Tetapi banyak data tidak perlu disimpan ke disk (misalnya, jumlah jawaban yang benar saat ini) dan kemudian SO adalah alat yang ampuh yang memungkinkan saya untuk sangat menyederhanakan pekerjaan.


Dalam video di bawah ini, saya menunjukkan contoh implementasi akuntansi saya untuk jawaban yang benar dan salah menggunakan UnityEvent (peristiwa - apakah jumlah jawaban yang benar berubah) + Pendengar (pendengar melakukan beberapa pekerjaan jika mereka mendengar bahwa jawaban yang benar diterima, dan logika berlangganan pendengar ke acara tersebut juga diimplementasikan pada SO) + SO (melacak jumlah jawaban yang benar):



Jadi, saya tidak hanya dapat memasukkan jawaban yang benar dan salah dengan tangan saya, tetapi hanya dengan menggerakkan bilah geser, menghasilkan contoh-contoh baru dan menguji logika aplikasi.


Anima2D, karakter dan senyum berkedut


Video di atas menunjukkan bahwa ketika satu sen baru jatuh, sen lainnya mulai tersenyum lebar, dan ketika kotoran jatuh, sen itu ngeri.


Untuk waktu yang lama saya tidak bisa mengalahkan kesalahan itu, ketika ketika beralih dari satu jenis senyum ke yang lain, perubahan itu tidak terjadi secara instan, tetapi berkedip (dari satu kondisi ke kondisi lain) untuk sementara waktu. Selanjutnya saya akan memberi tahu Anda bagaimana saya menyadari hal ini dan bagaimana saya mengalahkan kesalahan ini.


Perubahan ekspresi wajah diimplementasikan menggunakan skrip Animasi Sprite Mesh, yang merupakan bagian dari plugin Anima2D yang kuat (yang baru-baru ini dibeli dan dibuat gratis oleh Unity). Skrip ini pada dasarnya hanya mengganti sprite untuk mulut (senyum, senyum terbuka, mulut takut) menggunakan slider Bingkai :


animasi sprite mesh mengubah ekspresi wajah dengan sprite


Seluruh penyergapan adalah bahwa nilai slider Frame tidak dapat diubah langsung dari skrip, tetapi hanya melalui sistem animasi. Oleh karena itu, saya membuat layer animasi OpenSmile baru (panah 1 pada gambar di bawah) dalam mode campuran Additive dengan bobot Weight = 1 dan menambahkan animasi horor ( Coin_scared ) dan senyum lebar ( SmillingWide ) di sana.


Ngomong-ngomong, apakah Anda memperhatikan contoh buruk yang saya setting, dengan nama-nama animasi? Saya masih dalam proses membawa nama ke gaya tunggal. Itu akan benar untuk mengubah Coin_scared ke A_CoinScared (mengapa hanya membaca itu di bagian "Apa yang saya sesali").


Saya membuat layer baru, dan tidak menggunakan yang lama, karena saya tidak ingin menimpa animasi mulut. Yang harus saya lakukan adalah mengubah sprite dari mulut (dari senyum ke senyum lebar atau dari senyum ke horor) dan sehingga animasi mulut tetap dari lapisan dasar. Itulah sebabnya saya memilih mode campuran Aditif - menambahkan animasi baru ke yang sudah ada (tanpa menimpanya).


Pada intinya, animasi SmillingWide dan Coin_scared hanyalah animasi dari slider Bingkai di posisi 1 dan 2, masing-masing.


mengatur transisi antara animasi ekspresi wajah


Seluruh masalah adalah bahwa transisi dari keadaan apa pun ke keadaan horor (ketika Anda mengklik transisi (panah 2 pada gambar di atas), inspektur membuka properti transisi ini (panah 3 pada gambar di atas)) tidak terjadi secara instan, tetapi lancar di selama Durasi Transisi (panah 4 pada gambar di atas), yang bukan nol secara default. Dengan demikian, nilai slider Bingkai tidak dapat diubah dengan benar, karena hanya ada bilangan bulat, yang berarti tidak ada nilai menengah antara 0 dan 1. Oleh karena itu, untuk menghilangkan kesalahan yang berkedip, hanya perlu mengatur ulang nilai Durasi Transisi .


Nah, trigger isScared (panah 5 pada gambar di atas) berfungsi sebagai kondisi untuk masuk ke dalam keadaan ngeri. Saya mengaktifkan pemicu ini dalam kode menggunakan panggilan berikut ke objek di mana komponen Animator hang (dengan controller, lapisan yang saya tunjukkan di atas):


...GetComponent<Animator>().SetTrigger("isScared"); 

Bagaimana saya menerjemahkan aplikasi ke berbagai bahasa


Di suatu tempat di sini, di Habré, saya membaca bahwa Anda harus berpikir tentang pelokalan pada awal pembuatan aplikasi dan saya mengikuti saran ini ... segera ... setelah satu setengah tahun pembangunan (segera setelah saya memutuskan bahwa Math4Ami akan menjadi publik).


Mengapa saya memilih Lean Localization (kecuali untuk alasan plugin itu gratis) saya tidak ingat, tetapi saya ingat bahwa saya memilih untuk waktu yang lama dan sulit.


Menggunakannya ternyata sangat sederhana. Anda dapat secara manual mengatur bahasa atau menggunakan deteksi bahasa otomatis. Saya memilih deteksi bahasa otomatis (mengikuti contoh aplikasi anak-anak lain).


Plugin menerjemahkan semuanya (dari teks ke suara dan gambar).


Tetapi saya masih membuat satu kesalahan dengan pelokalan (walaupun saya sengaja melakukannya, karena saya ingin mencoba pendekatan yang berbeda). Kesalahannya adalah saya tidak meletakkan semua frasa dalam file teks (di sebelah kiri pada gambar di bawah). Beberapa frasa tetap berada di dalam komponen Lokalisasi Lean (di sebelah kanan pada gambar di bawah). Jadi sekarang, ketika saya memberikan file ini ke penerjemah Jepang, saya harus bekerja secara manual (untuk mentransfer SEMUANYA ke file teks).



Meskipun, beberapa hal tidak dapat diterjemahkan dengan file teks (seperti spasi "", yang saya gunakan sebagai pemisah antara ribuan) - Anda masih harus menggunakan komponen.


ITU Berair


Sekali waktu saya menonton video Juice yang indah atau kehilangannya tentang bagaimana segala macam micromotion kecil dan nuansa animasi membantu membuat aksi yang menakjubkan dari permainan yang membosankan. Dan bahkan sebelum itu, video lain masuk ke dalam jiwaku - Seni screenshake , yang sebenarnya bukan hanya dan tidak begitu banyak tentang guncangan layar.


Sepanjang waktu saya membuat Math4Ami, saya selalu mengingat konsep-konsep dari video di atas, serta gagasan bahwa semua animasi tambahan ini harus sesingkat mungkin dan bertindak lebih banyak di alam bawah sadar daripada di alam sadar. Kadang-kadang, saya menghabiskan lebih banyak waktu menambahkan "juiciness" daripada menambahkan fungsionalitas yang berguna.


Hanya satu tempat yang sangat mengganggu saya - hitungan terakhir dari uang yang didapat (Anda dapat melihat momen ini di akhir demo video saya di atas). Saya memendekkannya sesegera mungkin, tetapi masih membutuhkan sedikit lebih dari 4 detik (keyboard menghilang, kemenangan prasasti muncul, copeck sedang dihitung, tabel catatan dikeluarkan, plat nama "Perekam Baru" ditampilkan, tombol "Lainnya" ditampilkan).


“Sumber jus” terbaik bagi saya adalah tambahan iTween gratis. Saya bahkan tidak bisa membayangkan bagaimana tanpa Unity Anda bisa melakukan apa saja. Saya menggunakannya di mana pun setidaknya diperlukan beberapa jenis animasi (apakah itu animasi tombol atau tampilan item menu atau animasi penghitungan sen).


Saya mencoba menerapkan sesuatu yang serupa pada saya sendiri berdasarkan pada coroutine dan Mathf.Lerp atau Mathf.MoveTowards, tetapi itu tidak fleksibel dan tidak universal (dan kadang-kadang itu bekerja secara berbeda di editor dan di perangkat). Jadi sekarang saya tidak mencoba menemukan kembali roda, saya hanya menikmati iTween.


Ada jebakan dalam sistem animasi ini, yang pada awalnya saya salah bertarung:


  • Jika selama kerja iTween untuk menyembunyikan objek (melalui SetActive (false) , misalnya), dan kemudian menunjukkannya lagi, maka iTween akan terus dieksekusi dari tempat yang terputus.
  • Jika selama operasi satu Antara Anda memulai yang lain (yang mempengaruhi nilai yang sama), maka pada akhir pelaksanaan keduanya, objek mungkin tidak kembali ke posisi semula.
  • Anda harus melacak GameObject yang meluncurkan iTween, dan animasi mana yang bekerja.

Misalnya (pada titik terakhir), objek A mulai iTween sehingga berfungsi pada objek B. Untuk menghentikan animasi iTween, Anda tidak bisa memulai iTween.Stop () pada objek A. Anda harus memulai iTween.Stop (objek B).


Kekuatan iTween adalah kemampuannya untuk menggunakan berbagai jenis pelonggaran. Ising adalah parameter yang melembutkan gerakan (sehingga tidak memulai dengan tersentak-sentak dan tidak berakhir dengan bodoh).


Temuan yang luar biasa bagi saya adalah jenis ising:


  • musim semi
  • easyOutBounce
  • kemudahanInBack
  • easyOutElastic

Untuk menemukan ising yang tepat, saya menggunakan Visual Easing Demo (saya perlu flash). Dan di sini saya mengambil dokumentasi untuk semua jenis animasi iTween .


Statistik Apple dan Google bagus, tetapi Unity Analytics lebih baik


Bahkan dari pengalaman permainan sebelumnya, saya tahu bahwa memiliki statistik sendiri sangat keren. Awalnya saya ingin membuat semacam sistem logging, tapi kemudian saya ingat Unity Analitics . Dan apa yang mengejutkan saya ketika ternyata versi gratis dari fungsionalitas untuk kasus saya tidak dibatasi oleh apa pun. Saya akan lebih buruk jika saya memiliki semacam monetisasi, maka alat analitik hanya tersedia untuk pelanggan Pro.


Dengan hanya menyematkan Analytics.CustomEvent di tempat yang tepat dalam kode, saya dapat melacak contoh mana yang lebih populer, berapa banyak anak yang memecahkan contoh di hari-hari pertama atau setelah beberapa saat, dll.


Saya dapat membandingkan data dari berbagai platform (iOS dan Android) di satu tempat.


Dan berapa banyak hal yang menarik di sana, apa yang ingin saya coba, tetapi semua tangan tidak menjangkau. Ketik Pengaturan Jarak Jauh (mengubah konten aplikasi tanpa memperbarui) atau Pengujian A / B atau Manajer Tutorial .


Visual Studio seperti Sublime


Di masa lalu, ketika saya perlu mengedit beberapa kode (baik itu python, html atau node.js) saya menggunakan Notepad ++ (sepenuhnya gratis, tetapi hanya pada Windows) dan Sublime Text (dibayar untuk semua OS, tetapi Anda dapat mencobanya secara gratis )


Di Unity, saya duduk di MonoDevelop, tapi dia sangat muak dengan gangguannya (seperti ketidakmampuan untuk beralih di antara tata letak atau menempelkan sesuatu yang disalin di luar Mono) sehingga saya memutuskan sudah waktunya untuk menjatuhkan kapal yang tenggelam dan naik ke Visual Studio Community 2017 (bagus, gratis untuk pengembang tunggal seperti saya).


Untuk pengembang di Unity 2018, ini tidak relevan saat ini, karena Visual Studio Code multi-platform termasuk dalam versi 2018. Tetapi saya ingin aplikasi saya bekerja di bawah iOS 7 (karena iPhone putri saya menggunakan iOS ini), jadi saya harus menggunakan versi Unity yang lebih lama dari 2018.


Ini membantu saya dengan transisi ke video VS Cara mensetup Visual Studio with Unity .


Dari kotak, VS tidak memiliki semua hal keren yang biasa saya gunakan di editor lain, jadi saya menyederhanakan hidup saya:


  • menyalakan minimap alih-alih gulir vertikal sederhana:

Cara mengaktifkan minimap di studio visual bukan hanya menggulir


  • menambahkan ekstensi SemanticColorizer , yang memungkinkan penyesuaian warna kode yang lebih fleksibel. Secara khusus, saya membutuhkannya untuk membedakan variabel global dari variabel lokal berdasarkan warna.
  • ekstensi Match Margin terpasang, yang memilih kata di bawah carriage dan semua salinannya sesuai dengan teks kode, dan juga melakukan ini pada minimap. Ini sangat nyaman untuk navigasi kode cepat, untuk menemukan semua tempat di mana beberapa metode atau variabel digunakan:

desain kode dan minimap yang ditingkatkan di studio visual


  • Saya menggunakan Strip'em untuk secara otomatis memperbaiki akhir baris.

Skrip saya untuk aplikasi ini ada di GitHub. Hanya ada skrip saya, dan bukan keseluruhan proyek Unity - maaf, jika ini membuat mereka tidak bisa dimengerti. Sampai saat-saat terakhir, saya tidak berencana untuk memberikan tautan ke sumber, karena saya tidak menganggap kode saya sebagai hal yang layak untuk difokuskan. Tapi kemudian dia berubah pikiran karena kemungkinan pengembang yang lebih berpengalaman bisa menunjukkan kesalahan saya.


Ini adalah akhir dari bagian pertama. Lanjutkan membaca di bagian kedua , di mana saya akan memberi tahu:


  • Tentang menulis kode
  • Tentang kontrol versi
  • Tentang akting suara
  • Tentang ikon
  • Tentang Android Build
  • Tentang build untuk iOS
  • Tentang judul dan promosi
  • Statistik
  • Apa yang saya sesali
  • Apa yang dipahami

Referensi


Daftar tautan dari badan artikel sesuai urutan penyebutannya:


+ Kelas C # FTP Sederhana.
+ ID Sesi untuk iOS.
+ Kami menulis plugin untuk Unity dengan benar. Bagian 1: iOS .
+ Metode untuk membuat objek bersambung dalam JSON (bantuan resmi).
+ ScriptableObject (bantuan resmi).
+ Video tutorial Arsitektur Game dengan Objek Skrip ( kode ).
+ Workshop Menggulingkan MonoBehavior Tyranny dalam Revolusi Objek Skrip yang Agung ( kode ).
+ Demonstrasi video aplikasi saya di editor .
+ Plugin Anima2D Gratis untuk animasi skeleton karakter 2D .
+ Perpustakaan gratis untuk pelokalan aplikasi - Pelokalan Lean.
+ Video tentang trik yang meningkatkan persepsi permainan Juice atau kehilangannya .
+ Video tentang teknik akting bawah sadar animasi Seni screenshake .
+ Sistem animasi iTween gratis tapi kuat.
+ Demonstrasi visual dari jenis ising (perlu flash).
+ iTween (bantuan resmi).
+ Analitik Persatuan .
+ Editor teks Notepad ++ dan Sublime Text .
+ Komunitas Visual Studio 2017 dan Kode Visual Studio .
+ Video tutorial Cara mengatur Visual Studio dengan Unity .
+ Plugin SemanticColorizer (untuk pengaturan warna kode).
+ Plugin Match Margin (memilih kata di bawah carriage dan semua salinannya).
+ Plugin Strip'em (koreksi otomatis akhir baris).

Source: https://habr.com/ru/post/id414611/


All Articles