4
如何在网络游戏中以可靠的方式分配实体ID?
我正在为网络游戏开发一个实体系统,并为每个实体分配一个唯一的32位整数ID,该ID可用于序列化对实体和实体本身的引用。 目前,我只是在每次创建实体时增加一个计数器。我想这些ID最终会用完,但我并不真正希望拥有40亿个实体。如果实体#5被销毁并且我们获得ID为5,这也避免了问题。这是指引用新的#5还是旧的已删除的#5? 问题是我不确定如何处理/避免冲突。当前,如果客户收到一个ID高于其当前“免费ID”的实体的更新,则该客户的免费ID会超过该值。但这似乎不是很可靠。 我考虑过为每个客户端分配范围,以便他们可以分配实体而不会发生冲突(例如,前n位是玩家编号),但是我担心如果范围随时间开始重叠会发生什么情况。 有没有更好的方法来解决这个问题?我是否应该担心ID溢出或超出允许范围的末尾?我可以添加代码来检测这些情况,但是如果发生这些情况而不是崩溃,该怎么办。 另一种选择是使用具有更高独特性的功能,例如128位GUID,但对于试图最小化网络流量的游戏而言,这似乎是重量级的。而且,实际上,我永远不会一次需要更多实体,而是适合一个32位甚至24位整数。 谢谢!