Sync Q&A
Sync Q&A
1.Sync 服务都有哪些超时设置?
房间配置的超时时长(分钟)
指一个房间从创建到关闭的最长存续时间。无论房间内是否有玩家,在到期时房间都会自动关闭。
空房间的超时时长(秒)
没有玩家连接的空房间可以存续的最大时间。设置为 0 时表示不检查空房间超时。
用户连接的超时时长(秒)
目前是固定值15秒。如果15秒内没有向房间发送心跳,则视为玩家掉线。
2. Sync 服务的 Realtime 模式和 Relay 模式的区别是什么?
Realtime 模式是轻量级消息转发服务,支持客户端之间的信息同步,比如一对一、一对多、多对多。游戏逻辑的处理发生在每个玩家的客户端。Realtime 模式适用于更新频率低、处理逻辑轻量的游戏。
Relay 模式的游戏服务逻辑会在某个房主玩家的机器上,节约云上算力资源,但依赖房主的网络环境。Relay 服务负责每个玩家与房主间的通信。支持 NetCode,Mirror,FishNet等框架。
3. Sync 服务收费模式中的「计费单位」和「单价」是什么意思?
在开启Sync服务后,创建房间配置中需要按照项目实际使用需求配置房间规模,房间规模会按照不同的房间配置设定不同得计费单位。单价则是是每个计费单位的费用。
例如:用户的房间配置选择了计费单位为8人的房间(小型),当日最大同时运行房间数为100个,那么当日的 Sync 房间费用为: 40 = 8 * 0.05 * 100(同时运行的房间数)
4. Sync 房间状态的变化逻辑是怎样的?
房间会有如下状态:
- 正在分配(Created):后台正在分配房间服务器资源和创建房间
- 已分配(Allocated):这是一个短暂的中间状态,计算资源已经分配,但是还没有任何人加入此房间,等待房主加入
- 已就绪(Ready):房主已加入此房间,同时允许其他玩家加入房间
- 运行中(Running):游戏正在运行,不允许其他玩家加入房间
- 分配失败(Failed):房间分配失败
- 已回收(Closed):房间已关闭,服务器资源已回收
注:为了使房间可以持续加人,游戏可以选择不使用【运行中】状态,而只使用【已就绪】状态。基于游戏需要,比如进行中的游戏有人掉线而需要加人,【运行中】与【已就绪】这两种状态也可以相互转换。
下图为房间状态的生命周期:
5. Sync Relay 支持的 Unity Transport 版本?
如需在 Sync Relay 中使用 UTP 协议,请安装 Unity Transport, 目前支持 Unity Transport 1.x 和 2.x 版本。
6. 小程序/小游戏真机无法正常使用?
问题描述:服务在Unity编辑器,小程序/小游戏开发工具中均可正常使用,但真机环境下小程序无法正常访问服务器。
解决方案:请添加域名 https://s.unity.cn 至平台白名单。
7. 打包 WebGL 平台时提示 WebSocket.jslib 冲突?

原因:不同的Package的均引用了 WebSocket.jslib 文件导致打包 WebGL 包体时出现的文件冲突。
解决方案:从提示的路径中删除冲突的文件,保留一份即可。
Package/…/…/WebSocket.jslib would be copied to <PluginPath>/WebSocket.jslib
Package/…/…/WebSocket.jslib would be copied to <PluginPath>/WebSocket.jslib
8. 使用KCP协议时数据发送失败?
请检查单包大小是否控制在128KB以内。
9. 怎么更新自定义房间属性?
自定义属性指开发者自己配置的房间属性,不包含由 Sync 服务维护的房间状态、人数等信息。可通过 SDK 提供的 UpdateRoomCustomProperties 方法更新,目前是全量更新。若更新成功,会通过 OnRoomInfoUpdateCallback 这个回调函数通知所有客户端。
10. 怎么更新房间属性?
可以通过 LobbyService.AsyncUpdateRoom() 更新房间的可见性、密码、最大人数三个属性。 更新后 Sync SDK 会自行维护其他客户端的可见性属性,可通过 SDK 提供的 GetRoomInfo 方法拿到当前的房间信息。
11. 如何获取房间内的当前玩家信息?
玩家进出房间时,会通过 OnPlayerEnterRoom / OnPlayerLeaveRoom 两个回调来通知开发者,可以自行维护。也可以通过 SDK 提供的 GetRoomInfo 方法获取当前房间里的玩家信息。
12. Sync是怎么验证房间密码的?
Sync SDK 会先连接到 Sync Server,然后再发送验证信息,如果验证失败,SDK 会触发 OnConnectToRelayServerCallback(code) 回调通知开发者,密码错误对应的code是20003,然后会触发当前使用网络框架自带的 关闭/退出 方法来断开连接。
13. Sync Lua 上传新的逻辑插件不生效?
默认一个 Pod 可以开出4个房间,新上传的逻辑插件需要再新的 Pod 中才会生效。如果遇到新的插件不生效的情况可手动创建房间将老的 Pod 填满后,新开出的 Pod 会加载新的 Lua 插件。
14. 为什么游戏场景更推荐使用 KCP 协议?
鉴于 UDP(KCP 协议的基础)相比 TCP(WebSocket 协议的基础)能够提供更快的传输速度,更适合用于游戏场景。基于此,我们更推荐大家采用 KCP 协议以实现更好的游戏性能。
15. 使用 KCP 协议时,需要安装的资源包有哪些?
在使用 KCP 协议时,除了按照教程中的步骤安装 Kcp Transport for Netcode for GameObjects 资源包外,还需安装 Kcp 协议包。
16. 使用 KCP 协议在 iOS 微信小游戏平台连接失败?
当在 iOS 微信小游戏平台使用 KCP 协议时出现连接失败问题,请确认是否已在微信小程序管理页面开启高性能模式。由于在 iOS 设备上运行微信小游戏需要开启「微信高性能模式」,开启该模式的具体步骤为:登录微信小程序页面,依次选择「功能 → 游戏能力地图 → 研发能力 → 生产提效包 → 高性能模式」,最后点击「开通」按钮。