การสอดแทรกระหว่างสองสถานะเครือข่าย


11

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

ฉันต้องการทราบวิธีแก้ไขปัญหาระหว่างรัฐดังนั้นพวกเขาจึงอยู่ในตำแหน่งที่ถูกต้อง ฉันรู้ว่าผู้เล่นคนใดถูกมองเห็นเมื่อเร็ว ๆ นี้และความเร็วปัจจุบันของพวกเขา แต่การสอดแทรกไปยังสถานะที่เห็นล่าสุดทำให้ผู้เล่นเลื่อนไปข้างหลัง - ฉันไม่สามารถใช้ความเร็วเลยสำหรับลูกค้าคนอื่น ๆ และเพียง 'lerp' พวกเขาไปในทิศทางที่เหมาะสม แต่ฉันรู้สึกว่าสิ่งนี้จะทำให้เกิดการเคลื่อนไหวที่ขรุขระ ทางเลือกคืออะไร?

คำตอบ:


9

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

ค้นหาบทความนี้เพื่อค้นหาคำทั้งหมด "ล่วงหน้า" และฉันคิดว่าคุณจะเริ่มได้ภาพที่ดีกว่าที่ฉันได้อธิบายไว้ข้างต้น


โอเคคุณหมายถึงว่าจริง ๆ แล้วฉันควรจะแสดงผลผู้เล่นเมื่อพวกเขาเป็น 300 มิลลิวินาทีที่ผ่านมาและแก้ไขในอนาคต? (ในรัฐที่แยกจากกันเมื่อรัฐใหม่มาถึง; สิ่งนี้จะเปลี่ยน)
Vaughan Hilts

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

2

เมื่อคุณพูดว่า:

ผู้เล่นเหล่านี้เริ่ม desync หลังจากระยะเวลาหนึ่ง

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

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


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