تحية! قررنا في Playrix جعل
Unity3D لدينا . وهناك الرسوم المتحركة. في هذه المقالة سأخبرك كيف صنعناها في المنزل وكيف تعمل.
عندما بدأنا في تصميم بنية الرسوم المتحركة لدينا ، نظرنا ، بالطبع ، في نظائرها الأخرى ، ولا سيما على Unity Animator. ومع ذلك ، أردنا أن نجعل حلاً أكثر عالمية. على عكس الوحدة نفسها ، لدينا التخصيص لحالات الرسوم المتحركة من خلال واجهة وحدة التحكم. لكن أولاً ، يجدر معرفة ماهية الرسم البياني لحالة الرسوم المتحركة. إذا كنت قد واجهت هذا بالفعل ، فمن المنطقي تخطي الجزء التمهيدي والانتقال إلى ميزات التنفيذ.
فما هو بالضبط هذا الرسم البياني حالة الرسوم المتحركة؟
يسمح لك الرسم البياني لحالة الرسوم المتحركة بتمثيل التحويلات بيانياً بين حالات الرسوم المتحركة المختلفة.
خذ على سبيل المثال الرسوم المتحركة للشخصيات:
لدينا نموذج ثلاثي الأبعاد لرجل وهناك العديد من الرسوم المتحركة:
- الخمول - لا يزال قائما.
- المشي - يذهب إلى الأمام.
- الجلوس - الجلوس.
- مرحبا - أمواج اليد.
الطريقة الكلاسيكية لإدارة الرسوم المتحركة هي كما يلي: إذا كنت تريد أن يقف الكائن - قم بتشغيل وضع الخمول أو المشي أو الجلوس. ولكن هناك بعض الصعوبات مع هذا.
أولاً ، تحتاج إلى التحكم يدويًا في مدة وتسلسل الرسوم المتحركة. على سبيل المثال ، لكي يجلس شخص ما ، عليك أولاً أن تلعب الرسوم المتحركة ، وكيف يجلس ، ثم تبدأ في تشغيل الرسوم المتحركة المحاطة بحلقة ، حيث يكون الشخص جالسًا بالفعل. تخصيص مفاصل هذه الرسوم المتحركة في الكود أمر صعب وغير مريح.
ثانياً ، تصبح المفاصل بين الرسوم المتحركة ملحوظة إذا كانت نهايات الرسوم المتحركة غير متطابقة ، أو نحتاج إلى تضمين رسوم متحركة أخرى في منتصف الصورة الحالية. في هذه الحالة ، من المستحيل مطابقة الرسوم المتحركة تمامًا. تذكر الألعاب القديمة حيث تحولت الرسوم المتحركة للشخصيات على الفور.
تم تصميم الرسم البياني للرسوم المتحركة لحل هذه المشكلات. مع ذلك ، لا تحتاج إلى تشغيل الرسوم المتحركة يدويًا ، والآن أنت تعمل مع الدول. كيف سيكون كائن الرسوم المتحركة لتحقيق هذه الحالة هو عمل الرسوم المتحركة والمصممين. الآن لا يفكر المبرمج في توقيت وتسلسل الرسوم المتحركة ، فهو يشير فقط إلى الحالة التي يجب أن يدخل فيها الكائن.
أيضًا ، مع الرسم البياني للرسوم المتحركة ، تختفي مشكلة الانضمام إلى الرسوم المتحركة. في الانتقال بين الولايات ، يمكننا أن ننتقل بسلاسة لرسوم متحركة إلى أخرى. ويتم ذلك باستخدام الأوزان. الوزن هو عامل خلط من 0 إلى 1 ، حيث يشير 0 إلى أن الرسم المتحرك لا يؤثر على الكائن بأي طريقة ، ويؤثر 1 تمامًا عليه.
على سبيل المثال ، يعد الانتقال بين المشي (الخمول) والوقوف (الخمول) أمرًا شديد الصعوبة عند إعداد العملية. في أي نقطة في الرسوم المتحركة للمشي ، يمكن أن تتوقف الشخصية. لذلك ، لا يتم الانتقال على الفور ، ولكن لفترة زمنية صغيرة. في هذا الوقت ، يتناقص وزن المشي من 1 إلى 0 ، ويزداد الوزن الثابت من 0 إلى 1. من المهم أن يكون مجموع الأوزان مساوياً لواحد ، وإلا فقد تظهر القطع الأثرية.
كيف يعمل كل شيء؟
يتكون الرسم البياني من الحالات والتحولات. الحالة عبارة عن مجموعة من وحدات التحكم في الحركة ، يمكن لكل منها تشغيل نوع من الرسوم المتحركة على كائن ما أو تنفيذ نوع من المنطق. تحتوي وحدة التحكم على نقاط دخول وخروج - هذه هي اللحظات التي يشغل فيها الرسم البياني الحالة في وحدة التحكم هذه ويطفئها وفقًا لذلك. تحتوي وحدة التحكم أيضًا على وظيفة تحديث ، حيث يأتي وزن الانتقال ، بالإضافة إلى الفاصل الزمني من الإطار الأخير. لخلط الرسوم المتحركة ، يجب أن تؤخذ في الاعتبار.
تحكم لديها واجهة واحدة. بالإضافة إلى ذلك ، يمكن للمطورين إضافة وحدات التحكم الخاصة بهم. على سبيل المثال ، يمكنك إنشاء وحدة تحكم تنفذ نوعًا من المنطق أو تقوم بتعيين نص على نافذة منبثقة ، إلخ. يتيح لك هذا التخصيص البسيط استخدام الرسم البياني للرسوم المتحركة بمرونة كبيرة.
لدينا أيضا المتغيرات. يمكن تعيين هذه المتغيرات خارجيًا ، بما في ذلك من التعليمات البرمجية ، ثم قراءتها في وحدات التحكم. لذلك ، على سبيل المثال ، يمكنك تبديل نوع من الرسوم المتحركة لشخص ما على نفس الحالة. بشكل عام ، يمكنك حتى تكرار نموذج الانتقال بين الحالات من خلال المتغيرات والظروف ، مثل الوحدة. بالاقتران مع وحدات التحكم القابلة للتخصيص ، اتضح بشكل ملائم.
التحولات يمكن أن يكون أي عدد. يمكن أن تأتي العديد من التحولات إلى حالة والخروج بنفس الطريقة بشكل غير محدود. تحدد التحولات إمكانية الوصول إلى الولايات. على سبيل المثال ، إذا لم يكن هناك انتقال مباشرةً بين الدولتين A و F ، ولكن هناك سلسلة A → B → C → D → E → F ، فعندما تطلب الانتقال من A إلى F ، فسوف يفهم الرسم البياني نفسه أنه يحتاج إلى المرور عبر الولايات الوسيطة B و C و D و E.
التحولات لها إعدادات بداية الفاصل الزمني والمدد. مع مرور الوقت ، كل شيء بسيط - هذا هو الوقت الذي سيتم فيه الانتقال. لكن الفاصل الزمني أكثر تعقيدًا بالفعل: فهو يحدد الفترة الزمنية المقبولة للرسوم المتحركة عندما يمكن بدء الانتقال.
على سبيل المثال ، لكي تجلس شخصية ما ، عليك أولاً أن تلعب الرسوم المتحركة أثناء جلوسه ، ثم تبدأ الرسوم المتحركة للجلوس. في هذه الحالة ، يجب أن تكون الفاصل الزمني للانتقال من "الجلوس لأسفل" إلى "الجلوس" في نهاية الرسوم المتحركة "يجلس" حتى نتمكن من رؤية كيف يجلس ، ثم في النهاية بسرعة ولكن بسلاسة في الرسوم المتحركة للمقعد.
مثال آخر: الشخصية تمشي ويجب أن يتوقف. في هذه الحالة ، يجب أن يكون الفاصل الزمني لبدء النقل هو طول الرسوم المتحركة بالكامل ، لأن الشخصية يمكن أن تتوقف في أي وقت.
يقوم الرسم البياني للرسوم المتحركة بجميع الأعمال ذات الصلة:
- يخطط الطريق إلى الحالة اللازمة ؛
- تحديث الحالات قيد التشغيل حاليًا
- يجعل الانتقال السلس بين الدول.
- يضبط الأوزان فيها.
ميزات مثيرة للاهتمام
هناك العديد من أنواع الرسوم المتحركة المختلفة في محرك Playrix: النماذج ثلاثية الأبعاد ، العمود الفقري ، الفلاش ، تأثيرات الجسيمات ، الرسوم المتحركة الهيكلية. كل نوع لديه وحدة تحكم محددة.
بالإضافة إلى أدوات التحكم في الرسوم المتحركة البسيطة ، لدينا العديد من الأدوات المساعدة. على سبيل المثال ، وحدة تحكم عشوائية. قد تتضمن قائمة وحدات التحكم الأخرى واحتمال اختيارهم. في كل مرة يدخل فيها الكائن حالة باستخدام وحدة التحكم العشوائية هذه ، يتم الاختيار العشوائي مع مراعاة الاحتمالات ، وتبدأ وحدة التحكم المحددة في العمل. الباقون نائمون وغير نشطين ، في انتظار لحظتهم.
لكن في بعض الأحيان في حالة واحدة نحتاج إلى تبديل الرسوم المتحركة. على سبيل المثال ، إذا كان هناك العديد من الشخصيات لها نفس الرسم البياني ، وكلها تحتوي على نوع من الحركة الرسومية. تحتاج إحدى الشخصيات إلى الحصول على مكنسة وبدء الانتقام ، وشخصية أخرى للحصول على الكاميرا والبدء في التقاط الصور ، والثالث هو تناول الآيس كريم. في مثل هذه الحالات ، هناك وحدة تحكم خاصة ، والتي تحتوي أيضًا على قائمة وحدات التحكم ، ولكن على عكس تلك العشوائية ، فإنه هنا يختار وحدة تحكم وفقًا للمتغير.
يتم تعيين المتغيرات في الرسم البياني ويمكن تغييرها من الخارج ، على سبيل المثال من التعليمات البرمجية. في هذا المثال ، يتم استخدام نوع سلسلة ، ويتوافق كل نوع من الإجراءات مع قيمة معينة للمتغير. عندما يتم إنشاء شخصية في اللعبة ، يتم تعيين هذا المتغير له حسب السلوك المطلوب.
لدينا أيضًا وحدة تحكم يمكنها مزج الرسوم المتحركة المتعددة. على سبيل المثال ، يمكنك مزج الرسوم المتحركة للمشي واليسار واليمين والأمام. وبالتالي ، عند الانعطاف ، يمكنك ضبط الأوزان بينهما حتى لا تنزلق أرجل الشخصية وتبدو المشي طبيعية.
نحن بحاجة للذهاب أعمق
هناك الكثير من المزايا لحقيقة أننا نجعل وحدتنا. واحد منهم هو أنه يمكننا أن نفعل ما نريد وما نريد. وأردنا فرصة غير محدودة لتوسيع الرسم البياني للرسوم المتحركة.
لدينا واجهة تحكم ، وهناك عدة وحدات تحكم "خارج الصندوق" ، وهناك القدرة على تنفيذ الواجهة وعمل أي شيء فيها (وليس بالضرورة رسم متحرك):
- تغيير النص على الزر ؛
- التفاعل مع الكائنات الأخرى في التسلسل الهرمي ؛
- وحتى إدارة الرسم البياني للرسوم المتحركة آخر.
استخدمنا هذا النهج في زوار حديقة الحيوان في لعبة Wildscapes. كل زائر له رسمان بيانيان: واحد لتحريك النموذج ، والآخر لتنشيط السلوك.
الرسم البياني الأول بسيط للغاية ، ويتحكم في المشي ، ويمكن أن يلعب بعض الرسوم المتحركة للشخصيات المنفصلة.
الرسم البياني الثاني أكثر تعقيدًا ويحتوي على بعض سيناريوهات السلوك. على سبيل المثال ، أولاً يذهب الحرف ، ثم يجلس على مقاعد البدلاء ، يحيي شخصًا ، يلتقط الصور ويستمر. هذا هو فرع الدولة منفصلة.
يمكن وضع هذا المنطق في العمود الأول ، ولكن بعد ذلك سيتم تكرار الرسوم المتحركة عدة مرات. ولكن مع اثنين من الرسوم البيانية ، كل شيء أبسط بكثير. يحتوي الرسم البياني للتحكم على سلسلة من الحالات ، بما في ذلك حالات من الرسم البياني الأول ، والتي تعمل بالتوازي.
ما التالي؟
يعرف الرسم البياني لدينا الكثير بالفعل ، ولكن لا يزال هناك مجال كبير للتنمية. الخطط تجعل مجموعة من عدة ولايات ، مع التعشيش. هذا سوف تبسيط أعمدة السعي إلى حد كبير. تتضمن الخطط أيضًا العمل لتحسين عرض الرسوم البيانية والروابط. الآن تشبه الاتصالات على الرسوم البيانية الكبيرة السباغيتي (حتى اللون مشابه) ، وأحيانًا يكون من السهل الخلط.