ระบบเครือข่ายผู้เล่นหลายคนพร้อมฟิสิกส์


12

ฉันอยากรู้ว่าระบบเครือข่ายผู้เล่นหลายคนพร้อมฟิสิกส์นั้นถูกนำไปใช้ในเกมแข่งรถ เรามีโลกที่เต็มไปด้วยยานพาหนะที่เคลื่อนไหวเร็วซึ่งควบคุมโดยผู้คนที่แตกต่างกัน สมมติว่ายานพาหนะมีอาวุธและสามารถยิงซึ่งกันและกัน (Twisted Metal, Vigilante v8)

ฉันกังวลเกี่ยวกับเพลงฮิตและการปะทะกัน เซิร์ฟเวอร์ที่เชื่อถือได้หรือเป็นทางเลือกที่ดีกว่า

คำตอบ:


5

โดยปกติแล้วจะใช้เซิร์ฟเวอร์โดยจัดเก็บสถานะ "ความจริง" ที่ใช้ร่วมกับลูกค้าเป็นระยะ การชนเกิดขึ้นอย่างอิสระในไคลเอนต์และเซิร์ฟเวอร์โดยที่สถานะของไคลเอนต์ที่ประเมินจากสถานะก่อนหน้านี้ใช้กระบวนการที่คล้ายกับสิ่งที่มักเรียกว่าการคำนวณที่ตายแล้ว เมื่อสถานะเซิร์ฟเวอร์มาถึงลูกค้าหากมีความแตกต่างลูกค้าจะทำการเปลี่ยนสถานะจากสถานะปัจจุบันเป็นสถานะที่เพิ่งได้รับผ่านการแก้ไขส่วนใหญ่

อย่างไรก็ตามด้วยการชนกันของวัตถุจำนวนมากอาจเป็นปัญหาจริงดังนั้นสิ่งที่ทำกันโดยทั่วไปคือการทำให้เวลาที่จำลองของลูกค้าอยู่เล็กน้อยหลังเวลาจำลองของเซิร์ฟเวอร์เพื่อให้มีความยืดหยุ่นในระดับต่าง ๆ เพิ่มเติม บทความเกี่ยวกับซอร์สโค้ดของ Valve ของ Sourceนั้นค่อนข้างชัดเจน นอกจากนี้ถ้าคุณยังคงลังเลใจเกี่ยวกับสิ่งที่เครือข่ายมิดเดิลแวร์ / ห้องสมุดเพื่อการใช้งานที่ผมแนะนำให้คุณที่จะมองเข้าไป RakNet และ"ReplicaManager3" องค์ประกอบ


2

มีหลายสิ่งที่คุณสามารถทำได้

  1. คุณสามารถรวมวัตถุฟิสิกส์ทั้งหมดไว้ที่ศูนย์กลางบนเซิร์ฟเวอร์และประสานพิกัดกับวัตถุผู้เล่นบนไคลเอนต์ทั้งหมด นี่เป็นวิธีที่ง่ายที่สุดและทำงานได้โดยไม่มีข้อบกพร่องมากมายอย่างไรก็ตามมันใช้ทรัพยากรจำนวนมากและต้องการแบนด์วิดท์จำนวนมาก คุณสามารถเพิ่มประสิทธิภาพการใช้แบนด์วิดท์โดยการส่งค่าไปยังผู้เล่นของผู้เล่นอื่นที่อยู่ในรัศมีที่กำหนดเท่านั้น

  2. คุณสามารถทำตาม Neenster ที่กล่าวถึงและให้เซิร์ฟเวอร์และไคลเอนต์จำลองฟิสิกส์ทุก ๆ ครั้งที่เซิร์ฟเวอร์จะแก้ไขไคลเอ็นต์ ซึ่งหมายความว่าไคลเอนต์ทั้งหมดคำนวณว่ามีฟิสิกส์เป็นของตัวเองสำหรับผู้เล่นทุกคนและคุณจะซิงค์เหตุการณ์ keypress ผ่านเซิร์ฟเวอร์ที่ให้วิถีของผู้เล่นแต่ละคนกับลูกค้าทุกคน ทุกครั้งสมมติว่า 5 วินาทีที่เซิร์ฟเวอร์ถ่ายทอดการจำลองสถานการณ์ทางฟิสิกส์และลูกค้าทุกคนยอมรับการเปลี่ยนแปลง สิ่งนี้อาจสร้างการชดเชยเล็กน้อยที่ไม่สามารถสังเกตเห็นได้บ่อยครั้ง แต่ในระหว่างเครือข่ายเกิดความล่าช้าและการสูญเสียแพ็กเก็ต (หลีกเลี่ยงไม่ได้กับ UDP ที่มีปริมาณการใช้งานสูง) คุณจะสังเกตเห็นผู้เล่นของคุณและ / หรือผู้เล่นคนอื่น ๆ คำ?).

  3. คุณสามารถให้ไคลเอนต์แต่ละคนคำนวณฟิสิกส์ของตัวเองและซิงค์พิกัดของมัน สิ่งนี้ทำให้เป็นการยากที่จะจำลองฟิสิกส์บนวัตถุที่แบ่งปันระหว่างลูกค้า มันเป็นแนวคิดที่ค่อนข้างซับซ้อนที่จะนำไปใช้หากคุณต้องการทำอะไรที่น่าเบื่อเพราะวัตถุบางอย่างไม่จำเป็นต้องเป็นของไคลเอนต์ใด ๆ

ครั้งแรกน่าจะง่ายที่สุดและควรอนุญาตให้คุณมีผู้เล่นประมาณ 4-5 คนที่มีความล่าช้าเล็กน้อย มันจะต้องมีการแข่งขันแต่ละครั้งจะมีเซิร์ฟเวอร์ของตัวเอง หากคุณกำลังทำ LAN ให้ตรงกับสิ่งนี้คือวิธีที่จะไป

ประการที่สองน่าจะเป็นวิธีที่ใช้งานได้จริงที่สุดอย่างไรก็ตามมันอาจเป็นเรื่องยากที่จะนำไปใช้ นอกจากนี้ยังค่อนข้างมีประโยชน์ในการใช้งานการจำลองทางฟิสิกส์บนเซิร์ฟเวอร์ หากคุณมีเซิร์ฟเวอร์ส่วนกลางคุณอาจต้องโหลดยอดคงเหลือไปยังเครื่องหลายเครื่องอาจอนุญาตให้มี 10 เซิร์ฟเวอร์ที่ตรงกันให้โหลดการจับคู่ใหม่ไปยังเซิร์ฟเวอร์ที่มีการจับคู่น้อยที่สุด

สิ่งที่สามคือความเครียดน้อยที่สุดบนเซิร์ฟเวอร์และอาจเป็นทางออกที่ดีที่สุดหากคุณกำลังทำโครงข่ายเพียร์ทูเพียร์ อย่างที่ฉันได้กล่าวไปแล้วมันอาจจะยากที่จะซิงค์วัตถุอื่นนอกเหนือจากเครื่องเล่นของคุณเพราะวัตถุเหล่านั้นสามารถเปลี่ยนแปลงได้โดยลูกค้ารายอื่น

ฉันไม่สามารถบอกได้ว่าจะใช้อันไหนเพราะฉันไม่รู้ว่าเกมของคุณทำงานอย่างไร ทั้งหมดที่ฉันทำได้คือให้ข้อเท็จจริงแก่คุณ หากคุณมีคำถามเพิ่มเติมใด ๆ โปรดแสดงความคิดเห็น


คุณแนะนำให้ลูกค้าให้ทำฟิสิกส์ของมันเป็นวิธีการแก้ปัญหาที่ยอมรับได้ แต่คุณไม่ได้เกี่ยวข้องกับการโกง
cubuspl42

@ cubuspl42 สำหรับความพยายามในการอยู่ในหัวข้อที่ฉันละเว้นรายละเอียด ฉันเห็นว่าพอดีที่ OP สามารถสำรวจวิธีแก้ปัญหาเพิ่มเติมเพื่อค้นหาวิธีที่เป็นไปได้เพื่อลดการโกง
tsturzl

วิธีหนึ่งดังกล่าวคือการอนุญาตให้เบี่ยงเบนของสิ่งที่ลูกค้าแต่ละรายจะถูก จำกัด ให้อยู่ในเกณฑ์ ตัวอย่างเช่นลูกค้าส่วนใหญ่พูดว่าวัตถุที่กำหนดอยู่ที่ตำแหน่ง 5,8 หรือ 6,9 แต่มีรายงานว่า 12,19 รายการเป็นพิกัดซึ่งอาจหลุดจากเกณฑ์เมื่อเทียบกับจำนวนที่เบี่ยงเบนจากลูกค้ารายอื่น นี่เป็นเพียงวิธีการแก้ปัญหาบางส่วน แต่เกมส่วนใหญ่เสนอวิธีการแก้ปัญหาบางส่วนเพื่อการโกงเท่านั้น โซลูชันนี้ไม่ได้หมายความว่าพวกเขากำลังโกง แต่หมายความว่าการวางตำแหน่งของพวกเขาจะต้องได้รับการแก้ไขและดูเหมือนจะล่าช้ากว่าพวกเขา
tsturzl

ฉันไม่เห็นด้วยเล็กน้อย กลโกงบางประเภทแก้ไขได้บางอันไม่สามารถแก้ไขได้ ยกตัวอย่างเช่นในความคิดของฉันมันเป็นการออกแบบเกมที่ไม่ดีถ้าใครสามารถสร้าง speedhack ให้กับนักยิงปืนออนไลน์ที่แข่งขันได้ หรือแฮ็คบ้าที่ให้คุณบินไปรอบ ๆ แผนที่พร้อมกับ godmode และกระสุนไร้ขอบเขต (ฉันเชื่อว่ามันเกิดขึ้นใน Crysis 1 ในบางจุด) สิ่งเหล่านี้สามารถแก้ไขได้เพียงแค่ออกแบบเกมของคุณอย่างถูกต้อง สิ่งต่าง ๆ เช่น wallhack แทบจะไม่สามารถขยับได้ Aimbot แทบจะไม่สามารถเปลี่ยนแปลงได้ โซลูชันของคุณ # 3 เพิ่มความเสี่ยงของกลโกงที่เลวร้ายที่สุดนี้
cubuspl42

@ cubuspl42 ฉันคิดว่าคุณไม่มีความคิดในสิ่งที่เป็นตัวอย่าง ตัวเลือก 3 สามารถป้องกันปัญหาที่คุณกำลังพูดถึง โดยทั่วไปคุณจะมี TCP ที่ใช้ความเร็วร่วมกันจากนั้นคุณสามารถตรวจสอบความเร็วระหว่างไคลเอนต์และสร้างฉันทามติได้คุณยังสามารถทำคณิตศาสตร์ง่ายๆเพื่อกำหนดว่าพิกัดจาก UDP นั้นมีความน่าเชื่อถือหรือไม่ นาฬิกาที่ซิงโครไนซ์ (สามารถสร้างได้จากการเชื่อมต่อจากนาฬิกา HW)
tsturzl
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.