自定义行为与事件函数:逻辑打包复用
事件写多了必然遇到两类重复:同一套逻辑在十处复制粘贴;事件表长到滚动三屏找不着北。解法是官方提供的两个封装层:事件函数和自定义行为。
事件函数:带参数的事件块
在扩展编辑器里新建扩展 → 添加「事件函数」,然后像写普通事件一样写逻辑,区别是可以定义参数(对象、数字、文本都行):
- 调用处:事件里「调用函数 DamageEnemy,参数传 Enemy 和 10」;
- 带返回值的函数:动作「把返回值设为……」后在表达式里当函数用(
MyExt.GetGold(Score)); - 对象参数的函数在运行时会沿用调用处的实例筛选结果(拾取规则不变,见 对象拾取)。


典型封装对象:伤害结算、金币掉落、存档读写、屏幕震动。一处修改,全项目生效。
自定义行为:把逻辑挂到对象上
自定义行为更进一步——封装后的逻辑以「行为」形态出现在对象的行为列表里,还能带属性(行为参数,在编辑器里可视化调整):
- 扩展编辑器新建「自定义行为」,绑定目标对象类型;
- 把该对象的事件逻辑搬进行为内部(行为内可用行为属性当配置);
- 任何对象挂上这个行为,逻辑自动生效,属性在面板里改。
官方文档的建议很明确:项目变大后,给每类对象做自己的行为,让游戏保持模块化——角色行为、敌人行为、机关行为各管各的,主事件表只剩调用与编排。
扩展的分享与复用
- 自制扩展(含函数、行为、自定义对象)可导出文件在项目间搬运;
- 社区扩展库(官方 GitHub 扩展仓库)接受提交,审核后全员可用;
- 用别人的扩展前看一眼描述与许可,质量上官方有「已审核」标记区分。
什么时候该动手封装
三个信号:同一段逻辑复制到第三处;事件表需要靠组+注释才能找到东西;多场景要用同一套机制。满足任意一条,就把对应逻辑抽成函数或行为——比事后重构便宜得多。
- 上一页:寻路与缓动:会绕路的怪物和丝滑的动画
- 下一组:场景编辑器:摆关卡的地方