Skip to content
写作:待补充更新:2026-05-16字数:—阅读:—维护:Azek431

创游世界联机系统完全指南

一句话摘要

本文系统整理创游世界联机系统的核心概念、架构设计、UI同步策略、广播驱动模式与常见问题解决,帮助你理解联机环境下数据、UI、广播的正确处理方式。

适合谁阅读

  • 需要制作多人联机游戏的开发者
  • 遇到联机UI卡顿、广播失效问题的制作者
  • 想系统理解联机架构的进阶用户

你将学到什么

  • 联机系统的核心架构
  • UI同步的演进历程与当前推荐写法
  • 广播驱动模式的正确用法
  • 常见联机问题及解决方法
  • 版本兼容性注意事项

核心结论

  1. 新逻辑下每个玩家只运行自己的UI,不再模拟所有玩家的UI
  2. UI只发广播到地图,地图统一处理公共数据
  3. 玩家.当前UI在新版本已弃用,改用当前UI
  4. 公共数据操作要用上传并等待,不要在UI里直接频繁写入

1. 联机系统的核心架构

1.1 旧版UI逻辑的问题

在4.52.54之前的版本中,联机UI存在严重的性能问题:

问题说明
全局模拟每个玩家设备都会模拟所有玩家的UI逻辑
帧率限制为了维持同步,帧率被限制到20FPS
卡顿严重复杂UI、多人UI、动画UI会导致严重卡顿
数据耦合UI层直接操作公共数据导致同步延迟

1.2 新版UI逻辑的改进

4.52.54之后的版本进行了重大架构调整:

改进说明
本地自治每个玩家只运行自己的UI逻辑
帧率恢复不再受20FPS限制
公共数据下沉公共数据操作交给地图层统一处理
广播驱动UI通过广播与地图通信,不再直接操作

2. UI同步的演进历程

2.1 版本演进时间线

4.52.1  旧版UI逻辑(20FPS限制)

4.52.54 新UI逻辑上线(本地化)

4.54.0  进一步优化(结构体、单选值等)

2.2 关键变化:玩家.当前UI当前UI

版本写法说明
旧版玩家.当前UI已弃用
新版当前UI推荐写法

深层含义:

  • "当前UI"被视为更直接、更标准的运行上下文
  • 地图脚本不再被鼓励直接深控UI内部
  • 推荐使用"玩家.向当前UI发广播"通知UI更新

3. 推荐的联机架构

3.1 分层设计

┌─────────────────────────────────────────┐
│                  UI层                    │
│  负责:显示、动画、接收输入、局部逻辑   │
└─────────────────┬───────────────────────┘
                  │ 发广播

┌─────────────────────────────────────────┐
│                地图层                    │
│  负责:公共数据、联机同步、规则执行     │
└─────────────────┬───────────────────────┘
                  │ 广播刷新

┌─────────────────────────────────────────┐
│              广播层                      │
│  负责:UI与地图之间的意图传递          │
└─────────────────────────────────────────┘

3.2 正确的数据流

推荐模式:

UI操作 → 广播/调用指令 → 地图/系统处理真值

修改真值 → 广播刷新 → UI更新显示

错误模式:

UI直接修改全局状态 → 到处直接改界面 → 同步延迟严重

3.3 UI层的职责

UI层应该只负责:

  • 接收玩家输入
  • 做局部动画
  • 显示当前玩家相关的信息
  • 响应当前玩家操作反馈

3.4 地图层的职责

地图层应该负责:

  • 所有玩家共享的公共数据
  • 联机同步相关的规则
  • 多对象共享流程
  • 向各玩家广播状态变化

4. 广播驱动模式

4.1 为什么需要广播驱动

传统写法在联机环境下的主要问题:

传统写法问题
UI直接操作公共数据每次都需要网络同步,频繁卡顿
UI直接调用地图函数耦合严重,难以维护
多个UI同时操作冲突概率高,数据不一致

4.2 广播驱动模式的优势

广播写法优势
UI只发一次广播减少网络同步次数
地图统一处理数据处理集中,逻辑清晰
UI自处理内部动画、显示等可以本地快速响应

4.3 广播命名建议

使用语义化命名,避免混乱:

推荐命名不推荐命名
任务_完成刷新1
货币_增加更新
打开背包调一下
刷新界面改值

4.4 广播的三种核心用途

用途说明示例
表达事件发生通知某个动作已发生按钮被点击、角色死亡
表达动作请求请求系统执行什么请求打开界面、刷新排行榜
表达状态变化通知状态已更新背包更新、任务阶段变更

5. 上传并等待机制

5.1 什么是上传并等待

当UI脚本需要操作地图或玩家公共数据时,需要同步给其他玩家。

"上传并等待"的本质是:

  • 跨越本地UI层与公共数据层的边界
  • 需要网络同步或一致性处理
  • 每次跨层都有等待成本

5.2 性能优化建议

建议说明
减少跨层次数UI只向地图发一次广播,让地图集中处理
避免频繁写入不要在UI中连续做多次公共数据写入
合并操作将多个小操作合并为一次大操作
本地优先本地显示可以立即更新,公共数据等同步完成

6. 联机UI设计原则

原则一:让UI偏本地化

UI优先处理:

  • 动画(本地快速响应)
  • 局部显示(只影响当前玩家)
  • 玩家自己的操作反馈

原则二:公共状态处理下沉到地图

凡是会影响到:

  • 所有玩家
  • 公共数据
  • 共享流程

的操作,都尽量交给地图层。

原则三:用广播传意图,不要直接跨层硬控

这样做的优势:

  • 更清晰
  • 更稳定
  • 更适合联机

原则四:区分"显示正确"和"同步正确"

联机UI设计必须同时考虑:

  • 视觉流畅(本地显示)
  • 数据一致(公共同步)

7. 版本兼容与迁移

7.1 兼容性选项

创游世界提供了兼容性选项来帮助旧项目迁移:

  • 新项目:默认使用新UI逻辑
  • 老项目:可以通过"游戏设置 -> UI兼容选项"选择"运行在本地"切换到新逻辑

7.2 迁移注意事项

注意事项说明
新逻辑无法回退迁移到新UI逻辑后可能无法回到旧版
需要专门验证老项目迁移时必须做全面测试
检查所有功能确认UI、广播、公共数据等都能正常工作

7.3 版本条件判断

在编写需要兼容多版本的脚本时:

txt
如果版本 >= 4.52.54:
    使用 `当前UI`
    使用 `玩家.向当前UI发广播`
否则:
    使用 `玩家.当前UI`

8. 常见问题与解决

Q1:联机时UI很卡怎么办?

原因: 旧版UI逻辑或频繁的公共数据操作

解决:

  1. 更新到4.52.54+版本
  2. 检查是否在UI中频繁操作公共数据
  3. 改用广播驱动模式

Q2:广播在联机下没效果?

检查:

  1. 广播名称是否一致
  2. 监听脚本是否在正确触发时机下
  3. 监听者是否还在场景中
  4. 是否需要同步到所有玩家

Q3:如何正确处理玩家变量?

建议:

  • 玩家变量存储在云端,跨设备同步
  • 操作玩家变量需要考虑同步延迟
  • 关键操作使用"上传并等待"

Q4:如何设计联机友好的UI?

建议:

  • UI只显示当前玩家相关信息
  • 公共数据通过地图层广播刷新
  • 避免在UI中直接修改其他玩家数据

9. 实战架构示例

9.1 联机背包系统

UI层:
  - 显示背包UI
  - 响应玩家点击操作
  - 发广播"道具_使用_请求"

地图层:
  - 监听"道具_使用_请求"
  - 检查道具是否可用
  - 更新玩家道具数据(上传并等待)
  - 广播"道具_已使用_刷新"

UI层:
  - 监听"道具_已使用_刷新"
  - 更新背包显示

9.2 联机战斗系统

UI层:
  - 显示技能按钮
  - 响应点击
  - 发广播"技能_释放_请求"

地图层:
  - 验证技能条件
  - 计算伤害
  - 广播"伤害_结算_刷新"
  - 同步到所有玩家

UI层:
  - 刷新伤害显示
  - 播放命中效果

相关页面


待验证问题

  • [待验证] 具体版本号对应的UI逻辑差异
  • [待验证] 不同UI类型的同步策略差异
  • [待验证] 联机下地图广播的优先级规则
  • [待验证] 多人同时操作同一数据的冲突处理机制

后续优化方向

  • [ ] 补充更多联机场景的脚本示例
  • [ ] 添加单人与联机的代码对比
  • [ ] 完善版本兼容性判断的代码模板
  • [ ] 添加联机性能优化的详细指南
  • [ ] 补充联机调试方法的说明

参与维护

发现文档问题?

你可以编辑页面、提交反馈,或复制链接给维护者,帮助这个资料库继续变好。

由 Azek431 整理与维护 | 基于 MIT 许可证开源