भौतिकी के साथ मल्टीप्लेयर नेटवर्किंग


12

मैं उत्सुक हूं कि रेसिंग गेम में भौतिकी के साथ मल्टीप्लेयर नेटवर्किंग कैसे लागू होती है। हमारे पास विभिन्न लोगों द्वारा नियंत्रित कई तेज गति वाले वाहनों के साथ एक भौतिक दुनिया है। मान लीजिए कि वाहनों के पास हथियार हैं और वे एक-दूसरे को गोली मार सकते हैं (ट्विस्टेड मेटल, विजिलेंट वी 8)

मैं हिट और टकराव को लेकर उत्सुक हूं। आधिकारिक सर्वर या एक बेहतर विकल्प?

जवाबों:


5

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

हालांकि, कई वस्तुओं के साथ टकराव एक वास्तविक मुद्दा हो सकता है, इसलिए आमतौर पर जो किया जाता है वह विभिन्न अतिरिक्त लचीलेपन की अनुमति देने के लिए सर्वर के सिम्युलेटेड समय के पीछे ग्राहकों के नकली समय को थोड़ा रखने के लिए है। वाल्व के स्रोत इंजन नेटकोड के बारे में यह लेख काफी विस्फोटक है। इसके अलावा, यदि आप अभी भी इस बात से अवगत नहीं हैं कि नेटवर्किंग मिडिलवेयर / लाइब्रेरी का उपयोग करने के लिए क्या है, तो मेरा सुझाव है कि आप RakNet और इसके "रेप्लिकामनगर 3" घटक को देखें


2

यहाँ काफी चीजे है जो आप कर सकते है।

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

  2. आप बताए गए अनुसार नेस्टर कर सकते हैं और सर्वर और क्लाइंट के पास भौतिकी का अनुकरण करते हैं, इसलिए हर बार सर्वर क्लाइंट को सही करेगा। इसका मतलब है कि सभी क्लाइंट हर खिलाड़ी के लिए खुद की भौतिकी की गणना करते हैं, और आप प्रत्येक क्लाइंट के प्रत्येक खिलाड़ी के प्रक्षेपवक्र देने वाले सर्वर पर कीपर ईवेंट को सिंक करेंगे। हर, कहते हैं, 5 सेकंड सर्वर प्रसारण यह भौतिकी सिमुलेशन है और सभी ग्राहक परिवर्तन को स्वीकार करते हैं। यह थोड़े समय के लिए अस्थिरता पैदा कर सकता है, लेकिन नेटवर्क अंतराल और पैकेट हानि (उच्च ट्रैफ़िक यूडीपी के साथ अपरिहार्य) के दौरान आप अपने खिलाड़ी और / या अन्य खिलाड़ियों को स्क्रीन के चारों ओर गड़बड़ करते हुए और तेजी से और तेज़ी से स्थिति बदलते हुए देखेंगे (यह एक है) शब्द?)।

  3. आप प्रत्येक ग्राहक की अपनी भौतिकी की गणना कर सकते हैं और उसके निर्देशांक सिंक कर सकते हैं। इससे ग्राहकों के बीच साझा की गई वस्तुओं पर भौतिकी का अनुकरण करना मुश्किल हो जाता है। यदि आप कुछ भी snazzy करना चाहते हैं, तो इसे लागू करने के लिए एक बहुत ही जटिल अवधारणा है, क्योंकि कुछ वस्तु आवश्यक रूप से किसी भी ग्राहक से संबंधित नहीं है।

पहला शायद सबसे आसान है और आपको थोड़ा अंतराल के साथ लगभग 4-5 खिलाड़ी रखने की अनुमति देनी चाहिए। यह प्रत्येक मैच की आवश्यकता होगी यह अपने सर्वर है। यदि आप LAN मैच कर रहे हैं तो यह जाने का रास्ता है।

दूसरा शायद सबसे व्यावहारिक है, हालांकि इसे लागू करना मुश्किल हो सकता है। यह भी सर्वर पर भौतिकी सिमुलेशन चलाने के लिए बहुत संसाधन है। यदि आपके पास केंद्रीकृत सर्वर हैं, तो आपको कई मशीनों के लिए संतुलन लोड करने की आवश्यकता होगी, हो सकता है कि 10 मैचों को सर्वर से अनुमति दें, कम से कम मैचों के साथ सर्वर पर नए मैचों को लोड करें।

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

मैं आपको यह नहीं बता सकता कि किसका उपयोग करना है क्योंकि मुझे नहीं पता कि आपका खेल कैसे काम करता है। मैं सिर्फ इतना कर सकता हूं कि आप तथ्यों को बताएं। यदि आपके पास कोई और प्रश्न है तो टिप्पणी करने के लिए स्वतंत्र महसूस करें।


आप सुझाव देते हैं कि ग्राहकों को इसका भौतिकी देना एक स्वीकार्य समाधान है, लेकिन आप धोखा देने से संबंधित नहीं हैं।
घनाक्षरी 42

@ cubuspl42 विषय पर रहने के प्रयास के लिए मैंने विवरणों को छोड़ दिया। मैं फिट देखता हूं कि धोखा को कम करने के संभावित तरीकों का पता लगाने के लिए ओपी आगे समाधान का पता लगा सकता है।
tsturzl

ऐसा एक तरीका है जो प्रत्येक ग्राहक को एक सीमा तक सीमित करने के लिए प्रदान करने के विचलन की अनुमति देता है। उदाहरण के लिए, अधिकांश ग्राहकों का कहना है कि दी गई वस्तु 5,8 या 6,9 की स्थिति में है, लेकिन एक समन्वय के रूप में 12,19 की रिपोर्ट करता है, कि वह अन्य ग्राहकों से कितना विचलित होता है, इसकी तुलना में एक सीमा से बाहर हो सकता है। यह केवल एक आंशिक समाधान है, लेकिन अधिकांश गेम केवल धोखा देने के लिए आंशिक समाधान प्रदान करते हैं, इसलिए ऐसा अभी भी होता है। इस समाधान का मतलब यह नहीं है कि वे धोखा दे रहे हैं, लेकिन इसका मतलब है कि उनकी स्थिति को ठीक करने की आवश्यकता है और उनके लिए अंतराल के रूप में दिखाई देगा।
tsturzl

खैर, मैं थोड़ा असहमत हूं। कुछ प्रकार के धोखा देने योग्य हैं, कुछ नहीं हैं। उदाहरण के लिए, मेरी राय में, यह एक खराब गेम डिज़ाइन है यदि कोई प्रतिस्पर्धी ऑनलाइन शूटर के लिए एक स्पीडहॉक बना सकता है। या कुछ पागल हैक जो आपको एक गॉडमोड और अनंत बारूद के साथ नक्शे के चारों ओर उड़ने की अनुमति देता है (मेरा मानना ​​है कि यह कुछ बिंदु पर क्राइसिस 1 में हुआ)। ये फिक्स करने योग्य हैं, बस अपने गेम को सही ढंग से डिज़ाइन करें। वॉलहॉक जैसा सामान लगभग अपरिहार्य है (इसे सर्वर से भारी संसाधनों की आवश्यकता होगी)। एंबोट वस्तुतः अप्राप्य है। आपका समाधान # 3 इस सबसे खराब तरह के धोखे का जोखिम बढ़ाता है।
क्यूबसप्लि 42

@ cubuspl42 मुझे लगता है कि आप एक उदाहरण क्या है का विचार याद कर रहे हैं। विकल्प 3 ठीक उसी मुद्दे को रोक सकता है जिसके बारे में आप बात कर रहे हैं। आपके पास आमतौर पर एक टीसीपी होगा जो वेग साझा करता है, और फिर आप आसानी से ग्राहकों के बीच वेग की जांच कर सकते हैं और एक आम सहमति बना सकते हैं, आप यह निर्धारित करने के लिए कुछ सरल गणित भी कर सकते हैं कि क्या यूडीपी से निर्देशांक प्रशंसनीय हैं, बशर्ते कि आपके ग्राहक मान लें सिंक्रनाइज़ घड़ी (HW घड़ी से कनेक्शन पर स्थापित की जा सकती है)।
tsturzl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.