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

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

ช่วงเวลาตัดสินสั้นจนปิงกินหมด Timing window too short for latency + reaction

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

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

ถ้าเวลาที่ต้องตอบสนอง เช่น การหลบ, การแพร์รี และการกัน สั้นเกินไป ปิงจะกินเวลานั้นไปจนเกิดการโจมตีที่หลบไม่ได้

ทำไม ช่วงเวลาตัดสินที่สั้น เช่น สัญญาณเตือนท่าโจมตีของบอส 0.5 วินาที หรือช่วงเวลาตัดสินการแพร์รี 0.2 วินาที → ผลคือ เห็นสัญญาณเตือนช้า (ดีเลย์ขาลง + interpolation) และอินพุตของเราก็ไปถึงช้า (ดีเลย์ขาขึ้น + เวลารอทิก) → บนหน้าจอ หลบพ้นแน่ ๆ แต่ยังโดน, แพร์รีไม่ออก

อาการ
กดไม่ติด/โรลแบ็ค, อินพุตดีเลย์
ปัจจัย
ความหน่วง
ใครเจอ
เราคนเดียว, เฉพาะบางฟีเจอร์
เกิดเมื่อไร
ตอนทำแอ็กชันบางอย่าง
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาไคลเอนต์ (ทีมพัฒนาเกม), อินฟราเซิร์ฟเวอร์ (ทีมอินฟรา)
งานฝั่งทีมพัฒนาเกม
เซิร์ฟเวอร์: นัดเวลาสัญญาณเตือนการโจมตีตามเวลาเซิร์ฟเวอร์แล้วส่งล่วงหน้า, ขยายช่วงเวลาตัดสินออกไปเท่ากับปิง (lag compensation) ไคลเอนต์: เล่นสัญญาณเตือนที่ได้รับให้ตรงกับเวลาเซิร์ฟเวอร์ที่นัดไว้
งานฝั่งทีมอินฟรา
วางเซิร์ฟเวอร์ใกล้พื้นที่ที่มีผู้เล่นมาก (เซิร์ฟเวอร์ประจำภูมิภาค) เพื่อลดปิงโดยตรง
ตัวเลขที่ควรรู้
ถ้าปิง 150 ms และ interpolation 100 ms กว่าสัญญาณเตือนจะขึ้นบนจอเราใช้ประมาณ 0.18 วินาที และกว่าอินพุตของเราจะถึงเซิร์ฟเวอร์ใช้ประมาณ 0.1 วินาที บวกเวลาตอบสนองของคน 0.25 วินาทีเข้าไป สัญญาณเตือน 0.5 วินาทีจึงแทบหลบไม่ทัน
บนกราฟ
สูงเฉพาะบางกลุ่ม · อัตราการหลบ/แพร์รีพลาด (แยกตามช่วงปิง)
จุดที่ต้องดู
บันทึกเวลาเริ่มและจบของช่วงเวลาตัดสิน, เวลาที่อินพุตของผู้เล่นมาถึงเซิร์ฟเวอร์ และ RTT ของผู้เล่นคนนั้นลงใน log ของเซิร์ฟเวอร์ แล้วแบ่งดูอัตราพลาดตามช่วงปิง (เช่น ทีละ 50 ms)
สัญญาณว่าใช่
ยิ่งช่วงปิงสูง อัตราพลาดยิ่งสูงชัดเจน และอินพุตที่พลาดมาถึงหลังช่วงเวลาตัดสินจบไปไม่นาน (ไม่เกิน RTT รวมเวลา interpolation)
สัญญาณว่าไม่ใช่
อัตราพลาดใกล้เคียงกันทุกช่วงปิง: น่าจะเป็นความยากของแพตเทิร์น ถ้าอินพุตมาถึงภายในช่วงเวลาตัดสินแล้วยังนับเป็นพลาด ให้ดูโค้ดตัดสินผลหรือการตรวจสอบของเซิร์ฟเวอร์
วิธีตรวจ
ต้องมี log หรือเมตริกจากเซิร์ฟเวอร์/ไคลเอนต์เกม

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

  1. Factors influencing the latency of simple reaction time (Frontiers in Human Neuroscience, 2015) Frontiers
    เวลาตอบสนองอย่างง่าย (simple reaction time) เฉลี่ยประมาณ 231 ms (213 ms เมื่อหักดีเลย์ของอุปกรณ์), งานวิจัยขนาดใหญ่ระยะหลังได้ 233–400 ms
  2. Latency and Player Actions in Online Games (Communications of the ACM, 2006) ACM
    การกระทำที่ต้องแม่นยำและมีเส้นตายสั้นยิ่งไวต่อดีเลย์ (ขีดจำกัดอยู่ที่ประมาณ 100 ms สำหรับมุมมองบุคคลที่ 1, ประมาณ 500 ms สำหรับบุคคลที่ 3 และประมาณ 1,000 ms สำหรับมุมมองแบบพระเจ้า (omnipresent))
  3. NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
    วิธีนัดเวลาอีเวนต์ตามเวลาเซิร์ฟเวอร์ (ServerTime) เพื่อให้ทุกไคลเอนต์เล่นในจังหวะเดียวกัน

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

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

สาเหตุจากชั้นอื่นที่ทำให้เกิดอาการเดียวกัน (กดไม่ติด/โรลแบ็ค)

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