네트워크 게임을 위해 엔터티 시스템을 작업 중이며 엔터티 및 엔터티 자체에 대한 참조를 직렬화하는 데 사용할 수있는 고유 한 32 비트 정수 ID를 각 엔터티에 할당하고 있습니다.
현재 엔티티가 생성 될 때마다 카운터를 늘리고 있습니다. 나는 ID가 결국 없어 질 것이라고 생각하지만 실제로 40 억 엔터티가있을 것으로 기대하지는 않습니다. 또한 엔티티 # 5가 파괴되고 ID가 5 인 경우 문제를 피할 수 있습니다. 새로운 # 5 또는 기존의 삭제 된 # 5를 의미합니까?
문제는 충돌을 처리 / 피하는 방법을 잘 모르겠다는 것입니다. 현재 클라이언트가 현재 "무료 ID"보다 높은 ID를 가진 엔터티에 대한 업데이트를 수신하는 경우 해당 ID를 초과하는 무료 ID와 충돌합니다. 그러나 그다지 강력하지는 않습니다.
나는 각 클라이언트에 범위를 할당하여 충돌없이 엔티티를 할당 할 수 있다고 생각했지만 (상위 n 비트는 플레이어 번호입니다) 시간이 지남에 따라 범위가 겹치기 시작하면 어떻게 될지 걱정됩니다.
이것을 처리하는 더 좋은 방법이 있습니까? ID가 넘치거나 허용 범위의 끝을 지날 때조차 신경 써야합니까? 이러한 경우를 감지하는 코드를 추가 할 수 있지만 충돌 이외의 상황에서 발생하면 어떻게됩니까?
또 다른 옵션은 128 비트 GUID와 같이 고유 할 가능성이 더 높은 것을 사용하는 것이지만 네트워크 트래픽을 최소화하려는 게임에는 실제로는 매우 무거운 것 같습니다. 또한 현실적으로 한 번에 더 많은 엔터티가 필요하지 않으며 32 비트 또는 24 비트 정수에 적합합니다.
감사!