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

创游世界广播完全指南

一句话摘要

广播是创游世界中跨对象、跨层级通知消息的事件驱动机制,核心价值在于解耦发起者和处理者,使 UI、地图、物体之间不需要硬绑死。

适合谁阅读

  • 刚学会基础脚本,想要理解对象间通信的新手
  • 遇到「广播没效果」或「广播乱发」问题的开发者
  • 想了解 UI 与地图如何正确通信的创作者
  • 需要做联机项目的开发者

你将学到什么

  • 广播不是普通函数调用,而是事件通知机制
  • 广播的三种核心用途(事件表达、动作请求、状态变化通知)
  • 广播与 UI、地图的关系
  • 广播命名的最佳实践
  • 联机环境下广播的性能优化
  • 广播的常见误区与避坑建议

一、广播基础概念

1.1 什么是广播

广播是一种「发消息给多个对象」的事件通知机制。

类比理解

  • 想象现实中的电台广播
  • 发送者相当于电台
  • 所有调到对应频道的接收者都可以收到信号
  • 发送者不需要知道谁在收听

1.2 广播的工作原理

发送广播 → 所有监听该广播的脚本执行

关键特点

  • 发送者不需要知道监听者的具体信息
  • 监听者通过订阅事件来接收并响应消息
  • 广播可以跨越对象、跨越层级传递

1.3 广播和普通函数调用的区别

对比项普通函数调用广播
发送者需要知道目标吗?需要不需要
接收者数量一个多个
耦合度高(硬绑死)低(解耦)
扩展性

二、广播的三种核心用途

用途 A:表达事件发生

广播用于表示「发生了什么」。

示例

  • 按钮被点击 → 发送「按钮_点击」广播
  • 任务完成 → 发送「任务_完成」广播
  • 角色死亡 → 发送「角色_死亡」广播

特点

  • 广播名称表达事件本身
  • 所有关心这个事件的对象都可以监听
  • 不关心事件后应该怎么处理

用途 B:表达动作请求

广播用于表示「我希望系统执行什么」。

示例

  • 请求打开界面 → 发送「请求_打开背包」广播
  • 请求开始下一波 → 发送「请求_开始波次」广播

特点

  • 广播名称表达意图或请求
  • 真正的处理逻辑由接收方决定
  • 发送方不需要知道具体实现

用途 C:表达状态变化通知

广播用于表示「某个状态已经变化,请相关对象自行同步」。

示例

  • 背包更新 → 发送「背包_更新」广播
  • UI 需要刷新 → 发送「刷新_界面」广播

特点

  • 广播名称表达状态变化
  • 接收方根据自身逻辑决定如何响应
  • 适合多人联机同步

三、广播的基本用法

3.1 怎么发送广播?

在脚本中使用积木块发送广播:

发送广播 "广播名称"

或者带参数的广播:

发送广播 "道具_获得" 并携带数字 100
发送广播 "任务_完成" 并携带文本 "任务A"

3.2 怎么接收广播?

在脚本中设置触发时机为「当收到广播时」,然后填写广播名称:

当收到广播 "道具_获得" 时
→ 执行相应逻辑
结束

3.3 接收广播时怎么获取参数?

当收到广播 "道具_获得" 并携带数字 时
→ 获取道具数量
→ 显示 "获得 " + 参数 + " 金币"
结束

3.4 广播可以带参数吗?

可以。参数可以是数字或文本。

发送广播 "道具_获得" 并携带数字 100
发送广播 "任务_完成" 并携带文本 "任务A"

四、广播的作用域

作用域说明
当前地图广播只在当前地图内传播
UI 广播UI 可以向地图发广播,地图处理后再通知 UI
向当前 UI 发广播地图向当前显示的 UI 发广播

⚠️ 注意:广播默认只能在当前地图内传播,不能跨地图通信。跨地图通信需要用玩家变量或系统属性。


五、广播的典型使用场景

场景 1:UI 通知地图处理

场景:玩家在 UI 界面上点击购买按钮,需要扣除金币。

推荐做法

// UI 脚本
当点击按钮时
→ 发送广播 "请求购买"
结束

// 地图脚本
当收到广播 "请求购买" 时
→ 检查金币是否足够
→ 如果足够,扣除金币并发放物品
→ 发送广播 "购买成功"
结束

// UI 脚本
当收到广播 "购买成功" 时
→ 刷新界面
结束

场景 2:一个事件触发多个响应

场景:敌人死亡时,需要同时播放死亡特效、更新任务进度、掉落物品。

// 敌人脚本
当生命值变为 0 时
→ 发送广播 "敌人_死亡"
结束

// 特效脚本
当收到广播 "敌人_死亡" 时
→ 播放死亡动画
结束

// 任务脚本
当收到广播 "敌人_死亡" 时
→ 更新任务进度
结束

// 掉落脚本
当收到广播 "敌人_死亡" 时
→ 生成掉落物品
结束

场景 3:跨对象通信

场景:点击一个物体,触发另一个物体的行为。

// 按钮脚本
当互动按钮被按下时
→ 发送广播 "打开机关"
结束

// 门脚本
当收到广播 "打开门" 时
→ 播放开门动画
结束

六、广播命名规范

6.1 推荐的命名方式

广播名尽量表达「事件/意图」,而不是实现细节。

广播名说明
开始挑战表达事件
打开背包表达意图
任务完成表达状态变化
刷新界面表达请求
玩家准备完成表达玩家状态

6.2 不推荐的命名

广播名问题
广播1无意义
执行那个功能太模糊
刷新1不知道刷新什么
刷新2不知道刷新什么

命名越像「事件语言」,项目就越容易维护。

6.3 命名示例对比

功能❌ 不推荐✅ 推荐
金币变化刷新金币_变化
背包更新刷新背包背包_更新
任务完成任务任务_完成
波次开始下一步波次_开始

七、联机环境下的广播

7.1 联机广播的特点

在联机环境下使用广播需要注意:

问题说明解决方案
上传延迟公共数据需要同步给其他玩家减少连续多次写入
帧率限制旧版本 UI 帧率被限制到 20 帧更新到 4.52.54+ 版本
数据冲突多玩家同时操作可能冲突使用地图层集中处理

7.2 联机广播最佳实践

  1. UI 只发请求广播

    当按钮被点击时
    → 发送广播 "请求_购买"
    结束
  2. 地图集中处理

    当收到广播 "请求_购买" 时
    → 在地图层检查和处理
    → 处理完成后发广播通知 UI
    结束
  3. UI 收到结果后刷新

    当收到广播 "购买_完成" 时
    → 刷新 UI 显示
    结束

7.3 4.52.54+ 版本优化

4.52.54 版本后,每个玩家只运行自己的 UI 逻辑,显著提升了:

  • 玩家人数较多的场景
  • UI 界面复杂的场景
  • 需要无限循环实现动画的场景

八、广播常见问题排查

8.1 为什么广播发了但没效果?

检查清单

检查项说明
广播名称是否一致注意大小写、空格、标点符号
监听脚本是否在正确触发时机需要「当收到广播时」触发时机
监听者在广播发送时是否存在如果对象已销毁则不会响应
广播发送时机是否在监听者初始化之后确保监听者先注册

8.2 广播和指令调用有什么区别?

特性广播指令调用
接收者数量多个单个
依赖关系解耦耦合
灵活性
性能中等
适用场景事件通知精确控制

九、广播的常见误区

误区 1:到处发广播,名称混乱

后果

  • 很难追踪谁在响应
  • 一改名字全项目崩
  • 调试体验很差

误区 2:广播里塞太多底层细节

推荐做法

  • 广播表达「意图」
  • 具体实现放在处理端

误区 3:能直接调就不分层

后果

  • UI 绑死地图内部结构
  • 项目可复用性很差

短期看省事,长期看容易失控。

误区 4:一个广播干所有事

错误示例

// ❌ 一个广播干了太多事
当点击按钮时
→ 发送广播 "处理一切" // 扣钱+发道具+刷新UI+播音效+加成就
结束

推荐做法

// ✅ 多个职责明确的广播
当点击按钮时
→ 发送广播 "请求购买"
结束

当收到广播 "请求购买" 时
→ 扣钱
→ 发道具
→ 发送广播 "购买完成"
结束

当收到广播 "购买完成" 时
→ 刷新UI
结束

当收到广播 "购买完成" 时
→ 播放音效
结束

当收到广播 "购买完成" 时
→ 增加成就进度
结束

相关页面


最后更新:2026-06-16维护者:Azek431

参与维护

发现文档问题?

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

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