HeadlinesBriefing favicon HeadlinesBriefing.com

دليل الرسوم المتحركة في Bevy: اللاعب والرسم البياني

Hacker News •
×

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

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

الحدس الأول: دعنا ننسى Bevy وECS لثانية، ونفكر (بشكل تجريدي جدًا) فيما يتطلبه تحريك نموذج ثلاثي الأبعاد متحرك. تحتاج إلى مكونين: نموذج ثلاثي الأبعاد تم إنشاؤه (أو نوع من المرجع إليه)، ورسوم متحركة لتشغيلها (أو نوع من المرجع إليها). لذا في البداية، قد تتوقع تشغيل رسم متحرك بطريقة مثل: my_model.play_animation(my_animation); إليك نموذجنا الذهني حتى الآن: الآن هذا قريب إلى حد ما من طريقة عمل وظيفة Bevy الفعلية، وهي طريقة play من نوع AnimationPlayer... أو على الأقل سيكون كذلك، إذا كان self يشير فعليًا إلى نموذج ثلاثي الأبعاد، وكانت وسيطة animation تشير فعليًا إلى رسم متحرك. الآن، ومع ذلك، ليس من الواضح أنهما يفعلان ذلك. لكن دعنا ننظر بمزيد من التفصيل في كيفية تمثيل مكونينا في Bevy، وربما يمكننا التوفيق بين حدسنا وطريقة عمل وظيفة play.

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

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

تجميعها معًا: حسنًا، لنفترض أن لديك AnimationPlayer، بالإضافة إلى AnimationGraph وNodeIndex. إليك كيفية ربطها لتشغيل الرسم المتحرك الخاص بك: أدخل مرجعًا إلى ....