नोट: मैंने कुछ दिन पहले स्टैक ओवरफ्लो पर यह पूछा था लेकिन बहुत कम विचार और कोई प्रतिक्रिया नहीं मिली। इसके बजाय मुझे Gamdev.stackexchange पर पूछना चाहिए।
यह एक सामान्य प्रश्न / अनुरोध है कि पहले से तैयार की गई सामग्री को तोड़े बिना कई पोस्ट-रिलीज़ अपडेट के माध्यम से एक प्रक्रियात्मक पीढ़ी प्रणाली को बनाए रखने के लिए सलाह।
मैं खेलों के लिए प्रक्रियात्मक सामग्री बनाते समय "बटरफ्लाई प्रभाव" मुद्दों से बचने के लिए जानकारी और तकनीक खोजने की कोशिश कर रहा हूं। बीजयुक्त यादृच्छिक संख्या जनरेटर का उपयोग करते समय, पुन: प्रयोज्य दुनिया बनाने के लिए यादृच्छिक संख्याओं के दोहराव अनुक्रम का उपयोग किया जा सकता है। जबकि कुछ गेम केवल उत्पन्न दुनिया को एक बार उत्पन्न होने के लिए डिस्क पर सहेजते हैं, प्रक्रियात्मक पीढ़ी की शक्तिशाली विशेषताओं में से एक तथ्य यह है कि आप किसी क्षेत्र को उसी तरह से कई बार पुन: बनाने के लिए संख्या अनुक्रम की पुनरुत्पादकता पर भरोसा कर सकते हैं, जिसकी आवश्यकता को दूर करते हुए हठ। मेरी विशेष स्थिति की बाधाओं के कारण, मुझे दृढ़ता को कम करना चाहिए, और जितना संभव हो सके विशुद्ध रूप से वरीयता प्राप्त सांद्रता पर भरोसा करने की आवश्यकता है।
इस दृष्टिकोण में मुख्य खतरा यह है कि यहां तक कि प्रक्रियात्मक पीढ़ी प्रणाली में थोड़ा सा बदलाव भी पूरी दुनिया को बदलने वाले एक तितली प्रभाव का कारण बन सकता है। यह खिलाड़ियों को खोज रहे दुनिया को नष्ट किए बिना गेम को अपडेट करने के लिए बहुत मुश्किल बना देता है।
इस समस्या से बचने के लिए मैं जिस मुख्य तकनीक का उपयोग कर रहा हूं, वह है कि प्रक्रियात्मक पीढ़ी को कई चरणों में डिजाइन करना, जिसमें से प्रत्येक का अपना रैंडम रैंडम नंबर जनरेटर हो। इसका मतलब यह है कि प्रत्येक उप-प्रणाली स्वयं निहित है, और अगर कुछ टूट जाता है तो यह दुनिया की हर चीज को प्रभावित नहीं करेगा। हालांकि ऐसा लगता है कि यह अभी भी "टूटना" की बहुत संभावना है, भले ही खेल के एक अलग हिस्से में।
इस समस्या से निपटने का एक और संभव तरीका कोड के भीतर अपने जनरेटर के पूर्ण संस्करण को बनाए रखना हो सकता है, और किसी दिए गए विश्व उदाहरण के लिए सही जनरेटर का उपयोग करना जारी रख सकता है। यह मेरे लिए एक दुःस्वप्न की तरह लगता है, और मुझे उत्सुकता है अगर कोई वास्तव में ऐसा करता है।
तो, मेरा प्रश्न वास्तव में तितली प्रभाव की इस समस्या से निपटने के लिए सामान्य सलाह, तकनीक और डिजाइन-पैटर्न के लिए एक अनुरोध है, विशेष रूप से रिलीज के बाद के खेल अपडेट के संदर्भ में। (उम्मीद है कि यह बहुत व्यापक सवाल नहीं है।)
मैं वर्तमान में यूनिटी 3 डी / सी # में काम कर रहा हूं, हालांकि यह एक भाषा अज्ञेय प्रश्न है।
अपडेट करें:
आपके उत्तरों के लिये धन्यवाद।
यह अधिक से अधिक देख रहा है जैसे स्थैतिक डेटा सबसे अच्छा और सबसे सुरक्षित दृष्टिकोण है, और यह भी कि जब बहुत सारे स्थैतिक डेटा को संग्रहीत करना एक विकल्प नहीं है, तो उत्पन्न दुनिया में एक लंबे अभियान के लिए उपयोग किए जाने वाले जनरेटर के सख्त संस्करण की आवश्यकता होगी। मेरे मामले में सीमा का कारण मोबाइल आधारित क्लाउड सेव / सिंक की आवश्यकता है। मेरा समाधान आवश्यक चीजों के बारे में छोटी मात्रा में कॉम्पैक्ट डेटा संग्रहीत करने के तरीकों को ढूंढना हो सकता है।
मैं "पिंजरों" की स्टॉर्मविंड की अवधारणा को चीजों के बारे में सोचने का एक विशेष रूप से उपयोगी तरीका मानता हूं। एक पिंजरा मूल रूप से एक रेसिडेंस पॉइंट होता है, जो छोटे-छोटे बदलावों के साथ-साथ चलने वाले प्रभावों को रोकता है, अर्थात तितली को पकड़ना।