मल्टीप्लेयर में जम्प जैसी क्रियाओं को कैसे सिंक्रोनाइज़ करना है?


11

मैं एक नौसिखिया गेम डेवलपर हूं और मैं मल्टीप्लेयर गेम के बारे में शोध कर रहा हूं। मैंने देखा कि हमेशा कुछ विलंबता होती है, खिलाड़ियों को हमेशा पिछले कार्यों से अपडेट मिलता है। लेकिन विलंबता को संभालने के लिए मृत रेकिंग जैसी तकनीकें हैं। मैं आंदोलन की भविष्यवाणी कर सकता हूं और आंदोलनों को सुचारू बना सकता हूं। लेकिन मैं कैसे कार्रवाई करूंगा जैसे कि कूदना, चलना बंद करना, आदि।

मान लीजिए, ग्राहक A चल रहा था, वह 100 मीटर / सेकंड वेग के साथ 10.2 बजे 100 मीटर पर था और इस जानकारी को भेजा। क्लाइंट B को यह जानकारी कुछ समय बाद मिलेगी, इसे 10.4 होने दें। तो क्लाइंट B पर, मैं भविष्यवाणी का उपयोग कर सकता हूं और क्लाइंट A को 120 मीटर पर रख सकता हूं। लेकिन क्या होगा, अगर क्लाइंट ने 10.3 पर 110 मीटर की छलांग लगाई। मैं यह अनुमान नहीं लगा सकता कि और जब से मैं भविष्यवाणी का उपयोग कर रहा हूं मैं क्लाइंट ए को अतीत में नहीं दिखा सकता।

मैं इस समस्या से बिल्कुल भी नहीं जूझ सकता हूं। लेकिन क्या होगा अगर मेरे खेल में कुछ बदलाव हैं जहां खिलाड़ी गिर सकते हैं और मर सकते हैं। इसलिए, यदि मैं कूदने की क्रियाओं को सिंक नहीं करता हूं, तो अन्य खिलाड़ी देखेंगे कि एक खिलाड़ी दौड़ रहा था, फिर वह शून्य में गिर गया और फिर से स्क्रीन पर दृश्य सगाई को नष्ट करते हुए दिखाई देगा।

जंप सिर्फ एक उदाहरण है, ऐसे कई परिदृश्य हो सकते हैं जहां भविष्यवाणी काम नहीं कर सकती है। तो, उनके साथ कैसे व्यवहार करते हैं। ऐसा ही एक उदाहरण मल्टीप्लेयर ऑनलाइन बैटल एरेना गेम्स हो सकता है जैसे कि एज़ेसेमोनट्स।


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

@ क्रिसियन हे! उत्तर के लिए धन्यवाद। मुझे इस दृष्टिकोण के बारे में पता है लेकिन यह गेमप्ले को झटकेदार बना सकता है यदि विलंबता अधिक है और इसके अलावा मैं AppWarp के BaaS realtime प्रणाली का उपयोग करता हूं, तो मेरा सभी तर्क केवल क्लाइंट की तरफ है।
सुयश मोहन

आपके दोनों तरीकों को मिलाना आधिकारिक सर्वर है। ग्राहक और सर्वर दोनों अनुकरण करते हैं, ग्राहक अपना इनपुट भेजते हैं, सर्वर आधिकारिक स्थिति को वापस भेजता है। ग्राहक आधिकारिक स्थिति से मेल खाने के लिए अपने राज्य को समायोजित करते हैं। इसलिए, जब राज्य मेल खाते हैं, तो ग्राहक ऐसे भागते हैं जैसे वे स्थानीय रूप से (कोई अंतराल) नकली हो।
MichaelHouse

हाल ही में मैंने इस ट्यूटोरियल सीरीज़ को विलंबता को प्रबंधित करने के लिए अच्छे सुझाव दिए हैं, ऐसा लगता है कि यह आपके हितों के लिए फिर से तैयार होगा: लिंक
क्राइस वेल्श

जवाबों:


8

इस मामले में डेड रेकनिंग सबसे अच्छा विचार नहीं हो सकता है; आपको इकाई प्रक्षेप करना चाहिए (अतीत में अन्य खिलाड़ियों को प्रभावी ढंग से प्रस्तुत करना, जो आपको हमेशा वास्तविक, मान्य स्थान देता है)। मैंने इसके बारे में यहाँ और अधिक विस्तार के साथ लिखा है । अतीत में खिलाड़ियों को थोड़ा भी देखना स्वीकार्य है या नहीं यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं।


4
मैंने अपने पहले नेटवर्क मल्टीप्लेयर गेम को लिखते समय इस दृष्टिकोण का उपयोग किया था। वास्तव में मैंने @ ggambett का संदर्भ के रूप में उपयोग किया। इसने मेरे लिए अच्छा काम किया।
NoobsArePeople2

1

स्रोत इंजन के संबंध में एक विस्तृत विवरण है। ऐसा प्रतीत होता है कि कुछ प्रासंगिक स्रोत कोड स्रोत एसडीके के भाग के रूप में भी उपलब्ध हैं।

https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

यह एक सर्वर-क्लाइंट मॉडल में नेटवर्क विलंबता से निपटने और प्रयास करने के लिए कई तकनीकों का उपयोग करता है। मुख्य बिंदु यह प्रतीत होता है कि स्थानीय क्लाइंट इनपुट और अन्य घटनाओं को स्थानीय रूप से संभालता है जैसे कि कोई सर्वर नहीं था, और फिर इस संभावना से संबंधित है कि सर्वर का कहना है कि क्लाइंट ने बाद में गलत किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.