उन लोगों के लिए सारांश जो लंबे उत्तर पसंद नहीं करते ...
यह किया जा सकता है, लेकिन अगर कोई विलंबता हो तो सही मल्टीप्लेयर भौतिकी करना असंभव है । क्यों विलंबता प्रभाव भौतिकी को समझाया जाता है, और फिर आपके भौतिकी सिमुलेशन पर विलंबता के प्रभाव को कम करने के लिए सुझाव दिए जाते हैं।
मल्टीप्लेयर फिजिक्स गेम बनाना पेरिल से भरा जा सकता है। एक "संपूर्ण" ऑनलाइन मल्टीप्लेयर भौतिकी अनुभव बनाना असंभव है। ऐसी चीजें हैं जो आप इसे बेहतर बनाने के लिए कर सकते हैं, लेकिन किसी भी विलंबता को सही भौतिकी बनाने का कोई तरीका नहीं है।
समस्या यह है कि भौतिक विज्ञान को यथार्थवादी होने के लिए तेज और उत्तरदायी होना चाहिए, लेकिन साथ ही साथ सभी कारकों के संयुक्त कार्यों के आधार पर गणना करना होगा - जिसका अर्थ है सभी खिलाड़ियों की संयुक्त कार्रवाई। और अगर वहाँ विलंबता है, यह वास्तविक समय में नहीं किया जा सकता है।
यह तय करना एक डेवलपर के रूप में है कि क्या आप विभिन्न कारकों को नियंत्रण में रख सकते हैं, और यह समझने के लिए कि यदि विलंबता बहुत अधिक हो जाती है तो खिलाड़ी का अनुभव ख़राब हो जाएगा। यदि आप उस (और आपके खिलाड़ी कर सकते हैं) के साथ रह सकते हैं, तो इसके लिए जाएं। कुछ नोटों के बारे में इस पोस्ट के अंत की ओर देखें कि कैसे आप स्मूथ चलने वाली चीजों को रख सकते हैं।
यह दिखाने के लिए कि कैसे चीजें गड़बड़ हो सकती हैं
एक ऐसे खेल की कल्पना करें जहां दो खिलाड़ी (क्लाइंट) एक सर्वर से जुड़े हों। क्लाइंट से सर्वर तक इंटरनेट पर जाने के लिए एक संदेश के लिए 100 मिलीसेकंड (1/10 वां सेकंड) लगता है। जब कोई खिलाड़ी कुछ करता है, तो सर्वर को संदेश भेजा जाता है कि उन्होंने क्या किया है। सर्वर तब संदेश को अन्य खिलाड़ियों के लिए प्रसारित करता है ताकि वे सभी जान सकें कि अभिनय खिलाड़ी ने क्या किया।
अब एक परिदृश्य बनाएं जहां दो खिलाड़ियों के पास जमीन पर एक टोकरा है जो एक भौतिक वस्तु है। प्लेयर ए इसे एक तरफ से हिट करता है, जिससे यह किसी दिशा में आगे बढ़ता है। हालाँकि एक ही समय में, खिलाड़ी B इसे दूसरी तरफ भेजता है, इसे दूसरी दिशा भेजता है।
आइए इसे संभालने के विभिन्न तरीकों पर गौर करें और इसके क्या परिणाम होंगे ...
क्या होगा यदि भौतिकी की गणना सिर्फ सर्वर पर की जाए?
मान लीजिए कि हमारे पास केवल सर्वर पर गणना की गई भौतिकी है। प्लेयर ए भेजता है "मैं इस तरह टोकरा मारता हूं" संदेश सर्वर पर, 1/10 वीं दूसरी बाद में सर्वर को संदेश मिलता है। प्लेयर बी अपने "मैं इस तरह से टोकरा मारा" संदेश भेजता है। सर्वर दो कार्यों के संयोजन से भौतिकी परिवर्तन की गणना करता है, और दोनों खिलाड़ियों को यह कहते हुए वापस संदेश भेजता है, "ठीक है, यह इस तरह से चलता है।" परफेक्ट फिजिक्स का प्रदर्शन किया जाता है, जो दोनों खिलाड़ियों की संयुक्त क्रियाओं के आधार पर होता है।
लेकिन समस्या यह है कि खिलाड़ी के क्रेट प्रतिक्रिया को देखने से पहले यह एक सेकंड का 2/10 वां होगा। दोनों खिलाड़ियों के संदेश सर्वर तक पहुंचने के लिए सेकंड का 1/10 वां हिस्सा लेते हैं, फिर सर्वर गणना के परिणाम के लिए एक सेकंड का 1/10 वां भाग दोनों खिलाड़ियों के लिए भेजा जाता है।
निचला रेखा, लम्बी गेमप्ले।
क्या होगा अगर भौतिक विज्ञान की गणना सिर्फ ग्राहक पर की जाए?
मान लीजिए कि हमारे पास केवल क्लाइंट पर गणना की गई भौतिकी है। आइए इसे प्लेयर ए के दृष्टिकोण से देखें। प्लेयर ए हिट करता है और यह तुरंत उनकी दिशा में जाने लगता है। सर्वर को एक संदेश भी भेजा जाता है कि प्लेयर A ने क्या किया है।
हालांकि उसी समय, बी ने अपना हिट किया और क्रेट को अपनी दिशा में जाते हुए देखा और सर्वर को एक संदेश भेजा कि उन्होंने क्या किया है।
2/10 सेकंड के बाद, सर्वर से क्लाइंट के लिए एक संदेश आता है। A को B ने क्या किया, और B को A ने क्या किया है, बताया जाता है। समस्या यह है कि दोनों ग्राहकों का कहना है, "वैसे खिलाड़ी X ने इस मौके पर हिट किया हो सकता है, लेकिन उस स्थान पर अब कोई टोकरा नहीं है, इसलिए उनके हिट ने कुछ नहीं किया।"
लब्बोलुआब यह है कि, सिंक से बाहर दो गेम और खिलाड़ियों को साझा अनुभव नहीं है। यदि वे दोनों अलग-अलग चीजें देखते हैं तो मल्टीप्लेयर की बात क्या है?
क्या होगा अगर भौतिक विज्ञान की गणना क्लाइंट और सर्वर दोनों पर की जाए?
इस मामले में, भौतिकी की गणना क्लाइंट पर की जाती है, इसलिए खिलाड़ियों को तत्काल नो-लैग प्रतिक्रिया दिखाई देती है, लेकिन यह सर्वर पर भी गणना की जाती है, इसलिए यह सभी खिलाड़ियों के लिए "सही" है।
दोनों खिलाड़ियों ने अपने-अपने निर्देशन में टोकरा मारा और प्रत्येक ने केवल अपने हिट के आधार पर टोकरा चाल को देखा। लेकिन फिर 2/10 सेकंड के बाद, सर्वर वापस आता है और कहता है, "वास्तव में, आप दोनों गलत हैं। टोकरा इस तरह से चला गया।" अचानक दोनों खिलाड़ियों को टोकरा काफी हद तक दिशाओं को बदलता है और एक नए स्थान पर गड़बड़ करता है।
निचला रेखा एक गड़बड़ खेल है।
निष्कर्ष
मूल रूप से किसी भी प्रकार की विलंबता मौजूद होने पर कई खिलाड़ियों के साथ एक सही भौतिकी खेल बनाने का कोई तरीका नहीं है। आप एक बहुत अच्छा खेल बना सकते हैं, लेकिन आपको हमेशा कुछ खिलाड़ियों के लिए एक बुरा अनुभव बनाने की अत्यधिक विलंबता का जोखिम होगा। हालांकि ऐसी चीजें हैं जो आप अपने खेल के अनुभव को अच्छा रखने के लिए कर सकते हैं।
मल्टीप्लेयर गेम को अच्छी तरह से चलाने के लिए आप जो चीजें कर सकते हैं
साधारण टकराव की मात्रा का उपयोग करें। जब एक सरल घन आकार कर देगा, तो भौतिकी के साथ आकृति के हर विवरण को परेशान न करें। एक स्पाइकी बॉल को भौतिकी के लिए स्पाइकी बॉल के रूप में तैयार नहीं किया जाता है। इसके बजाय इसे एक क्षेत्र के रूप में मॉडल करें।
केवल छोटी-मोटी असंगत वस्तुओं को ही ग्राहक बनाएं। एक उदाहरण टूटी हुई खिड़की से टूटे हुए कांच के टुकड़े हो सकते हैं। आप प्रत्येक ग्राहक को अपने दम पर इसका अनुकरण करने दे सकते हैं, और यदि वे अलग हैं तो यह वास्तव में मायने नहीं रखेगा।
सक्रिय भौतिकी वस्तुओं की संख्या कम रखने के लिए केवल भौतिक विज्ञान वस्तु होने की आवश्यकता होने पर ही वस्तुओं को भौतिक वस्तुएं बनाएं।
मल्टीप्लेयर भौतिकी करते समय अपने गेम को धीमी गति में चलाएं। शायद "बुलेट टाइम" सोचें। धीमी गति के खेल विलंबता के लिए क्षतिपूर्ति करते हैं और कई खिलाड़ियों को भौतिकी के साथ बातचीत करने की अनुमति देते हैं।
खिलाड़ियों को किसी तरह की स्थिति को एक साथ स्थापित करने की अनुमति दें, और फिर कुछ क्यू पर, भौतिकी दोनों खिलाड़ियों के लिए सिम्युलेटेड है और दोनों अपने संयुक्त कार्यों का परिणाम देखते हैं। जब तक यह पूरा न हो जाए, खिलाड़ी अनुक्रम में हस्तक्षेप नहीं कर सकते।
अलग-अलग खिलाड़ियों के फिशिक्स ताकि वे एक-दूसरे के साथ हस्तक्षेप न कर सकें। यह गेंदबाजी या पूल जैसे खेल के लिए बहुत अच्छा होगा, जहां एक समय में केवल एक खिलाड़ी का नियंत्रण होता है, या प्रत्येक खिलाड़ी का अपना "सैंडबॉक्स" होता है (जैसे बॉलिंग लेन)।
यदि आप उन्हें हरा नहीं सकते हैं, तो उन्हें शामिल करें और भौतिकी अंतराल को अपने खेल का हिस्सा बनाएं। टूटी भौतिकी कानूनों या कुछ के साथ एक गड़बड़ ब्रह्मांड में होने के बारे में एक कहानी की कल्पना करो :)
परिशिष्ट: शूटिंग के खेल इसके साथ कैसे निपटते हैं
अत्यधिक जटिल भौतिकी न करके शूटिंग गेम्स इससे निपटते हैं। वे क्लाइंट साइड इफेक्ट्स का उपयोग करते हैं ताकि खिलाड़ी जल्दी से चीजों को देखें, लेकिन फिर सर्वर अंतिम कॉल करता है कि क्या हुआ है।
एक ऐसे परिदृश्य की कल्पना करें जहां खिलाड़ी ए शूट खिलाड़ी बी। आपका विशिष्ट शूटर गेम कुछ ऐसा करेगा ...
- ए स्थानीय रूप से गणना करेगा यदि वे बी को मारते हैं, और अगर ऐसा लगता है कि कोई हिट है, तो यह रक्त पफ की तरह "हिट" प्रभाव निभाता है। यह क्लाइंट की ओर से किया जाता है ताकि खिलाड़ी तुरंत उनकी कार्रवाई पर प्रतिक्रिया देखे। यदि आप ऐसा नहीं करते हैं, तो खेल में कमी महसूस होती है।
- एक सर्वर को एक संदेश भी कहता है, "मैंने इस वेक्टर के साथ शूटिंग की है"
- जब सर्वर को संदेश मिलता है, तो यह दिखता है कि आईटी को लगता है कि खिलाड़ी कहां हैं, और फैसला करता है कि क्या ए का शॉट वेक्टर बी से टकराता है।
- यदि सर्वर ए हिट बी तय करता है, तो यह तय करता है कि बी हिट है, और बीओटीएच ग्राहकों को संदेश भेजता है कि क्या हुआ।
- यदि सर्वर तय करता है कि A ने B को नहीं मारा, तो B ठीक है, और A "मिस" है। यह ए की तरह लग सकता है जैसे उन्होंने मारा ("मैंने रक्त कश देखा!") लेकिन यह सर्वर कॉल है कि वे चूक गए।
तो ए बी को कैसे याद कर सकता है जब ऐसा लगता है कि वे उन्हें मारते हैं? क्योंकि B स्थानांतरित हो सकता है, लेकिन A ने इसे अभी तक नहीं देखा है क्योंकि सर्वर ने क्लाइंट को अभी तक "B यहाँ ले जाया गया" संदेश नहीं भेजा है।
इस बारे में उनकी साइट पर वाल्व का एक अच्छा राइटअप है। Http://developer.valvesoftware.com/wiki/Source_Multeps_Networking देखें