我正在开发一款基于服务器的多人游戏,使用C#编写。 服务器和客户端共享代码,每个对象都有相同的int ID。我希望通过仅发送更改的数据来使网络传输尽量轻便。
游戏中有许多类,它们具有众多字段/属性,经常发生更改。我正在寻求一种检测这些值何时更改并将这些值发送到客户端的方法。
基本上,该算法如下:
1. 标记更改的对象 2. 在网络Tick时与更改后的对象: a. 比较每个属性与其先前状态 b. 仅发送更改的值 c. 存储旧值 3. 在客户端接收它们 4. 实例化相同类型的对象或按ID查找 5. 设置新值
当然,.NET Reflection可能能够解决此问题,但在每个Tick中迭代1000个对象及其属性会对性能造成瓶颈。
我可以发送基本类型(int,float,vector),并保持连接。我的问题是:
- 发送一个对象的Class并实例化它的最佳方法是什么? - 如何检测属性更改,以及如何序列化属性,以便在接收时找到它们的“匹配项”?
游戏中有许多类,它们具有众多字段/属性,经常发生更改。我正在寻求一种检测这些值何时更改并将这些值发送到客户端的方法。
基本上,该算法如下:
1. 标记更改的对象 2. 在网络Tick时与更改后的对象: a. 比较每个属性与其先前状态 b. 仅发送更改的值 c. 存储旧值 3. 在客户端接收它们 4. 实例化相同类型的对象或按ID查找 5. 设置新值
当然,.NET Reflection可能能够解决此问题,但在每个Tick中迭代1000个对象及其属性会对性能造成瓶颈。
我可以发送基本类型(int,float,vector),并保持连接。我的问题是:
- 发送一个对象的Class并实例化它的最佳方法是什么? - 如何检测属性更改,以及如何序列化属性,以便在接收时找到它们的“匹配项”?