قصة إنشاء تطبيق محمول للأطفال يسمح لك بكسب المال من خلال عقلك. استمرار

استمرارًا لتاريخ تطور تطبيق الهاتف المحمول iOS / Android لتحفيز الأطفال على القيام بالرياضيات


هذا هو الجزء الثاني من القصة (ممزوجًا بقصة أخطائي وحلولها) حول كيفية تطوير (على مدار عامين في وقت فراغي) لتطبيق جوال (لنظامي iOS / Android) من شأنه تحفيز ابنتي على حل أمثلة الرياضيات. ونتيجة لذلك ، تبين أنه تطبيق يسمح للطفل بكسب المال بعقله.


اقرأ الجزء الأول هنا .


خطة الجزء الثاني


  • حول كتابة التعليمات البرمجية
  • حول التحكم في الإصدار
  • حول التمثيل الصوتي
  • حول الرمز
  • حول تصميم Android والحجم
  • حول التصميم لنظام iOS وحول الحجم
  • حول العنوان والترويج
  • الإحصائيات
  • ما يؤسفني
  • ما فهمه
  • المراجع

التوافه في البرمجة التي تجعل حياتي أسهل


  • منذ Mono ، أستمر في استخدام // TODO (في التعليقات) لوضع علامة على الأماكن التي يجب الانتهاء منها. بعد ذلك ، يمكن مراقبة جميع هذه الأماكن بسهولة في علامة التبويب "قائمة المهام" (يسمى Ctrl + \ ، T):

باستخدام // todo لتج قائمة مهام


  • في الآونة الأخيرة ، بدأت في استخدام ميزة مثل #region ، على سبيل المثال ، لإخفاء مناطق تعداد المتغيرات:

باستخدام المناطق في التعليمات البرمجية


  • من الملائم لف جزء من الكود ببعض التركيبات باستخدام تسلسل مفاتيح التشغيل السريع Ctrl + K ، Ctrl + S. على سبيل المثال ، حددت جزءًا من الرمز الذي يجب وضعه داخل if واضغط على Ctrl + K ، ثم اضغط على الفور على Ctrl + S ، وأدخل اسم عامل التشغيل (إذا) الذي تحتاجه واضغط على Enter.
  • يبسط العمل مع الشفرة بشكل كبير إذا كنت تلتزم بنمط واحد ، على سبيل المثال ، كما هو الحال هنا - دليل C # للأسلوب مع وضع Unity في الاعتبار .
  • أنا سعيد جدًا لأنني أصبحت صديقًا لـ Coroutine - فهذه تقريبًا وظائف تمتد من تنفيذها إلى عدة إطارات. على سبيل المثال إنهم لا يحاولون إكمال أي مهمة في إطار واحد (حسابها لمدة نصف ثانية ، وبالتالي تقليل الأداء إلى 2 FPS) ، لكنهم يفعلون القليل في الإطار الأول ، والقليل في الإطار الثاني وهكذا ، حتى لا تتباطأ اللعبة. غرضهم الآخر هو تنفيذ شيء لا يلزم القيام به مباشرة في كل إطار (على سبيل المثال ، تحقق من شيء 3 مرات في الثانية).

يوضح المثال أدناه مجموعة أضواء المرور التي تضيء بشكل لا نهائي (كل عشر ثوان) بدورها ضوء أصفر ، أحمر ، أخضر:


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()); } } 

إذا كان بلغة بشرية ، فإن بيان العائد يخبر الوحدة فقط أنه من الضروري نقل تنفيذ الوظيفة إلى الإطار التالي (عدة مرات حسب الضرورة) حتى يتم تنفيذها ، ثم انتقل إلى تعليمات العائد التالية. T.O. سيتم تشغيل Coroutine TrafficLights على النحو التالي :


  1. أولاً هناك انتظار لمدة 10 ثوانٍ (العائد الأول) ،
  2. ثم يبدأ BlinkYellow coroutine (المحصول الثاني) وحتى ينتهي ، لا يبدأ Corinkine الأحمر ،
  3. عند الانتهاء من BlinkYellow ، تم إطلاق BlinkRed ،
  4. عند الانتهاء من BlinkRed ، يتم إطلاق BlinkGreen ،
  5. ثم تتكرر الدورة من البداية (انظر النقطة 1).

التحكم في الإصدار ، حسنًا ، ضروري حقًا!


الفيديو الذي ساعدني في البدء في استخدام GitHub بالاشتراك مع Unity - كيفية استخدام GitHub مع Unity .


على الرغم من حقيقة أنني (أنا لوحدي بدون فريق) أكتب الرمز ، أدركت أن التحكم في إصدار الرمز أمر حيوي بالنسبة لي:


  • توقفت عن الخوف من إجراء أي تغييرات جوهرية في الرمز يمكن أن تدمر المشروع.
  • من السهل جدًا العودة إلى حالة العمل السابقة.
  • من السهل مقارنة الملفات بالشفرة.
  • يمكنك أن ترى بوضوح ما تغير في الكود.
  • بغض النظر عما يحدث لجهاز الكمبيوتر الخاص بي ، لدي دائمًا نسخة احتياطية في السحابة.

ولكن فقط عند العمل مع التحكم في الإصدار ، تحتاج إلى التعود على الالتزام (نشر التحديثات) في أجزاء صغيرة جدًا. لكي لا أكون مثل ملفي في البداية ، قمت بتغيير 20 ملفًا ، وأضفت الكثير من الوظائف الجديدة وجعلتها كلها في وقت واحد تحت اسم "Fuh ، والآن تعمل أخيرًا".


من الجيد أنني اكتشفت ذات مرة أنه من الأفضل عدم إضافة ملفات ذاكرة التخزين المؤقت (مجلد المكتبة) ، والملفات المؤقتة (tmp ، مجلد obj) إلى المستودع ، وكل ما تولده Unity بسرعة. في الواقع ، كان يجب إضافة مجلدات الأصول و ProjectSettings فقط إلى المستودع.


ليس من الضروري استخدام GitHub ، لأنه ناقص أنه في حساب مجاني ، من المستحيل جعل الرمز خاصًا (مرئيًا لك فقط). ولكن هناك GitLab أو Bitbucket ، حيثما أمكن.


كيف كنت rprprrruk في الميكروفون


أنا أعتبر طلبي تعليميًا وأحاول ، إن أمكن ، عدم استخدام الانحرافات. لذلك ، يشكو المستخدمون أحيانًا ، على سبيل المثال ، من نقص الموسيقى أو واجهة بسيطة جدًا (على الرغم من أن الواجهة البسيطة ليست لأنني أردت ذلك كثيرًا ، ولكن لأنني لا أعرف كيفية القيام بذلك بشكل أفضل). مع الموسيقى ، أنا الآن في مفترق طرق الآن: أريد أن أضيف و كزة (من غير المحتمل أن يوافق المعلمون على قرار واجبات الرياضيات للموسيقى).


الموسيقى ، الموسيقى ، ولكن بدون التمثيل الصوتي أمر مستحيل. في البداية بحثت عن الأصوات التي احتاجها من بين الأصوات المجانية ، ولكن بعد ذلك أدركت أن البحث يستغرق وقتًا أطول مما لو قمت بصنعها بنفسي. لذلك ، قمت ببساطة بإنشاء معظم الأصوات من خلال فمي في ميكروفون هاتف ، ثم قمت بمعالجتها باستخدام Audacity (برنامج مجاني متعدد الأنظمة لتسجيل وتحرير الصوت الذي استخدمته لتحويل الصوت من تنسيق إلى آخر).


في معظم الأحيان ، كان منطق إنشاء تأثير صوتي في Audacity كما يلي:


  1. اقطع كل ما لا داعي له.
  2. استخدم تأثير الحد من الضوضاء (لإزالة الضوضاء من التسجيل).
  3. تمت إضافة صوت التأثير الكرتوني وهوة.
  4. مع التأثيرات ، تم تشغيل Bass و Treble بترددات بحيث بدا الصوت أكثر حلاوة على مكبرات الصوت للهواتف الذكية.
  5. إذا قلت شيئًا ، فإن تأثيرات Change Pitch و Speed ​​و Tempo غيرت صوت صوتي إلى السنجاب.

في البداية ، تأخر صوتي بشكل كبير عن الحدث (ليس في المحرر ، ولكن على الهاتف الذكي). تم تعيين خيار DSP Buffer Size على أفضل وقت استجابة (تحرير -> إعدادات المشروع -> صوت) وهذه هي النصائح (سواء في السؤال أو في الإجابة).


كيف ولدت ابنة أفكار أيقونة


بينما كنت أقوم بتطوير التطبيق ، حاولت عدة مرات إنشاء الرموز بنفسي ، ولكن لم يتجذر أي منها (وفي الحقيقة ، ظهر نوع من التفلزات). لذلك ، عندما يتعلق الأمر بالنشر المفتوح ، عهدت إلى تطوير أيقونة لابنتي. شرحت لها أن الأيقونة يجب أن تكون جذابة وتشرح معنى التطبيق. خرجت بحماس كبير ورسمت على الفور صورة غير مناسبة تمامًا. لقد رفضته ووضحت ما يجب تحسينه أو عدم استخدامه على الإطلاق. ثم سار كل شيء كما هو متوقع - أساءت وتوقفت عن رسم الأيقونات.


بعد نصف شهر ، مرت الإهانة وذهبت إلى المهمة بشكل أكثر شمولاً: قطعت المربعات من الكمبيوتر المحمول إلى الصندوق (حجم الرمز على شاشة جهاز iPod الخاص بها) وبدأت في رسم الخيارات واحدة تلو الأخرى:


خيارات الرمز التي رسمتها الابنة


جلبني. اخترت الأفكار التي أحببتها. قال في أي اتجاه للتحرك. ذهبت لرسم الخيارات التالية. بعد يومين وثلاثة عشر خيارًا ، استقرنا في أسفل اليمين (الصورة أعلاه).


ثم طلبت من ابنتي رسم نسخة مكبرة من الأيقونة (الأولى على اليسار في الشكل أدناه) ، والتي قمت برقمنتها (الثانية على اليسار) و ... اتصلت بصديق للفنان لمساعدتي في اختيار اللون. ونتيجة لذلك ، تم الحصول على نسخة مركزية. ثم بدأت في طحن الرمز تدريجياً (الثاني على اليمين) طوال عمر التطبيق في المتاجر. والآن تبدو مثل أقصى اليمين:


تقدم إنشاء الرمز


بناء الروبوت


هذا الفيديو الخاص بـ Unity Android Build - كيف ساعدتني في إنشاء أول ملف APK الخاص بي ، والذي يوضح كيفية تكوين كل شيء دون تثبيت Android Studio الثقيل.


أكرر أنه ليس لدي أجهزة بنظام Android (أطلب فقط من أصدقائي الاختبار بعد الإصدار الجديد) وبالتالي لم يكن لدي أي أخطاء مع الأجهزة المعروضة في الفيديو.


ولكن بدون وجود عوائق ، لا يزال لا يمكن القيام به. اضطررت إلى العبث بتحديث Android SDK لفترة طويلة ، لأن Unity لم ترغب في العمل مع آخر التحديثات. ونتيجة لذلك ، اتضح أنه كان من الضروري السماح لـ Unity باختيار وتثبيت الإصدار الضروري من التحديث نفسه. على سبيل المثال لقد نقرت للتو على زر تحديث Android SDK في Unity نفسها ، ولم أحاول تحديث كل شيء بنفسي ، كما هو موضح في الفيديو.


حدثت مشكلة أثناء تحديث Android SDK يدويًا

حتى أدركت أنني بحاجة إلى التحديث من تحت Unity ، عانيت لفترة طويلة ، وقمت بالتحديث يدويًا باستخدام البرنامج النصي sdkmanager.bat (تحتاج إلى استخدام هذا النص البرمجي مع المعلمة --update ، وليس android.bat ، المشار إليه في الفيديو). أثناء التحديث ، اشتكى من أنه لا يستطيع الكتابة فوق مجلد الأدوات (الذي بدأ منه هو نفسه). لقد جربت مجموعة من النصائح ولا أتذكر حتى ما ساعد ، يبدو أنه نوع من الحل بروابط رمزية.


أيضا ، ظهرت أخطاء غير مفهومة تتعلق جافا. اتضح أن هناك مشكلة في إصدار Java Development Kit - كما أنها لا تحتاج إلى تثبيتها مع أحدث إصدار. لقد جربت العديد من القديمة ، واختفت الأخطاء على أحدها وعملت جميعها.


بفضل ملف apk المميز للنشر على Google Play ، ساعدتني كيفية تسجيل تطبيق Unity للفيديو android android . لقد قمت بحفظ كلمات المرور هذه وحفظها بعناية ، لأنه يلزم إدخالها في كل مرة تنشئ فيها إصدارًا جديدًا. وإذا فقدتها ، فلن تتمكن من تحديث التطبيق (فقط قم بتحرير تطبيق جديد بمفاتيح جديدة).


يجب أن يكون الرمز ، على عكس إصدار iOS ، مبدئيًا بزوايا مستديرة ، وإلا في بعض الأجهزة ، سيظل مربعًا تمامًا.


بناء حجم لالروبوت


الآن حجم ملف apk الخاص بي هو 22 ميغابايت.


لقد قمت بتقليل حجم التجميع جيدًا مع تنسيق ضغط الفقدان / العفريت المفقود - RGBA Crunched ETC2 (للعفاريت مع ألفا) و RGB Crunched ETC (للأنسجة بدون ألفا). كان الشيء الرئيسي هو تعيين جودة الضاغط = 100 (لا تؤثر هذه المعلمة على سرعة الأنسجة على الجهاز النهائي ، ولكن فقط جودة النسيج وسرعة الضغط في المحرر).


لم تسمح لي أي رقصات أخرى باستخدام الدف بتحقيق أي انخفاض كبير في حجم ملف apk (باستثناء بعض الفروق الدقيقة الموضحة أدناه).


الآن أنا أستخدم ما يلي ..


.. الإعدادات من إعدادات المشغل ..


.. للحد الأدنى للحجم من ناحية والتغطية القصوى للأجهزة من جهة أخرى:


  • Unity 2018.1 (كلما كان الإصدار أحدثًا ، كانت أفضل في حزمه وكلما زادت الأشياء الجيدة).
  • Auto Graphics API (تختار Unity نفسها OpenGLES2 و 3).
  • Scripting Backend - Mono (قد لا يكون أسرع من IL2CPP ، لكن التجميع أصغر بالتأكيد).
  • التصميمات المستهدفة - ARMv7 و x86. بإزالة دعم Intel x86 ، قمت بتقليل حجم apk بمقدار 10 ميجابايت أخرى (سيكون 12 ميجابايت). لكنني لا أعرف عدد الأجهزة التي قمت بقطعها بإزالة علامة الاختيار هذه. ما أعرفه هو أن الهواتف لم يتم إصدارها منذ عامين بالفعل في ظل هذه البنية. وتلك التي يمكن عدها على أصابع يد واحدة (آخرها التي أعرفها هي Asus Zenfone و Lenovo K 900 و Xolo x1000 وربما لا يزال هناك بعض). من فضلك صحح لي في التعليقات إذا كنت أتحدث هراء.
  • مستوى التحريك - تجميعات الشريط - يقطع الرمز غير الضروري بأمان. يمكن للخيارات الأخرى أن تحقق مكسبًا من حيث الحجم (لم ألاحظ ذلك في المنزل) ، ولكنها ليست آمنة جدًا.
  • Build System - Gradle (يسمح لك بتنشيط خيار Minify).
  • Minify - Proguard - يقصر أسماء جميع الفئات والمتغيرات من أجل حفظ وحدات البايت البائسة في الحجم ، ولكن ، كمكافأة ، يجعل الرمز أقل قابلية للقراءة لمنع الهندسة العكسية.

بناء IOS


أجمع تطبيقًا على جهاز Mac الخاص بزوجتي (أتذكر أنهم أخذوا أرخص جهاز MacBook Air لعام 2015).


للبناء لنظام iOS 7 حتى في الإصدار 9.3 من Xcode ، كان يكفي أن تدفع القيمة 7.0 يدويًا في حقل هدف النشر (في علامة التبويب عام).


لإضافة اللغات (التي ترجمت فيها التطبيق باستخدام Lean Localization) إلى وصف التطبيق في AppStore ، كان علينا إضافة الأسطر التالية إلى ملف info.plist (في أي مكان ، على سبيل المثال ، بعد <dict> مباشرة):


 <key>CFBundleLocalizations</key> <array> <string>English</string> <string>Russian</string> </array> 

الآن أستخدم Unity 2017.4 للبناء لنظام iOS (كما كتبت أعلاه ، أحتاج إلى دعم iOS 7 ، وإلا سأستخدم 2018.1).


حجم بناء IOS


الآن حجم الملف الذي تم تنزيله لجهاز iPhone الخاص بي هو 44 ميغابايت.


لسوء الحظ ، في نظام iOS لا يمكنني استخدام النقوش المتحركة ، لأنها غير مدعومة على الأجهزة الأقدم من iPhone 5s ( بدون دعم Metal و OpenGL ES 3.0 ).


عندما حاولت تقليل حجم البناء بأي ثمن ، تم الحصول على أصغر حجم (34 ميغابايت) إذا:


  • استخدم Unity 2018 (أي أن الحد الأدنى للإصدار المدعوم هو iOS 8) ،
  • واجهة برمجة تطبيقات الرسومات تحدد فقط Metal ،
  • اترك التصاميم المستهدفة x64 فقط ،
  • استخدام القوام المطحون.

ولكن ما زلت لم أحسب كيفية التعامل مع ترقق التطبيق - هذا شيء يسمح لمتجر التطبيقات بإنشاء تطبيقي تلقائيًا لجهاز iPhone / iPad / iPod خاص بالمستخدم النهائي (مما يؤدي إلى انخفاض في حجم الملف الذي تم تنزيله). لقد كان لدي الوقت لصياغة المقالات في إشاراتي المرجعية بنفسي:



إعدادات المشغل التي أرغب في مشاركتها:


  • من السهل إدخال معرف فريق التوقيع التلقائي مرة واحدة (يمكنك الحصول عليه على موقع مطور Apple هنا الحساب> العضوية ) وتحديد مربع التوقيع التلقائي بحيث لا تفعل ذلك في كل مرة في Xcode لاحقًا.
  • قمت بتعيين تردد التسارع إلى معطل (قمت بتعطيل مقياس التسارع) ، لأنني لا أستخدمه. استطيع انقاذ الناس قليلا من البطارية.
  • السلوك في الخلفية - تعليق - بهذه الطريقة لا يغلق التطبيق عند الضغط على زر الصفحة الرئيسية ، ولكنه يستمر في العمل في الخلفية (يمكنك التقاط هذا الحدث باستخدام OnApplicationPause لحفظ اللعبة ، على سبيل المثال).

كيف اخترت الاسم وما استخدمته للترقية


كم عدد المستخدمين الذين استخدموا الحجز و TripAdvisor ، لكنني لم ألاحظ أبدًا أن اسمهم في AppStore ليس مجرد الحجز ، ولكن "Booking.com Travel Deals" و "فنادق TripAdvisor Hotels" (يتم تخفيف الاسم باستخدام الكلمات الرئيسية ، بحيث يعتمد التطبيق على هذه الكلمات الرئيسية وجدت في البحث عن apstor). لذلك ، قررت عدم استخدام الاسم القديم Math4Ami ، لكنني لعبت لمدة طويلة مع كلمات مختلفة لتضمين الكلمات الرئيسية التي احتاجها. في النهاية ، جئت لأول مرة إلى Pocket Money: Math ، وبعد ذلك لتعلم Math & Earn Pocket Money. في اللغة الروسية ، بدت هذه الخيارات مثل Pocket Money for Maths و Pocket Money و Maths: Learn and Earn.


لقد روجت طلبي عن طريق إرسال / نشر روابط إليه إلى الأصدقاء والمعارف ، وكتبت مقالتين على مدونتي وعلقت لافتة في نفس المكان.


بالمناسبة ، إذا وضعت هذا السطر في صفحات الويب <head>:


 <meta name="apple-itunes-app" content="app-id=1372434662" /> 

.. عند فتح هذه الصفحة على الـ iPhone ، سيرى الجميع شعار تطبيقك في الأعلى.


تنزيل الإحصائيات


في البداية ، قمت بإصدار إصدار iOS.


إحصائيات تنزيل تطبيقات IOS


تحدث الكثير من الأشخاص عن عدم إعجابهم بأجهزة Apple واقتنعوا بأن Android أكثر برودة. قررت التحقق ، وبعد 20 يومًا من الإجراءات مع تجميع ملف apk ، أصدرت إصدارًا على Google Play.


إحصائيات تثبيت تطبيق Android


لن تقدم استنتاجات موضوعية (أو لا شيء على الإطلاق) ، ولكن ذاتي محض - كنت أتوقع المزيد من منصة Google ، ولكن في الوقت الحالي تبين أن نصف أسوأ من Apple.


يؤسفني أن:


  • لم أقم بعمل نسخ احتياطية عند التبديل إلى الإصدار الجديد من الوحدة ،
  • لم يستخدم نظام التحكم في الإصدار (مثل git) ،
  • حاولت العمل مع Perforce (مجرد نظام رهيب - يبطئ التنمية بشكل غير واقعي) ،
  • لم تستخدم ScriptableObject (SO) من قبل - إنه رائع جدًا
  • لقد كتبت الرمز في ورقة واحدة طويلة (من المخيف أن أتذكر كيف أعدت صياغة هذه الورقة لاحقًا) ،
  • لم أكن أعرف ما هي روائح الكود ، لكن كيف احتاج معرفتها ،
  • حاولت استخدام المتغيرات العالمية في كل مكان ، وليس المتغيرات المحلية (أفكر بجنون العظمة أنه إذا طلبت بشكل متكرر وظيفة ، فسيتم إنشاء المتغير المحلي داخل الوظيفة مرارًا وتكرارًا ، وسيكون هناك متغير عام واحد فقط. ونتيجة لذلك ، بعد مئات المكالمات للوظيفة باستخدام المتغيرات المحلية ، سيكون لدي مجموعة من الذاكرة الضائعة وفقدان الأداء بسبب جامع القمامة) ،
  • لم ألتزم دائمًا بأسلوب موحد في الشفرة وباسم جميع الأصول. إليك نموذج يحتذى به في UE4 (هناك الكثير من الأشياء المفيدة حول تسمية الأصول وأستخدمها أيضًا في Unity) ،
  • لقد نسيت أن أكتب التطبيق في المقام الأول لابنتي ، وليس من أجل رمز جميل أو لإرضاء المستخدمين الآخرين.

أدركت أن:


  • يسهل على الأطفال الجلوس على تطبيقي (فور تثبيت التطبيق ، يمكنهم تعليقه لساعات حتى يتم تثبيت البطارية على الهاتف) ،
  • الأطفال مدمنون على القيام بالرياضيات في طلبي ، حتى لو لم يتحدثوا عن المال. إذا كان هناك طفلان في الأسرة ، فقد وصل الأمر إلى معارك عبر الهاتف لحل الأمثلة ،
  • طلبي يشعر بالملل بسرعة كبيرة للأطفال. في اليوم التالي ، قام عدد قليل من الأشخاص بتشغيل التطبيق ، حتى لو أدرك الطفل أنه سيحصل على المال مقابل ذلك ،
  • ضعف الاحتفاظ بالمستخدم / الطفل ليس مشكلة تطبيقي على وجه التحديد ، ولكن تفاصيل تعليم الأطفال (تم إخباري بذلك من قِبل معلمي المدرسة). يجب أن يكون التطبيق متنوعًا جدًا من أجل الحفاظ على الاهتمام بالأطفال طوال الوقت ،
  • في كثير من الأحيان ، يسيء الآباء والأطفال تفسير مبدأ التطبيق ويعتقدون أنه من خلال حل الأمثلة ، سيحصلون على المال مني (من المطور). تلقيت رسائل مختلفة مع أسئلة مثل: كيفية سحب الأموال ، هل يمكنني الانسحاب إلى webmoney أو paypal ، أين يمكنني تحديد عنوان إرسال الأموال عن طريق الشيكات ، وما إلى ذلك ،
  • إذا اعتذرت عن أخطائك وأوجه رؤيتك في إجابات المراجعات السيئة (ووضحت أيضًا كيف يجب أن تعمل في الواقع) ، فإن الناس يميلون إلى مسامحة الأخطاء وإزالة الدرجات السيئة
  • أنت لا تبتعد كثيرا عن الترويج الخاص بك ،
  • ينمو الأطفال بسرعة كبيرة وبينما كنت أكتب التطبيق - تجاوزت ابنتي ذلك بالفعل. لكن ، "مختبري" الجديد يكبر!

المراجع


قائمة روابط المقال بترتيب ذكرها:


+ كيفية الحفاظ على نمط رمز واحد C # دليل الأسلوب مع الوحدة في الاعتبار .
+ GitHub والفيديو حول كيفية ربط git بـ Unity .
+ يوجد مستودع خاص مجاني على GitLab أو Bitbucket .
+ جرأة مجانية لتسجيل وتحرير الصوت.
+ كيفية إزالة التأخير الصوتي .
+ الوحدة التعليمية الروبوت بناء فيديو - كيف .
+ فيديو كيفية تسجيل تطبيق Unity لسوق Android .
+ أجهزة Apple التي تدعم Metal / OpenGL ES 3 .
+ ترقق التطبيق (وثائق Apple).
+ ترقق التطبيق (مساعدة الوحدة).
+ AssetBundle Workflow (وثائق الوحدة).
+ أين يمكن الحصول على معرف الفريق .
+ ما هي رائحة الكود .
+ مبدأ تسمية الأصول / الموارد في مشاريع الألعاب على UE4 .


شكرا للقراءة!

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


All Articles