主题
事件与事件管理
事件能够用来串联工坊里的各种功能逻辑。
事件管理器能够记录当前地图中各个功能发送/接受的事件,并展示它们之间的对应关系。
事件的触发响应
事件可以理解为游戏运行时会发生的一件事情,我们用事件名来指代事件。
当你在触发\接收事件栏里填入一串文本时,就是创建了一个名为xx的自定义事件,系统将会监听该事件的发生,发送信号给其他运行中的模块。
只要一个事件既有发送方,又有接收方,就可以构成一个完整的事件机制,我们能使用事件让不同功能之前互相传递信号。
填写事件参数的界面中,使用蓝色纸飞机标记的是将会发送的事件,粉色纸飞机则是可以接收的事件。

常用的三种事件触发方式
这三种事件触发逻辑不仅会在游戏逻辑中经常被用到,在制作流程里也常用于迅速测试动态逻辑的效果。
方法一:事件触发区域
- 在组件库中拖出一个事件触发区域,打开高级设置;
- 在<进入区域触发事件>里填写事件“开始”;
- 打开事件触发区域通用属性里的<游玩时显示>,这样试玩时可以很方便找到该区域;

- 接下来制作触发效果,给一个组件添加运动器,使运动开启的事件填入“开始”;
- 试玩查看效果:控制蛋仔走入触发区域范围时,运动器开启运动。
方法二:蛋码
打开蛋码,拖出事件积木<计时器到期(循环)>;
拖出动作积木<发送自定义事件>,在字符串数据栏里填写事件名称“开始”;

我们可以直接在蛋码中接收事件,拖出事件积木<接受自定义事件(全局)>,再拖出动作积木<发送信息>。

这样就可以通过蛋码日志里的信息判断事件是否被触发过、触发过几次了。

方法三:界面触发
- 在更多中进入编辑界面功能,拖出一个普通的图片控件;
- 打开该控件的高级设置,切换到事件页面;
- 填写点击触发事件为“开始”;
- 接下来制作触发效果,给一个组件添加运动器,使运动开启的事件填入“开始”;
- 试玩时点击控件,观察到运动器生效。
也可以使用<使控件显示/隐藏的事件>测试事件是否被成功触发。
全局事件与局部事件
在游戏运行时,有些事件只会影响到触发的玩家,而有些事件则会影响到地图内所有人。
我们把会影响到所有人的事件称为全局事件,只会影响到部分人的称为局部事件。
按照发送方来说,以下事件发送的是附带玩家参数的局部事件,触发事件只会影响到触发事件的玩家:
UI相关事件
- 界面控件点击\按下\松开事件
- 输入框输入完成
- 手势控件滑动事件
- 陀螺仪变化事件
……
事件触发区域事件
- 进入区域触发事件
- 离开区域触发事件
按照接收方来说,有的事件被监听到会引起整个地图的变化,有的事件只影响触发玩家:
一、接收事件后「按事件是否带玩家参数」区分生效范围
事件带玩家参数则只对触发玩家,不带则对全体玩家:
- 相机切换器:接收事件切换相机参数;玩家触发只对该玩家,非玩家触发对全体
- 天空背景切换:接收事件切换天空
- 雾效切换:接收事件切换雾效
- 光照切换:接收事件切换光照
- 画面色彩切换:接收事件切换色彩
- 屏幕效果播放器组件播放屏幕效果事件
- 背景音乐切换:接收事件切换/恢复BGM
- 任务编辑器所有事件
- 剧情对话触发事件
二、接收事件后「只对触发玩家生效」
- 剧情动画:接收事件播放\停止动画
- 相机切换器:使相机开始/结束切换的事件
- UI显隐和操作事件
- 物品商店显示事件
- 背包显示事件
- 剧情对话选项触发事件
三、接收事件后「全局玩家生效」
- 运动器:物理运动全局同步,所有玩家可见
- 表现器:表现器效果全局同步
- 开关切换事件
- 技能被动触发事件
- 相机轨道运镜事件
- 计时器、随机器、创生器等场景组件事件
- 剧情对话选项显隐事件
自定义事件相关蛋码
事件发送侧
| 积木 | 发送目标 | 携带玩家/单位参数 | 主要接收方 |
|---|---|---|---|
| 发送自定义事件 | 全局发送 | 否 | <接收自定义事件(全局)> |
| 玩家发送事件 | 全局发送,但附带单位 | 是 | 类似ui事件,可指定部分效果仅对发送玩家生效 |
| 发送自定义事件(指定对象) | 指定单个对象 | 否(对象定位) | <接收自定义事件(当前对象)> |
| 向界面发送事件 | 指定玩家的界面(UI) | 是 | 只会影响指定玩家的界面 |
| 向场景界面发送事件 | 指定玩家的场景界面 | 是 | 场景界面控件(触发动画等) |
事件接收侧
| 积木 | 挂载位置 | 接收来源 |
|---|---|---|
| 接收自定义事件(当前对象) | 当前对象(单位/组件) | 只接收<发送自定义事件(指定对象>发给该对象的事件 |
| 接收自定义事件(全局) | 全局 | 接收全局发送的自定义事件 |
| 接收自定义事件(附带玩家) | 全局 | 仅接收"角色进出区域/与界面控件互动"的事件 |
| 接收界面自定义事件(当前对象) | 当前对象(UI控件) | 接收"以当前对象为监听目标发出的界面事件" |
事件管理器
在“更多”中点击“事件管理”按钮进入事件管理器界面。

或者,部分事件填写时,能够从事件列表直接跳转到事件管理器界面。

主要界面
事件列表
事件列表可以检索地图当中所有引用过的事件名称。
部分功能相关事件如组件互动、物品背包等存在未接入事件管理的情况,不会显示在事件列表中。


对象列表
可通过点击左侧的“对象列表”按钮呼出,将展示当前地图所有发送/接收了事件的对象及相关属性,选择后将进入该对象的查看界面。


事件查看界面

修改中央事件名后,所有关联对象事件属性的输入值都会替换为新的事件。
工具栏仅对勾选的单位(支持批量勾选)生效:
| 工具 | 说明 |
|---|---|
| 迁移 | 将选中对象事件属性的输入值替换为其他事件 |
| 查看 | 跳转到该对象的查看界面,仅单选时可用 |
| 删除 | 清空选中对象事件属性的输入值 |
对象查看界面

选中事件可以查看和删除:
| 操作 | 说明 |
|---|---|
| 查看 | 跳转到该对象的查看界面 |
| 删除 | 清空该对象事件属性的输入值 |
如果事件存在其他发送/接收方,可以展开该事件,查看该事件在其他组件或功能中的属性,支持跳转到发出/接收该事件的组件高级设置界面和使用删除清除该事件的引用。

