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

คู่มือเกมแลค › ปัญหาที่เกิดกับบางคนเท่านั้น

สับสนจากการนำ entity ID กลับมาใช้ซ้ำ Entity ID reused without a generation counter

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

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

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

ทำไม NPC ตายแล้วเกิดใหม่ด้วย entity ID เดิม → ผลคือ ไคลเอนต์ที่พลาดข้อความแจ้งการออกไปถือว่าเป็น “เอนทิตีที่รู้จักอยู่แล้ว” จึงไม่สนใจข้อความแจ้งการปรากฏตัว หรือคงสถานะตายไว้เหมือนเดิม → บนหน้าจอ NPC หายไปหรือเห็นนอนตายอยู่บนจอฝั่งเดียว บางครั้งเห็นเป็นหน้าตาของ NPC ตัวอื่น

อาการ
มองไม่เห็น/ตัวผี
ปัจจัย
แพ็กเก็ตหาย
ใครเจอ
ไคลเอนต์เดียวในเครื่องที่เปิดหลายจอ, เราคนเดียว
เกิดเมื่อไร
สุ่มเป็นครั้งคราว, ตอนคนแห่มารวมกัน
ผู้รับผิดชอบ
ผู้รับผิดชอบหลัก พัฒนาเซิร์ฟเวอร์ (ทีมพัฒนาเกม) · ร่วมกับ พัฒนาไคลเอนต์ (ทีมพัฒนาเกม)
งานฝั่งทีมพัฒนาเกม
เซิร์ฟเวอร์: ใส่หมายเลข generation ให้ entity ID เพื่อแยกการนำกลับมาใช้ซ้ำ ไคลเอนต์: ถ้าได้รับข้อความแจ้งการปรากฏตัวของ ID ที่รู้จักอยู่แล้ว ให้ลบเอนทิตีเดิมแล้วสร้างใหม่
บนกราฟ
พุ่งแบบสุ่มเป็นครั้งคราว · จำนวนข้อความแจ้งการปรากฏตัวของ ID ที่รู้จักอยู่แล้ว
จุดที่ต้องดู
ให้เซิร์ฟเวอร์บันทึกเวลาสร้างและลบของแต่ละ entity ID (พร้อมหมายเลข generation ถ้ามี) แล้วนับจำนวนครั้งที่ไคลเอนต์ได้รับข้อความแจ้งการปรากฏตัวด้วย ID ที่รู้จักอยู่แล้ว และการลบแล้วสร้างใหม่ที่ถูกนับเป็น “ไม่มีการเปลี่ยนแปลง” ตอนอัปเดตระยะมองเห็น
สัญญาณว่าใช่
ID ของ NPC ที่มองไม่เห็นหรือเห็นนอนตายอยู่ ตรงกับ NPC ที่เพิ่งตายไป และในช่วงนั้นไคลเอนต์นั้นไม่ได้รับข้อความแจ้งการออกไป หรือเซิร์ฟเวอร์ไม่ได้ส่งทั้งข้อความแจ้งการออกไปและการปรากฏตัว
สัญญาณว่าไม่ใช่
ID มีหมายเลข generation และใช้ในการเทียบด้วย: ไม่ใช่สาเหตุนี้ ถ้ามองไม่เห็นทั้งที่ ID ไม่ได้ถูกนำกลับมาใช้ซ้ำ น่าจะเป็นข้อความแจ้งการปรากฏตัวหาย
วิธีตรวจ
ต้องมี log หรือเมตริกจากเซิร์ฟเวอร์/ไคลเอนต์เกม
รายละเอียดเพิ่มเติม
เกิดที่ฝั่งเซิร์ฟเวอร์ได้เช่นกัน ถ้าเทียบรายการเอนทิตีในระยะมองเห็นด้วย ID อย่างเดียว NPC ที่ตายแล้วเกิดใหม่ด้วย ID เดิมระหว่างการอัปเดตระยะมองเห็นสองรอบจะถูกมองว่า “ไม่มีการเปลี่ยนแปลง” และไม่ส่งทั้งข้อความแจ้งการออกไปและการปรากฏตัว ถ้าจังหวะอัปเดตระยะมองเห็นของแต่ละคนไม่ตรงกัน จะเจอเฉพาะไคลเอนต์ที่ตรงกับจังหวะนั้น

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

  1. Entity struct (Entities 1.3) Unity
    Entity ประกอบด้วย Index และหมายเลข generation (Version) เพื่อแยกว่า Index ที่ถูกนำกลับมาใช้ยังใช้ได้อยู่หรือไม่
  2. NetworkConfig class (Netcode for GameObjects 2.5) Unity
    RecycleNetworkIds/NetworkIdRecycleDelay: เว้น network ID ไว้ช่วงหนึ่งก่อนนำกลับมาใช้ซ้ำ

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

ชั้นเดียวกัน: ปัญหาที่เกิดกับบางคนเท่านั้น

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

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