我正在尝试为 MMO 游戏制作架构,但我无法弄清楚如何在 GameObjects 中存储尽可能多的变量,而无需在更新它们的同时进行大量调用以在线发送它们。
我现在拥有的是:
Game::ChangePosition(Vector3 newPos) {
gameobject.ChangePosition(newPos);
SendOnWireNEWPOSITION(gameobject.id, newPos);
}
它使代码变得垃圾,难以维护、理解和扩展。所以想想一个冠军的例子:
我必须为每个变量创建很多函数。这只是对这个 Champion 的概括,每个 Champion 类型/“类”可能有 1-2 个其他成员变量。
如果我能够从 .NET 或类似的东西中获得OnPropertyChange ,那将是完美的。如果我有类似的东西,我试图猜测的架构会很好地工作:
对于惠普:当我更新它时,自动调用SendFloatOnWire("HP", hp);
对于位置:当我更新它时,自动调用SendVector3OnWire("Position", Position)
对于名称:当我更新它时,自动调用SendSOnWire("Name", Name);
究竟是什么SendFloatOnWire
, SendVector3OnWire
, SendSOnWire
? 在 char 缓冲区中序列化这些类型的函数。
或方法 2(首选),但可能很昂贵
正常更新 Hp、Position,然后每个网络线程滴答扫描服务器上的所有 GameObject 实例以查找更改的变量并发送这些变量。
这将如何在大型游戏服务器上实现,我有哪些选择?对于这种情况有什么有用的书吗?
宏会变得有用吗?我想我接触到了一些类似的源代码,我认为它使用了宏。
先感谢您。
编辑:我想我找到了一个解决方案,但我不知道它实际上有多强大。我要去试一试,然后看看我的立场。https://developer.valvesoftware.com/wiki/Networking_Entities