4
ฉันจะกำหนดรหัสเอนทิตีในวิธีที่แข็งแกร่งในเกมเครือข่ายได้อย่างไร
ฉันกำลังทำงานกับระบบเอนทิตีสำหรับเกมบนเครือข่ายและฉันกำหนดรหัสประจำตัวจำนวนเต็ม 32 บิตที่ไม่ซ้ำกันซึ่งฉันสามารถใช้เพื่ออ้างอิงการอ้างอิงไปยังเอนทิตีและเอนทิตีเองได้ ขณะนี้ฉันเพิ่งเพิ่มตัวนับทุกครั้งที่มีการสร้างเอนทิตี ฉันเดารหัสในที่สุดจะหมด แต่ฉันไม่คาดหวังว่าจะมี 4 พันล้านหน่วย นอกจากนี้สิ่งนี้จะช่วยหลีกเลี่ยงปัญหาหากเอนทิตี # 5 ถูกทำลายและเราได้รับ id 5 มันหมายถึงการอ้างถึง # 5 ใหม่หรือเก่าที่ถูกลบ # 5 หรือไม่ ปัญหาคือฉันไม่แน่ใจว่าจะจัดการ / หลีกเลี่ยงการชนได้อย่างไร ในปัจจุบันหากลูกค้าได้รับการอัปเดตสำหรับเอนทิตีที่มีรหัสสูงกว่า "ฟรีไอดี" ในปัจจุบันมันแค่กระแทกมันเป็นไอดีฟรีจนถึงอดีต แต่นั่นดูไม่แข็งแกร่งนัก ฉันคิดเกี่ยวกับการกำหนดช่วงให้กับลูกค้าแต่ละรายเพื่อให้พวกเขาสามารถจัดสรรเอนทิตีโดยไม่ขัดแย้งกัน (พูดว่า n บิตอันดับแรกคือหมายเลขผู้เล่น) แต่ฉันกังวลว่าจะเกิดอะไรขึ้นถ้าช่วงเริ่มทับซ้อนกันเมื่อเวลาผ่านไป มีวิธีจัดการที่ดีกว่านี้ไหม ฉันควรจะสนใจเกี่ยวกับรหัสล้นหรือจะผ่านจุดสิ้นสุดของช่วงที่อนุญาตหรือไม่ ฉันสามารถเพิ่มรหัสเพื่อตรวจสอบกรณีเหล่านี้ แต่จะทำอย่างไรถ้าเกิดขึ้นนอกเหนือจากความผิดพลาด อีกทางเลือกหนึ่งคือการใช้บางอย่างที่มีโอกาสสูงกว่าในการเป็นเอกลักษณ์เช่น 128- บิต GUID แต่ดูเหมือนว่าหนักมากสำหรับเกมที่พยายามลดปริมาณการใช้เครือข่าย นอกจากนี้ในความเป็นจริงฉันจะไม่ต้องการเอนทิตีเพิ่มเติมในคราวเดียวจากนั้นจะพอดีกับจำนวนเต็ม 32- บิตหรือ 24 บิต ขอบคุณ!