한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

คู่มือเกมแลค › การออกแบบการซิงก์

เล่นทันทีที่มาถึงโดยไม่มี timestamp Events played on arrival (no timestamps)

ID สาเหตุ sy-no-timestamp · ผู้รับผิดชอบหลัก พัฒนาไคลเอนต์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)

เปิดการ์ดในฉบับหลักที่มีภาพและการทดลอง →

ถ้าไม่ติดเวลาที่เกิดให้อีเวนต์จากเซิร์ฟเวอร์ แล้วเล่นทันทีที่ได้รับ จังหวะการแสดงผลจะไม่สม่ำเสมอตามจิตเตอร์ของเครือข่าย

ทำไม รันอีเวนต์ “เริ่มโจมตี” และ “เล่นเอฟเฟกต์” ทันทีที่มาถึง → ผลคือ แต่ละแพ็กเก็ตมาถึงในเวลาต่างกัน ช่วงห่างจึงไม่สม่ำเสมอ → บนหน้าจอ ท่าโจมตีต่อเนื่องเร็วบ้างช้าบ้าง, จังหวะแพตเทิร์นบอสไม่เหมือนเดิมทุกครั้ง

อาการ
กระตุก, กรอเร็ว
ปัจจัย
จิตเตอร์
ใครเจอ
เราคนเดียว
เกิดเมื่อไร
ตลอดเวลา
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก พัฒนาไคลเอนต์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม
ไคลเอนต์: เล่นตามเวลาที่ติดมากับอีเวนต์ (นัดเวลาอีเวนต์, interpolation buffer) เซิร์ฟเวอร์: ติดเวลาที่เกิด (เวลาเซิร์ฟเวอร์) ให้อีเวนต์ก่อนส่ง
บนกราฟ
พุ่งแบบสุ่มเป็นครั้งคราว · ช่วงห่างการเล่นอีเวนต์, ช่วงห่างการมาถึงของแพ็กเก็ต
จุดที่ต้องดู
จับคู่เวลาที่เกิดอีเวนต์ใน log ของเซิร์ฟเวอร์กับเวลาที่มาถึงและเวลาที่เล่นใน log ของไคลเอนต์ด้วยหมายเลขอีเวนต์ แล้วเทียบช่วงห่าง ใน dev build ลองใส่จิตเตอร์ (ค่าจิตเตอร์ของ tc netem, ดีเลย์ต่ำสุด/สูงสุดใน network emulation ของ Unreal) เพื่อจำลองอาการ
สัญญาณว่าใช่
ช่วงห่างที่เกิดบนเซิร์ฟเวอร์คงที่ แต่ช่วงห่างการเล่นไม่สม่ำเสมอตามช่วงห่างการมาถึงทุกประการ
สัญญาณว่าไม่ใช่
ช่วงห่างการมาถึงสม่ำเสมอแต่การเล่นไม่สม่ำเสมอ: น่าจะเป็นปัญหาเฟรมฝั่งไคลเอนต์ (เฟรมไทม์พุ่ง) ถ้าช่วงห่างที่เกิดบนเซิร์ฟเวอร์แกว่งตั้งแต่ต้น น่าจะเป็นทิกเกินงบเวลา
วิธีตรวจ
ต้องมี log หรือเมตริกจากเซิร์ฟเวอร์/ไคลเอนต์เกม

แหล่งอ้างอิง

  1. Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization (Yahn W. Bernier, GDC 2001) Valve
    ติดเวลาเซิร์ฟเวอร์ให้ทุกอัปเดต แล้ววาดตำแหน่ง ณ เวลาเป้าหมายซึ่งคือเวลาปัจจุบันลบเวลา interpolation (100 ms)
  2. Snapshot Interpolation Gaffer On Games
    ถ้าวาดสแนปช็อตที่ได้รับทันที จะกระตุกเพราะจิตเตอร์ ถ้าเก็บไว้ใน interpolation buffer สักครู่แล้วค่อยวาด จะลื่น
  3. NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
    ตัวอย่างที่ใส่เวลาที่ส่งไว้ใน RPC ให้ฝั่งรับเล่นเอฟเฟกต์ตามเวลาเซิร์ฟเวอร์
  4. tc-netem(8) — Linux manual page iproute2
    เครื่องมือทดสอบที่ใส่ดีเลย์/จิตเตอร์ (delay TIME JITTER) และการหาย (loss random PERCENT) ให้แพ็กเก็ตขาออก เพื่อจำลองเครือข่ายจริง
  5. Using Network Emulation in Unreal Engine Epic Games
    ทดสอบโดยใส่ดีเลย์ต่ำสุด/สูงสุดและอัตราแพ็กเก็ตหายให้เซิร์ฟเวอร์และไคลเอนต์, ในคอนโซลตั้งค่าแบบ NetEmulation.PktLag

สาเหตุที่ควรดูประกอบ

ชั้นเดียวกัน: การออกแบบการซิงก์

สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (กระตุก)

ดูการ์ดในฉบับหลักที่มีภาพและการทดลอง