คำถามติดแท็ก movement-prediction

4
การทำนายฝั่งไคลเอ็นต์ทำงานอย่างไร
ฉันได้อ่าน Valve + Gafferon และอีกหลายร้อยหน้าจาก Google แต่ด้วยเหตุผลใดก็ตามที่ฉันไม่สามารถคาดเดาลูกค้าได้ เพื่อความเข้าใจของฉันปัญหาพื้นฐานคือ: ลูกค้า A ส่งอินพุตที่ T0 เซิร์ฟเวอร์รับอินพุตที่ T1 ลูกค้าทั้งหมดได้รับการเปลี่ยนแปลงเวลา T2 T2อย่างไรก็ตามเมื่อใช้การคาดการณ์ของลูกค้าลูกค้า A อยู่ในตำแหน่งที่เหมาะสมT4แล้ว คุณจะมั่นใจได้อย่างไรว่าลูกค้า A เมื่อคาดการณ์ว่าเซิร์ฟเวอร์จะยอมรับคำขอการเคลื่อนไหวจะไม่นำหน้าเซิร์ฟเวอร์ เห็นได้ชัดว่าทุกครั้งที่พวกเขาอยู่ข้างหน้าผลนี้ในการหักกลับไปที่เซิร์ฟเวอร์ครั้งล่าสุดเห็นพวกเขา ด้วยการแก้ไขทั้งหมดที่ฉันได้ลองสิ่งนี้ยังคงเห็นได้ชัดเจนเมื่อคุณหยุดเพราะเซิร์ฟเวอร์หยุดตามคุณ

6
วิธีการทำให้แน่ใจว่าวัตถุหมุนได้เข้าเป้าด้วยปลายด้านขวา
ฉันกำลังทำงานกับอาวุธประเภทมีดขว้างปาที่ผู้เล่นมีเป้าหมายฟรีแล้วขว้างมีด มีดหมุนผ่านอากาศและในการปะทะกันหยุดหมุนและผู้ปกครองเองกับวัตถุที่มันชนกัน การหมุนถูกจัดการผ่านทางภาพเคลื่อนไหวในขณะที่เส้นทางของมีดถูกจัดการโดยฟิสิกส์ ปัญหาหนึ่งที่ฉันเผชิญคือทำอย่างไรเพื่อให้แน่ใจว่าเมื่อมีดชนกับศัตรูว่ามีดจะหันเข้าหาพวกเขา ในขณะที่สิ่งที่เกิดขึ้นบางครั้งก็คือมีดฝังอยู่ในมือของศัตรูก่อน ซึ่งไม่สมจริงอย่างเห็นได้ชัด ในเวลาเดียวกันฉันคิดว่ามันไม่มีเหตุผลที่จะมีดที่จะ "กด" ศัตรูถ้ามันชนใบมีดก่อนเนื่องจากอัตราที่มีดหมุนอยู่นอกเหนือการควบคุมของผู้เล่น ฉันได้ดูภาพจากกล้องที่คล้ายกันของ killcam ที่ช้ามาก ๆ และทุกครั้งที่มีการโยนอาวุธมันจะหมุนไปในอากาศและในที่สุดก็จะมีดาบที่ชี้ไปที่เป้าหมาย สำหรับเกมที่ระยะการขว้างปาสอดคล้องกันนี่จะค่อนข้างตรงไปตรงมา แต่ฉันไม่แน่ใจว่าจะทำนายได้อย่างไรเนื่องจากมีปัจจัยที่คาดเดาไม่ได้หลายอย่างที่เกี่ยวข้องเช่น ทิศทางของมีด, การหมุนของมีด, ตำแหน่งของศัตรู, ระยะทางจากศัตรู ฯลฯ หากเป็นไปได้ฉันไม่ต้องการใช้ตรรกะการทำนายที่ซับซ้อนเนื่องจากเกมจะเป็นอุปกรณ์ระดับต่ำ มีวิธี "ควันและกระจก" เพื่อแก้ปัญหานี้หรือไม่? ตัวอย่าง: https://youtu.be/0fav8lFpBko?t=42s

3
Unity - วิธีเคลื่อนย้ายเรือไปยังจุดที่สมจริงในเกมบนลงล่าง 2D
ฉันพยายามเคลื่อนย้ายเรือใบไปยังจุดที่ฉันคลิกด้วยเมาส์ การเคลื่อนไหวนี้ควรเป็นจริง (พายที่ด้านหลังที่เรือเคลื่อนที่ไปรอบ ๆ ) ดังนั้นหากการคลิกเมาส์ถูกทิ้งไว้และด้านหน้าของเรือเรือควรเลื่อนไปที่นั่นด้วยเส้นทางโค้งเพื่อให้การหมุนถูกต้อง ฉันจะดีใจถ้ามีคนช่วยฉันด้วยปัญหานี้ขอบคุณ

2
จะชดเชยการเคลื่อนย้ายวัตถุด้วยการทำนายฝั่งไคลเอ็นต์ได้อย่างไร
ผมดำเนินการเซิร์ฟเวอร์เกมที่สนับสนุนดาวควบคุมเหมือนกันพัลวัน ดังนั้นคุณต้องมีเรือที่บินและยิงด้วยฟิสิกส์ความเร็ว / การเร่งความเร็ว / ลดแรงกระแทกที่ง่ายที่สุดในการขับเคลื่อนการเคลื่อนไหว ฉันได้อ่าน Valve, Gafferon และ Gambetta และใช้อัลกอริทึมของ Gambettaเพื่อการคาดการณ์ลูกค้า: การทำนายลูกค้าทำงานบนเรือของผู้เล่นโดยอัพเดทตำแหน่งจากเซิร์ฟเวอร์ตามที่มาและจากนั้นนำอินพุตที่ยังไม่ได้ประมวลผลโดยเซิร์ฟเวอร์ไปยังผู้เล่น น่าเสียดายที่เกมของฉันใช้งานไม่ได้ ฉันเชื่อว่ามันเกี่ยวข้องกับความจริงที่ว่าตัวอย่างของ Gambetta ไม่ได้คำนึงถึงวัตถุที่เคลื่อนไหวอยู่แล้วหรือคำสั่งที่ได้รับการปรับปรุงทีละขั้นตอน (โดย "ขั้นตอน" ฉันหมายถึงเฟรม) ดังนั้นในเกมของฉันผู้เล่นกดขึ้นเพื่อเร่งการส่ง (ที่กำลังเคลื่อนไหว) ซึ่งยังคงเคลื่อนที่บนไคลเอนต์ส่งคำสั่งไปยังเซิร์ฟเวอร์และมักจะได้รับสแนปช็อตโลกจากเซิร์ฟเวอร์ในขั้นตอนถัดไป ฉันได้รับสิ่งที่ชอบมากขึ้น: คำสั่ง player รันที่ไคลเอ็นต์ขั้นตอน 3แต่บนเซิร์ฟเวอร์จะรันที่เซิร์ฟเวอร์ขั้นตอนที่ 5เท่านั้น เมื่อถึงเวลาที่ลูกค้าได้รับสแนปชอตของโลกในขั้นตอนที่ 6ลูกค้าการคาดการณ์จะถูกปิดโดยเฉพาะอย่างยิ่งในความเร็วที่เร็วขึ้น ปมของปัญหาคือว่าลูกค้ารันคำสั่งในขั้นตอนที่ 5แต่เซิร์ฟเวอร์ทำงานมันในขั้นตอนที่ 6 ฉันคิดถึงการส่งขั้นตอนไคลเอนต์ด้วยคำสั่งและให้เซิร์ฟเวอร์ย้อนกลับและเรียกใช้คำสั่งอีกครั้งด้วยขั้นตอนเวลาของไคลเอ็นต์ สิ่งนี้อาจนำไปสู่ปัญหาอื่น ๆ ที่เกิดขึ้นเช่น - สิ่งที่เกิดขึ้นกับคำสั่งที่ได้รับตั้งแต่การย้อนกลับหรือการโกงลูกค้าสามารถใช้ประโยชน์จากการเปลี่ยนขั้นตอนการส่ง การอ่านและการดูวิดีโอเช่นนี้จาก Google กล่าวถึงวิธีการที่แตกต่างกันซึ่งคุณจะค่อยๆเปลี่ยนตำแหน่งผู้เล่นเพื่อให้ตรงกับภาพรวมในไม่กี่ขั้นตอน คำถามของฉัน: คุณสามารถทำให้อัลกอริทึมของ Gambetta ทำงานกับการเคลื่อนที่แบบสเต็ปคงที่ได้หรือไม่? หรือมันขัดกับแนวคิดของเกมของฉัน? การแก้ไขแบบค่อยเป็นค่อยไปเหนือขั้นตอนเป็นวิธีที่ถูกต้องหรือไม่? …

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

2
การคาดการณ์แบ่งการตรวจจับการชนกัน
ก่อนที่จะใช้การคาดการณ์กับการเคลื่อนไหวของสไปรต์การชนของฉันทำงานได้อย่างสมบูรณ์ อย่างไรก็ตามหลังจากที่ใช้การคาดการณ์กับการเคลื่อนไหวของสไปรต์ของฉัน (เพื่อทำให้สิ่งต่าง ๆ เรียบ) การชนจะไม่ทำงานอีกต่อไป นี่คือสิ่งที่ทำงานก่อนการคาดการณ์: อย่างไรก็ตามหลังจากที่ฉันใช้การคาดการณ์ของฉันแล้ว ฉันถือว่านี่เป็นเพราะมันทำหน้าที่ประสานงานใหม่ที่ได้รับการผลิตโดยขั้นตอนการอนุมาน (ซึ่งตั้งอยู่ในการเรียกของฉัน) หลังจากที่ฉันใช้การคาดการณ์ของฉัน วิธีแก้ไขพฤติกรรมนี้ ฉันลองใส่การตรวจสอบการชนกันเพิ่มเติมหลังจากการคาดการณ์ - นี่ดูเหมือนจะเคลียร์ปัญหาจำนวนมาก แต่ฉันได้ตัดออกเพราะการวางตรรกะในการแสดงผลของฉันไม่เป็นไปตามคำถาม ฉันได้ลองทำสำเนาตำแหน่ง spriteX โดยคาดการณ์และวาดภาพโดยใช้สิ่งนั้นแทนที่จะเป็นแบบดั้งเดิมดังนั้นการปล่อยให้แบบดั้งเดิมยังคงอยู่เพื่อตรรกะในการรับ - นี่ดูเหมือนจะเป็นตัวเลือกที่ดีกว่า แต่ก็ยังสร้างผลแปลก ๆ เมื่อชนกับผนัง ฉันค่อนข้างแน่ใจว่านี่ไม่ใช่วิธีที่ถูกต้องในการจัดการกับเรื่องนี้ ฉันพบคำถามที่คล้ายกันสองสามข้อที่นี่ แต่คำตอบไม่ได้ช่วยฉัน นี่คือรหัสการคาดการณ์ของฉัน: public void onDrawFrame(GL10 gl) { //Set/Re-set loop back to 0 to start counting again loops=0; while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){ …

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