HeadlinesBriefing favicon HeadlinesBriefing.com

Bevy एनीमेशन गाइड: प्लेयर और ग्राफ

Hacker News •
×

तो आपने अभी एक मुफ्त संपत्ति वेबसाइट से एक एनिमेटेड 3D चरित्र .glb फ़ाइल डाउनलोड की है। आपके पास एक बुनियादी Bevy एप्लिकेशन चल रहा है। अब आप अपने Bevy ऐप में अपने चरित्र को स्पॉन करना चाहते हैं। काफी आसान है, शायद इसके लिए एक फ़ंक्शन है। आप Bevy की वेबसाइट पर बुनियादी Animated Mesh उदाहरण देखते हैं... और यह जल्दी से स्पष्ट हो जाता है कि चीजें उतनी सरल नहीं हैं जितनी आपने उम्मीद की थी। बहुत सारी सेटअप चीजें हैं, एनीमेशन से संबंधित प्रकार जिनका सटीक उद्देश्य स्पष्ट नहीं है... आप उदाहरणों को अपनी आवश्यकताओं के अनुरूप काफी जल्दी समायोजित करने में सक्षम हो सकते हैं, लेकिन उदाहरणों के आधार पर Bevy में एनीमेशन कैसे काम करता है, इसका वास्तविक मानसिक मॉडल बनाने में कुछ गंभीर विचार करना पड़ेगा।

यह पोस्ट वही है जो मैं चाहता था कि कुछ हफ्ते पहले Bevy में एनीमेशन को समझने की कोशिश करते समय मेरे पास होता। मैं कदम से कदम मिलाकर, Bevy में बुनियादी एनीमेशन से निपटने के लिए पर्याप्त मानसिक मॉडल बनाना शुरू करता हूं। फिर मैं आपको आधिकारिक उदाहरण के माध्यम से ले जाता हूं, यह समझाते हुए कि यह उस मानसिक मॉडल से कैसे संबंधित है, और उन तरीकों का सामना करते समय आपका हाथ भी पकड़ता हूं जिनका आपने अभी तक सामना नहीं किया होगा। यदि आप Bevy के ECS की मूल बातों से सहज हैं, तो आप इस पोस्ट के लक्षित दर्शक हैं।

पहला अंतर्ज्ञान: चलो एक सेकंड के लिए Bevy और ECS के बारे में भूल जाएं, और (बहुत अमूर्त रूप से) सोचें कि एक एनिमेटेड 3D मॉडल को स्थानांतरित करने के लिए क्या करना पड़ता है। आपको दो सामग्री चाहिए: एक स्पॉन किया गया 3D मॉडल (या उसके लिए किसी प्रकार का संदर्भ), एक एनीमेशन जिसे चलाया जाना है (या उसके लिए किसी प्रकार का संदर्भ)। तो पहले, जिस तरह से आप एनीमेशन चलाने की उम्मीद कर सकते हैं वह कुछ इस तरह है: my_model.play_animation(my_animation); यहाँ हमारा मानसिक मॉडल अब तक है: अब यह वास्तव में कुछ हद तक वास्तविक Bevy फ़ंक्शन के काम करने के तरीके के करीब है, अर्थात् AnimationPlayer प्रकार से play विधि... या कम से कम यह होगा, यदि इसका self वास्तव में 3D मॉडल को संदर्भित करता है, और इसका animation तर्क वास्तव में एक एनीमेशन को संदर्भित करता है। अभी, हालांकि, यह स्पष्ट नहीं है कि वे करते हैं। लेकिन आइए अधिक विस्तार से देखें कि हमारे दो सामग्री Bevy में कैसे दर्शाए गए हैं, और शायद हम अपने अंतर्ज्ञान को play फ़ंक्शन के काम करने के तरीके से मिला सकते हैं।

AnimationPlayer: 3D मॉडल के एनीमेशन को नियंत्रित करने का एक तरीका। मान लीजिए कि आप एक .glb फ़ाइल से 3D मॉडल स्पॉन करते हैं। आदर्श रूप से, आप स्पॉन की गई इकाई की आईडी का उपयोग करके इसे संदर्भित करना चाहेंगे, सिवाय इसके कि 3D मॉडल आम तौर पर एकल इकाई के रूप में स्पॉन नहीं होते हैं, बल्कि इकाइयों के पदानुक्रम के रूप में होते हैं: अपने मॉडल को एनिमेट करने के लिए, आपको इसे किसी अन्य तरीके से संदर्भित करने की आवश्यकता होती है। Bevy के पास ठीक ऐसा करने के लिए एक तंत्र है — एनीमेशन के लिए 3D मॉडल को संदर्भित करना — AnimationPlayer प्रकार के रूप में। AnimationPlayer एक घटक है जो स्वचालित रूप से एक इकाई में डाला जाता है... एक एनिमेटेबल 3D मॉडल के अनुरूप इकाई पदानुक्रम में कहीं, जब वह मॉडल स्पॉन होता है। एक बार जब आपके पास AnimationPlayer हो जाता है, तो आप इसे एनीमेशन चलाने/रोकने के लिए कह सकते हैं, वर्तमान में चल रहे एक तक पहुंच सकते हैं... लेकिन यह मानता है कि आपके पास पहले स्थान पर एनीमेशन हैं! आइए अब उन पर ध्यान केंद्रित करें।

AnimationGraph: एनीमेशन को संग्रहीत और संयोजित करने का एक तरीका। Bevy में एनीमेशन का प्रतिनिधित्व करने का तरीका थोड़ा जटिल है, क्योंकि आप आम तौर पर जो हेरफेर करेंगे वह एकल एनीमेशन नहीं है, बल्कि एक डेटा संरचना के उदाहरण हैं जो एक साथ कई एनीमेशन संग्रहीत करने और उन्हें एक दूसरे के साथ संयोजित करने में सक्षम हैं। वह संरचना AnimationGraph है। मैं यहां AnimationGraphs के उपयोग के विवरण में नहीं जाऊंगा; एक बार जब आप सरल एनीमेशन के साथ सहज हो जाते हैं, तो आप AnimationGraph उदाहरण के साथ सामान्य एनीमेशन ग्राफ के बारे में अधिक जान सकते हैं। अभी के लिए हम उन मामलों पर ध्यान केंद्रित करेंगे जहां हमारे ग्राफ में केवल एक एनीमेशन होता है जिसमें हम रुचि रखते हैं। उन मामलों में, आपके एनीमेशन की पहचान करने वाला डेटा होगा: (एक संदर्भ) एक AnimationGraph, एक पहचानकर्ता जहां आपका एनीमेशन वास्तव में ग्राफ के अंदर बैठता है — यही NodeIndex प्रकार के लिए है।

इसे एक साथ रखना: ठीक है, मान लीजिए कि आपके पास एक AnimationPlayer है, साथ ही एक AnimationGraph और एक NodeIndex है। यहां बताया गया है कि आप अपने एनीमेशन को चलाने के लिए उन्हें कैसे जोड़ते हैं: का संदर्भ डालें ....