परिष्कृत स्टेट मशीनला रीइव्हेंट करु नका: युनिटीचे अ‍ॅनिमेटर कसे वापरायचे

एका कारणास्तव फिमीट स्टेट मशीन्स गेम डेव्हलपमेंटमधील सर्वात लोकप्रिय नमुने आहेत. आपण जटिलता कमी करू शकता आणि मॉड्यूलर, पुन्हा वापरण्यायोग्य राज्यांना प्रोत्साहन देऊन अधिक वाचनीय प्रोग्राम तयार करू शकता. एफएसएम (फिनिट स्टेट मशीन) अधिक गुंतागुंतीच्या परिस्थितींमध्ये मोजले जाऊ शकत नसले तरी, अनुप्रयोगाच्या स्थितीवर काम करणे किंवा साधे एआय तयार करणे यासारख्या सामान्य परिस्थितींमध्ये ते उत्कृष्ट आहेत. *

* मी एफएसएमच्या मूलभूत संकल्पना स्पष्ट करणार नाही आणि त्यांचा उपयोग करणार नाही कारण मला असे वाटते की गेम प्रोग्रामिंगच्या नमुन्यांवरील बॉब नायस्ट्रॉम यांच्या पुस्तकावरील या लेखासारखे ऑनलाइन बरेच चांगले लेख ऑनलाइन आहेत.

एफएसएम तयार करण्यासाठी आणि वापरण्यासाठी दोन मुख्य पध्दती आहेत: वेगवान आणि चुकीची अंमलबजावणी लिहिणे, किंवा मालमत्ता स्टोअरमधून वापरण्यासाठी मालमत्ता खरेदी करणे. तथापि, तेथे तिसरा पर्याय आहेः युनिटीमध्ये एकत्रित theनिमेटर सिस्टम (मेकानिम) वापरणे.

आपण युनिटी अ‍ॅनिमेशन सिस्टम का वापराल?

अ‍ॅनिमेशन सिस्टम पुन्हा राज्य मशीन तयार करण्यासाठी वापरणे विचित्र वाटेल, परंतु अ‍ॅनिमेटर एक स्टेट मशीन आहे. अ‍ॅनिमेटर सिस्टम अ‍ॅनिमेशन-विशिष्ट फंक्शन्स ऑफर करते, जे आपल्या मार्गाने असू शकते, परंतु आपल्याला पाहिजे असलेल्या सर्वकाही. यात रनटाइमवर राज्य मशीनचे संपादन आणि व्हिज्युअलाइझ करण्यासाठी साधने आहेत. याव्यतिरिक्त, हे युनिटीद्वारे समर्थित आहे, ज्याची लाखो विकसकांनी चाचणी केली आहे आणि सर्व विद्यमान युनिटी अ‍ॅनिमेशन अनुभव लागू आहेत.

त्याऐवजी द्रुत आणि गलिच्छ अंमलबजावणी का तयार करू नये?

वेगवान आणि गोंधळ अंमलबजावणी ज्या कामासाठी विकसित केली गेली त्या चांगल्या प्रकारे कार्य करते. तथापि, आपल्याला हा नमुना इतरत्र वापरण्याची आवश्यकता असल्यास, आपल्याला तोच कोड पुन्हा पुन्हा लिहावा लागेल. अ‍ॅनिमेटर सिस्टम पुन्हा वापरण्यायोग्य राज्य वर्तनासह भिन्न राज्य मशीन्स सहज तयार करू शकते.

मग थर्ड-पार्टी अ‍ॅसेट बद्दल काय?

अशी तृतीय-पक्षाची मालमत्ता आहेत ज्यात जटिलता आणि कार्यक्षमतेच्या दृष्टीने अ‍ॅनिमेटर सिस्टम चालू ठेवता येते (जसे की नोडकॅनवास). त्यांना क्लिनर एपीआयचा फायदा देखील आहे कारण ते अ‍ॅनिमेशनशी संबंधित नाहीत. मी स्वतःची अंमलबजावणी देखील तयार केली जी मी अ‍ॅनिमेटरचा पुन्हा वापर कधीच केली नाही. आपल्याला राज्य मशीन्स एनिमेट करण्यासाठी आणि पुन्हा वापरण्यासाठी अ‍ॅनिमेटरचा वापर करायचा आहे, म्हणून आपल्याला दोन समान सिस्टममधील संदर्भ बदलण्याची आवश्यकता नाही.

ठीक आहे, मी कसे सुरू करू?

प्रथम मी युनिटीच्या अ‍ॅनिमेटर सिस्टम (मेकानिम) च्या मूलभूत संकल्पना समाविष्ट करीन.

  • युनिटीमध्ये आपण अ‍ॅनिमेटर कंट्रोलर नावाची एक मालमत्ता तयार करू शकता. हे राज्य मशीन टेम्पलेट आहे.
  • आपल्या राज्य मशीनमध्ये राज्ये आहेत. आपण कदाचित अ‍ॅनिमेशनसह राज्ये संबद्ध करण्यास सज्ज आहात. तथापि, आपण पूर्णपणे लॉजिकल स्टेट मशीन तयार करू इच्छित असल्यास ते वैकल्पिक आहेत.
  • आपले राज्य मशीन चालविण्यासाठी, गेमऑब्जेक्टमध्ये अ‍ॅनिमेटर नावाचा घटक जोडा आणि आपण तयार केलेल्या अ‍ॅनिमेटर नियंत्रकासह सेट करा. हे आता आपल्या स्टेट मशीनचे उदाहरण आहे.
  • प्रत्येक राज्यासाठी तर्कशास्त्र चालविण्यासाठी, आम्हाला एक स्क्रिप्ट तयार करण्याची आवश्यकता आहे जी स्टेटमाचीन बीहावीअर वर्गाची आहे. एकदा आमच्याकडे ही नवीन वर्तन झाली की आम्ही ते राज्य मशीनमधील कोणत्याही राज्यात जोडू शकतो. **

आपण येथे अ‍ॅनिमेटर्सबद्दल अधिक जाणून घेऊ शकता किंवा ट्यूटोरियल येथे पाहू शकता.

** लक्षात घ्या की हे मोनोबेव्हिअर्स प्रमाणेच कार्य करते: स्क्रिप्टला ऑनएन्टर, ऑनएक्सिट इत्यादीसारखे पूर्वनिर्धारित संदेश प्राप्त झाले.

आपण स्टेटमाचीन बीहाव्हीअर्स कसे वापराल?

सामान्यतः, मी स्टेटमाचीन बीहावीअरचा वारसा मिळवताना ऑनस्टेटएन्टर आणि ऑनस्टेटएक्झिट संदेशांचा वापर करून ऑब्जेक्ट्सचे जीवन चक्र आणि त्यांचे स्वतःचे वर्तन व्यवस्थापित करण्यासाठी राज्ये वापरतो. उदाहरणार्थ, मला माझे राज्य खेळाचे कार्यक्रम ऐकावेसे वाटत असेल तर मी सहसा जेव्हा श्रोते प्रवेश करतो तेव्हा त्यांना जोडतो आणि जेव्हा ते निघतात तेव्हा त्यांना काढून टाकतो. बाहेर पडताना ऑब्जेक्ट्स साफ करून, आपण वाचलेले गेम ऑब्जेक्ट्स किंवा झोम्बी श्रोत्यासारखे समजण्यास कठीण असणारे परिणाम टाळू शकता. आपल्या राज्यात खेळावर परिणाम होऊ नये अशी आपली इच्छा आहे!

एक समस्या मी लक्षात घेतली आहे की जेव्हा अ‍ॅनिमेटर अक्षम किंवा नष्ट होतो तेव्हा ऑनस्टेटएक्सिट कॉल करत नाही. सद्यस्थिती योग्यरित्या साफ करण्यासाठी, आपण ओएनडीएबल *** देखील उपचार केले आहेत हे सुनिश्चित करणे आवश्यक आहे.

*** स्वत: चा वेळ वाचवण्यासाठी मी माझ्या गेममध्ये आयात केलेला एक भांडार तयार केला आहे. आपल्या स्वत: च्या प्रकल्पांमध्ये हे वापरण्यास मोकळ्या मनाने!

चला माझ्या स्वत: च्या गेम, जेलीक्वेस्टमध्ये शत्रूसाठी तयार केलेले एक साधे राज्य मशीन जाऊ.

ही खराब पफर फिश आहे. जोपर्यंत तो प्लेअरला पाहत नाही तोपर्यंत हळू फिरतो आणि नंतर पटकन तो खेळाडूच्या दिशेने सरकतो.

पफर हे प्रीफेब्रिकेटेड घर आहे जे एंग्रीपफरफिश नावाच्या अ‍ॅनिमेटर कंट्रोलरद्वारे कॉन्फिगर केले आहे. तेथे तीन राज्ये आहेत: लक्ष्य करणे, घेणे आणि घेणे यासाठी तयारी करणे. पफर "ध्येय" स्थितीत प्रारंभ होतो, जो दोन स्थिती वर्तन बनलेला असतो: "रोटेटफेसिंग डायरेक्शन" आणि "आयएमआयएनफेसिंग डायरेक्शन".

रोटेटफेसिंग डायरेक्शन कॉन्फिगर करण्यायोग्य वेगावर आधारित पफर फिरवते. AimInFacingDirection एक रेफाकास्ट वापरुन पफरला लक्ष्य आहे की नाही हे निर्धारित करते.

"प्रीपरिंग टूशूट" स्थितीत, मी विलंब कालावधीसाठी पॅरामीटरसह पुन्हा "ट्रिगरकंटिन्यूएफटरडेले" स्थिती वर्तन वापरतो.

रेकॉर्डिंग स्थितीत, मी पफर फिश प्लेअरकडे हलविण्यासाठी मूव्हइनफॅकिंगडिरेक्शन स्थिती वर्तन वापरतो.

या प्रत्येक आचरणाला सामान्य हेतू बनवून, मी शत्रूचे विविध प्रकार तयार करण्यासाठी त्यास इतर राज्य मशीनमध्ये चिमटा आणि पुन्हा वापरु शकतो.

छान, मला आणखी काही माहित असावे?

लक्ष ठेवण्यासाठी काही सामान्य अडचणी आहेत. आपण अ‍ॅनिमेटर सिस्टमशी जितके परिचित आहात तितके ते अधिक उपयुक्त आहेत.

  • कोड लिहून कंटाळा आला आहे जो एकाच फ्रेममध्ये एकाधिक वेळा ट्रिगर सेट करू शकतो. ट्रिगर केवळ एकदाच संक्रमणाद्वारे वापरली जात असल्याने, ट्रिगर उपभोगानंतर सेट केली जाऊ शकते आणि सद्य स्थितीनुसार राहील.
  • मुलांच्या संगणकावर ऑनस्टेटएन्टर आणि ऑनस्टेट एक्झिट अपेक्षेनुसार कार्य करू शकत नाही. जेव्हा सबसेट मशीनचे इनपुट आणि आउटपुट नोड दाबा जातात तेव्हाच त्यांना म्हटले जाते. तथापि, या नोड्स एका विशिष्ट सबस्टेट किंवा बाह्य स्थितीत थेट संक्रमणे करून चुकून बायपास करता येतात.
  • संक्रमण कालावधी नेहमी शून्यावर सेट केला पाहिजे. संक्रमणाचा कालावधी शून्य नसल्यास, पुढील स्थितीच्या ऑनएन्टरला सद्य स्थितीच्या ओएनएक्सिटपूर्वी कॉल केले जाते.
  • ट्रिगर वापरणार्‍या संक्रमणे त्याच फ्रेममध्ये पुढील राज्यात जातात. इतर पॅरामीटर प्रकारांवर आधारित संक्रमणासाठी अतिरिक्त फ्रेमची आवश्यकता असते.

टीएल; DR:

  • ऑब्जेक्ट्सचे जीवन चक्र व्यवस्थापित करण्यासाठी राज्य मशीन उपयुक्त आहेत
  • वापरकर्ते एकतर स्वतःची राज्य मशीन कोडमध्ये लिहितात किंवा मालमत्ता स्टोअरमध्ये तृतीय-पक्षाची मालमत्ता खरेदी करतात. आपण इतर कारणांसाठी युनिटी orनिमेटर देखील वापरू शकता.
  • अ‍ॅनिमेटरमध्ये अंगभूत व्हिज्युअलायझेशन, साधने, संक्रमणे आणि एक परिचित API आहे.
  • अ‍ॅनिमेटर वापरणे आश्चर्यकारक आहे, परंतु काही त्रुटींबद्दल सावधगिरी बाळगा. अधिक माहिती वर आढळू शकते!

आपण आपला संकलन वेळ कमी करू इच्छिता? किंवा चुकीचे बांधकाम रोखण्यासाठी आपला गेम स्वयंचलितपणे सत्यापित केला जाऊ शकतो? माझे इतर लेख पहा!