الوحدة - مطبات تطوير لعبة 2D

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

الصورة

انتباه ، تحت القط لقطات 16+ !

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

التحدي


أردت أن أكتب شيئًا جديدًا ، بسيط في الفهم وفي الإدارة. نتيجة للمناقشة مع الجمهور المستهدف (طفلي) ، تقرر أن تكون اللعبة على النحو التالي:

  • ثنائي الأبعاد (لأنه أكثر ملاءمة للعب ألعاب ثنائية الأبعاد على الهاتف)
  • تحكم بإصبع واحد (أحيانًا بحد أقصى اثنين)
  • قاتل الوقت (مجرد كزة حتى لا ترهق المخ)
  • نظام الإنجاز (لجعله على الأقل قليلا للاهتمام لمواصلة)
  • الكرتون
  • موسيقى جميلة
  • بدون انترنت
  • Android (سهولة تثبيت ملفات apk apk)


كل ذلك أدى إلى فكرة " إبليس الشيطان يطلق النار على الغزلان التي تتداخل مع حقيبته . "

كلوس مهلك

وبعد ذلك بدأ كل شيء ...

1. مكتبات الروبوت الخارجية


المشكلة: قضيت يومين في العثور على SDK الصحيح ، JDK ، NDK وجعل الوحدة تعمل معهم. على جهازي قبل Unity ، كان sdk من android android موجودًا بالفعل ، لكن لم يبدأ به ، كان علي البحث عن شيء آخر ، التثبيت ، المحاولة ، البحث مرة أخرى ... يومين ...

اقتراح بالتحسين: سيكون من الجيد أن يتم تثبيت إصدار sdk الضروري لأحدث الإصدارات تلقائيًا أثناء تثبيت Unity ، وإذا كان أي شخص بحاجة إلى الرجوع إلى إصدار سابق أو الترقية - فدع هذا الجهاز يقوم بتكوين نفسه باستخدام الأقلام.

الصورة

2. ناقلات الرسومات


المشكلة: الوحدة خارج الصندوق لا تفهم SVG . حتى كل أنواع أطر JS الصغيرة مثل Paper.js تعمل ببساطة بذكاء مع ناقل ، لكن فيل مثل Unity لا يعمل.

الحل: قمت بتثبيت حزمة بيتا يبدو أنها تقرأ SVG ، لكنها في النهاية تحولها إلى خطوط المسح. مقبول ، لكن محرج ، الوحدة!

3. منصة 2D


الصورة

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

الحل:
  1. يمكنك رسم نقطية باستخدام ألفا (ناقص - تحرير هذا البئر غير مريح للغاية)
  2. يمكنك شراء مكون إضافي يقوم بذلك (مطروح منه - إنفاق المال)
  3. يمكنك كتابة البرنامج المساعد بنفسك (ناقص - يستغرق وقتًا طويلاً لمعرفة ذلك ، ويستغرق وقتًا طويلاً للكتابة)

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

بالمناسبة ، شاهدت العرض التجريبي للنسخة التجريبية الجديدة من الوحدة ، يبدو أن مثل هذا الشيء سوف يظهر من خارج الصندوق! شكرا على ذلك ، أيها الأصدقاء!

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

4. التناوب ورباعي


المشكلة: نظام معقد للغاية من المواقع ثلاثية الأبعاد والدوران ، غير ضروري في ألعاب ثنائية الأبعاد.

الحل: تحتاج فقط إلى فهمها وقبولها ، لأن لعبة 2D هي لعبة ثلاثية الأبعاد بتنسيق Z = 0. لكن سيكون من الجيد تبسيط هذا النظام في وضع 2D ، أيها الرفاق ؛)

لقد قتلت الكثير من الوقت وحطمت عقلي تقريبًا ، محاولًا تدوير الكائن في الاتجاه الصحيح إلى الزاوية اليمنى ، نسبة إلى كائن آخر ، عندما كتبت للتو player.a = 45 في محرك آخر ؛ نعم ، هناك العديد من الطرق الواضحة في الإصدار الحالي.

5. تصحيح


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

الحل: أنا فقط استخدم print () ... وأدرك أن تصحيح أخطاء مشروع معقد سيكون عاملاً حاسماً في الحصول على نسخة مدفوعة من الوحدة. المسوقين للشركة الاحترام الحزين :(

حلها! بفضل موجه Leopotam ، قمت بتثبيت حزمة إضافية للاستوديو ، يظهر زر "Attach to Unity debugger" .

6. انقر فوق ، انقر ، وانتقد mov


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

الحل: اضطررت إلى كتابة طبقة الفصل الدراسي والتفاف الأحداث الضرورية.

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

7. الارتباك مع الإحداثيات


المشكلة: لا يمكنك تعيين إحداثيات النقرات للكائن ورؤيته في المكان الصحيح ، وهذا غير واضح إلى حد ما.

الحل: أولاً ، تحتاج إلى قراءة الوثائق وفهم واستخدام الأساليب المختلفة لتعيين الإحداثيات:

WorldToScreenPoint ()
ScreenToViewportPoint ()
convert.TransformPoint ()
وغيرها ...

سأشرح ذلك لأن المسافة في المشهد تقاس بوحدات تعسفية غير البكسل ، وبالإضافة إلى ذلك ، تحتوي الكائنات على نظام تداخل ، على التوالي ، يكون تحديد المواقع بالنسبة إلى الأصل.

8. مجموعة ضئيلة من الضوابط واجهة المستخدم


المشكلة: يتم تسليم العناصر الأساسية فقط من المربع ، وحتى بعد ذلك عليك العبث ببعضها.

الحل: يمكنك أن تكون راضيا مع القليل. على سبيل المثال ، قضيت الكثير من الوقت في التمرير في القائمة الديناميكية. يمكنك شراء الضوابط باردة (ناقص - إنفاق المال).

9. حجم ملف APK كبير


المشكلة: عند إنشاء مشروع فارغ ، حجمه 21.9 ميغابايت (23،061،612 بايت)

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

يطلب Google Play من المطورين نشر التطبيقات <100 ميجا بايت . (22 تلتهم بالفعل). بالطبع ، هناك آليات للتحميل المقسم والديناميكي للموارد ، لكننا قادمون جدد ، وهدفنا هو معرفة الأساسيات ، وتحقيق أحلامنا العزيزة ، وليس القتال مع حدود السوق.

10. السيريلية


المشكلة: بعد تجميع مشروع لمنصة JS / HTML5 (للاختبارات) ، اتضح أنه ببساطة لا توجد نصوص مكتوبة باللغة الروسية.

الحل: تحتاج إلى تنزيل ملف الخط ، واستيراده إلى الأصول ، ثم تحديد هذا الخط الذي تم استيراده في إعدادات كل نص.

هذا غريب نوعا ما.

11. أداء الفيزياء


المشكلة: تبدأ اللعبة في التباطؤ بشكل رهيب عندما يكون هناك تصادمات معقدة ، عند استخدام الوضع المستمر للكشف عن التصادم ، عند استخدام عدة نظام للجسيمات في مشهد واحد ، باختصار ، عندما يتم استخدام كل شيء يعطي التأثير والجمال للألعاب.

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

الصورة

بطبيعة الحال ، كل هذا صحيح بالنسبة للألعاب المحمولة ثنائية الأبعاد. ولكني أود أن تتطور Unity ، وأن تستخدم تظليلات باردة جديدة للجزيئات ، وللاصطدامات ، ولكل شيء آخر معقد وجميل.

الخاتمة


كان هناك ، بالطبع ، مطبات أخرى ، ولكن هذه تفاهات. كانت هناك مزايا غير متوقعة ، مثل:

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

لكن هذه قصة مختلفة تماما ...

أما بالنسبة لتوقيت المهمة ، فقد تم تثبيتي بشدة بسبب النقطة رقم 3 (تطوير مكون إضافي لنمذجة المنصة). كمطور من ذوي الخبرة ، قمت بتقييم المشكلة بنفسي وتقييمها على النحو التالي: 20 ، 30 ، 40 (أمسيات / أيام عطلة لأنني مشغول خلال اليوم بالعمل الرئيسي) ، حيث 20 متفائل و 40 متشائم. لو لم تكن النقطة رقم 3 ، فعندئذ سأكون قد بلغت 20-30 ، لكن في النهاية قضيت حوالي شهرين. (لا ، لم أعمل كل مساء ، أي أنني حصلت على حوالي 40).

إذا كان أي شخص مهتمًا ، فسأقول أنه كان علي رسم الرسومات بنفسي ، وذلك بفضل برنامج Inkscape . اخترت الموسيقى حصريًا مع ترخيص للاستخدام المجاني.

اضطررت إلى قضاء يومين في النشر على Google Play .

أمضيت يومين آخرين على تكامل الإعلانات (على الأرجح أنك لن ترى ذلك ، أردت فقط أن أجربه ، على الرغم من أن اللعبة لم تكن تعتبر تجارية واحدة)

نعم ، كان يمكن تحسين الكثير ، لكنني أردت أن أروق أصدقائي قبل عطلة رأس السنة الجديدة.

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

وإذا كنت مخطئًا في شيء ما ، فلا تحكم على نحو صارم ، وشارك نصائحك في التعليقات!

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


All Articles