我正在开发一个用 C# 编写的基于服务器的多人游戏。服务器和客户端共享代码,每个对象都有相同的int ID
. 我想通过仅发送更改的数据来使网络尽可能轻。
游戏有类,它们有许多字段/属性,而且它们经常变化。我正在寻找一种方法来检测这些值何时更改并将这些值发送到客户端。
基本上,这个算法:
- 更改时标记对象
- 使用网络 Tick 上的更改对象:
- 将每个属性与其之前的状态进行比较
- 仅发送更改的值
- 存储旧值
- 在客户端接收它们
- 实例化同类型的对象,或者通过ID查找
- 设置新值
当然,.NET Reflection 或许能够解决这个问题,但是在每个 Tick 中迭代 1000 个对象及其属性将成为性能瓶颈。
我可以发送基本类型(int、float、vector)并保持连接。我的问题是:
发送对象Class
并实例化它的最佳方法是什么?
我应该如何检测属性更改以及如何序列化属性,以便在接收时可以在客户端上找到它们的“对”。