صديقتي وأول لعبة فيديو. تنمية الوحدة. الجزء 1

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



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



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

بالعودة إلى تاريخ إنشاء Cubicity ، فنحن نعمل بشكل رئيسي فقط على Unity والمجموعة القياسية لأي مطور Unity يحترم نفسه هنا: Newtonsoft.json ، Zenject ، Cinemachine ، Dotween ، وما إلى ذلك ... كما رأيت أعلاه ، بدا النموذج الأولي للعبة تمامًا مثل ذلك ، مكعبات و الفطائر. بعد أسبوع من التفكير في كيفية تنويع اللعبة وإغراء اللاعبين ، جاءت فكرة رائعة ... انظر إلى متجر Asset للشخصيات المكعبة أو المستديرة. حسنًا ، بدأت ، تم شراء عدد قليل من الشخصيات دون تردد. حدث نفس الموقف مع الكتل التي تتحرك عليها الشخصيات الآن. لقد قاموا أيضًا بوضع قائمة بعناصر اللعب الجديدة ، من قائمة تضم حوالي 30 من الأشياء الجيدة الجديدة ، وتم اختيار الأشياء المحايدة ، مثل إعادة توجيه الكتل / الأسهم ، والمصعد ، والنقل الفضائي ، للبدء. قرروا ترك الباقي إلى مستويات جديدة وإدخالها في وقت واحد إلى 30-35 المستويات.



بصراحة ، لا يمكننا أن نتذكر ما دفعنا إلى القيام بالكثير من المستويات في البداية ، ولكن كما هو ، دخلت 95 مستويات في الإصدار الأول. في الواقع ، كثيرًا ، وقد ندمنا على هذا أكثر من مرة. لماذا انت اسف ولكن لأن اللعبة كانت خامًا وتغيرت الكثير من الأشياء على طول الطريق. اضطررت في كثير من الأحيان إلى الحصول على جرعة من "يوم جرذ الأرض" من خلال الذهاب إلى كل من مستويات 95 وإجراء تغييرات. استغرق جميع المستويات 2 أشهر من التشغيل المستمر. هذه لم تكن بالفعل 100 ٪ مستويات الانتهاء ، ولكن قريبة جدا. في الأيام الإنتاجية ، لم يكن من الصعب نقل 10 مستويات من الرأس إلى الورق ، ثم إلى المشهد. ولكن كانت هناك تلك الأيام التي تشعر فيها وكأنك Henk Moody من Lascivious California ، التي تعاني من أزمة إبداعية ، تعتقد أن كل شيء جاف ، ولكن يأتي يوم جديد وأفكار جديدة.

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

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



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



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



كما ذكرنا سابقًا ، استخدمنا 2x MSAA + FXAA للتجانس ، لكن هذا ليس كل شيء! بالإضافة إلى ذلك ، تمت إضافة AmplifyColor إلى عملية ما بعد المعالجة - وهي رصيد ممتاز لأموالك يتيح لك استخدام Lut-s مختلفة للمعالجة اللاحقة. مع الحق الأيمن ، الصورة تتحسن. أثناء عملية التطوير ، جربنا طرقًا مختلفة ، بما في ذلك مكدس وحدة معالجة ما بعد الوحدة القياسية ، ولكن في البنية ، استحوذت على تظليلاتها وخياراتها لدرجة لم يتم وصف حكاية خرافية ولا قلم لوصفها. كانت بعض الحلول جميلة للغاية ، لكنها كانت تعمل بشكل سيء للغاية على الهواتف التي لم تكن في منتهى الروعة (صدقوني ، إذا كنت تعتقد أن كل شخص لديه الآن هواتف "طبيعية" على الأقل ، فأنت مخطئ. لا يزال هناك عدد كبير من الناس يذهبون مع صيني مقابل 40 دولارًا و اشتكي منك في التعليقات التي تفيد بأن DOOM الخاص بك لا يذهب على الميكروويف الخاص بهم).

ميزان اللعبة ليس دائمًا سهلاً ، وحتى الآن تنبثق الأفكار ، سواء كانت المستويات معقدة للغاية ، أو ما إذا كانت المستويات الصعبة غالبًا ما تسقط ، إلخ. بعد أن توازنا قدر المستطاع مع قدم واحدة اليسرى ، قررنا تقديم أدوات لجعل حياة اللاعب أسهل (Go Back ، Bomb ، Ice Block ، Teleport) ، ونعم ، أصبح العيش أسهل ، ولكن ليس بالنسبة لنا ، ولكن فقط للاعبين في المستقبل. لدينا المزيد من العمل والبق.

وصلنا إلى قائمة اللعبة ، والقوة والأعصاب إلى أقصى حد ، والطبيعة الإبداعية ضربت الفرامل ، ونحن لن نخفي ، وكان لا بد لي من أن تكون مصدر إلهام من الألعاب الأخرى ، والتي شكرا جزيلا لهم. والآن "في الصباح خرج السلحفاة!". ليس صحيحًا في صباح اليوم التالي ، ولكن خرج ، كانت واجهة المستخدم جاهزة للتخطيطات التي تم إنشاؤها مسبقًا.



إن الرغبة في أن تكون أنيقًا وعصريًا ، ولم يتجاوزنا الشباب أيضًا. قررنا إضافة الحفظ المستند إلى مجموعة النظراء وعمومًا لم نأسف لذلك. لم تكن هذه أسهل مهمة ، لأنه على منصات مختلفة ، مختلف مزودي خدمات التخزين السحابية. على Steam ، إنه Steamworks للجوال و GooglePlay و GameRoom. لذلك اضطررت إلى توحيد نظام التخزين لإمكانية استبدال النظام الأساسي المطلوب. بادئ ذي بدء ، قررنا استخدام EasyMobile لهذه الأغراض ، ولكن للأسف ، تخلينا عن هذه الفكرة عاجلاً أو آجلاً. المكوّن الإضافي نفسه جيد ولديه عدد كبير من الميزات ، لكننا لم نحب حقًا تفاصيل العمل مع التخزين السحابي الأصلي. نتيجة لذلك ، وقع الاختيار على قاعدة بيانات Firebase Realtime Database والمصادقة عبر Facebook. باختصار ، كان عليّ أن أذهب إلى 7 دوائر من الجحيم لجعلها تعمل (وهذه ليست مسألة برمجة ، ولكن في 100،500 إعدادات يجب القيام بها في 100،500 مكان للتطبيق وفي Facebook ، Firebase ، إلخ). أيضًا ، تحتوي قاعدة البيانات على حدود حركة المرور ولحفظها ، في كل مرة نكتب فيها ، نقوم بإنشاء GUID وتسجيله في قاعدة البيانات وعلى الجهاز. وبالتالي ، إذا رأينا أن GUIDs الموجودة على الجهاز وفي السحابة هي نفسها ، فيمكننا التأكد من أننا لسنا بحاجة لقراءة جميع البيانات من السحابة ، ولكن يمكننا استخدام نسخة محلية من البيانات. نتيجة لذلك ، تمت إضافة التزامن ، ولكن ... كان أحد أكثر الأخطاء التي نواجهها بالنسبة لنا هو السلوك غير الواضح لقاعدة بيانات Firebase في بعض الحالات. بما أننا نستخدم Json ، فإننا نقوم بتسلسل الفصول لتخزين الحالة ، لكن Firebase يتصرف أحيانًا بطريقة غريبة بعض الشيء.

إذا مررنا في Firebase لكتابة كائن القاموس ، على سبيل المثال ، هذا النوع من:

var dict = new Dictionary<int, SlotState> { { 0, new SlotState() }, { 1, new SlotState() }, { 2, new SlotState() }; 


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

إذا كتبنا إلى Firebase:

 var dict = new Dictionary<int, SlotState> { { 0, new SlotState() }, { 1, new SlotState() }, { 100500, new SlotState() }; 

أو حتى:

 var dict = new Dictionary<int, SlotState> { { 0, new SlotState() }, { 1, null }, { 2, new SlotState() }; 

عندما نقرأها من قاعدة البيانات ، لا نزال نحصل على كائن Json به مفاتيح وقيم.

من الممكن فهم منطق المطورين إلى حد ما ، ولكن هذا قد يؤدي إلى الأخطاء التي قد تظهر فقط بعد فترة من الوقت (تذكر GUIDs أعلاه المضافة للحفظ؟ ونتيجة لذلك ، قراءات نادرة من قاعدة البيانات مع إدخالات متكررة نسبيا عليه).

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

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

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


All Articles