你心目中Cocos状态同步的最佳编程范式是什么?

目前比较经典的方式大概有:

  • UE:
    • Client与Server共享工程,通过宏区分不同的逻辑。
    • 运用AUTHORITY(权威)SIMULATION_PROXY(模拟代理)AUTONOMUS_PROXY(自治代理)实现插值、预测、倒带校正的功能。
    • 可以导出各个平台的Client与Server程序。
    • 缺点在于专一性较强,不太支持其他品类的游戏。
  • Unity MLAPI
    • Client与Server共享工程,通过Runtime种的字段区分不同的逻辑。
    • 通过继承NetworkBehaviour,声明Network**成员变量实现同步。
    • 可以导出各个平台的Client与Server程序。
  • 期待你的看法~
1赞

1、首先,服务器和客户端同语言,在cocos里,就是全都用的是TS。

2、抽离逻辑代码,将逻辑代码单独放置,而且对逻辑代码进行平台适配,cocos和Node都可以运行这套代码。

3、客户端抽象一个模拟服务器,这样这套状态同步的逻辑,也可以脱离服务器,作为单机运行。

4、回到了正常的状态同步里

2赞

赞一个,基本命中了我心中的要求 :grin:

其实还有最后一个,不过一般的状态同步都会做到这样吧。就是服务器只同步状态,客户端就可以通过状态的改变来对应执行不同的逻辑。这需要一套逻辑渲染分离的模型。

我现在项目就这样干的,数据来驱动渲染

逻辑渲染分离,使用的是什么模型呢?注册事件通知呢还是每帧主动拉取数据更新自身视图呢?这样对于新增或者删除的节点是不是还要做diff?这样性能怎么保证?

感觉UE的开发方式挺高效的,避免了服务器客户端的联调。
unity的没用过。
帧同步主要是不好搞物理类游戏。

1赞

帧同步不好搞物理类游戏

这个可以展开讲一下吗?

说真的,一套方案如何满足所有需求?是很大的挑战。
青菜萝卜各有所爱,目前我心中对多端同步的需求分成两类:

  1. 广播模式(发布/订阅):常用于流程的同步,适用于授课、直播、会议、棋牌。
  2. 互动模式:常用于实时状态同步,适用于漫游、竞技、协作。

客户端服务端共享工程,看起来像是同一套代码,应该属于“互动模式”里的同构架构。
有很多类似的框架都支持这种开发方式,也是我们 非常看好 的方向。

1赞