一、基础概念
Custom Event 自定义事件:蓝图内可被外部 / 内部调用、可传参、可绑定的事件,作用:![图片[1]_虚幻引擎 Custom Event 节点_虚幻引擎](https://xhyq.com/wp-content/uploads/2026/06/Custom-Event.jpg)
- 拆分复杂蓝图逻辑,解耦代码;
- 实现蓝图间通信(角色→UI、关卡蓝图→Actor、Actor 之间互调);
- 支持输入参数、输出返回值、可设置为可复制(网络同步)。
环境说明
引擎版本:UE5.1~5.5 操作完全一致,分 3 个经典实战案例:
- 案例 1:单蓝图内部调用 Custom Event(基础入门)
- 案例 2:角色蓝图调用 UI 蓝图 Custom Event(跨蓝图通信,最常用)
- 案例 3:关卡蓝图控制场景物体 Custom Event(全局控制)
前置通用操作:创建 Custom Event 节点两种方式
方式 1:右键快速创建(推荐)
- 打开任意蓝图编辑器(角色 / UI/Actor/ 关卡蓝图);
- 蓝图图表空白处右键;
- 搜索
Custom Event→ 点击生成; - 选中事件,右侧细节面板配置:
- Event Name:事件名(全局唯一,跨蓝图调用靠名字匹配)
- Inputs:添加输入参数(int、float、Actor、Text、布尔等)
- Outputs:返回值(Function 才有,Event 无返回)
- Replicates:网络复制(联机游戏勾选,服务器同步触发)
- Call on Server:仅在服务器执行
- Multicast:多播,服务器触发后所有客户端同步执行
方式 2:蓝图顶部「函数 / 事件」面板创建
- 蓝图编辑器顶部切换到 My Blueprint(我的蓝图) 面板;
- 找到
Events分类 → 点击+ Add Custom Event; - 双击事件自动跳转到图表,生成事件入口节点。
案例 1:单蓝图内部调用 Custom Event(零基础入门)
需求
玩家按下键盘 F 键,调用自定义事件,打印文字 + 改变自身方块颜色。
操作步骤
步骤 1:创建基础 Actor
- 内容浏览器右键 → 蓝图类 → 选择
Actor,命名BP_CubeActor; - 打开蓝图,左侧组件面板
+添加立方体,作为可视化模型。
步骤 2:创建 Custom Event
- 切换到 事件图表;
- 空白右键搜索
Custom Event,创建; - 右侧细节面板设置:
- Event Name:
ChangeCubeColor - Inputs:添加参数
NewColor,类型Linear Color(颜色);
- Event Name:
- 拖拽事件输出执行引脚,搭建逻辑:
Set Material Color(设置立方体颜色),目标选 Cube 组件;- 颜色输入绑定
NewColor参数; - 追加
Print String,打印 “方块颜色已更新”。
步骤 3:绑定按键,调用自定义事件
- 空白右键搜索
F→ 添加键盘事件F Pressed; - 从 F 按下的执行引脚拖拽,搜索
Call ChangeCubeColor(调用刚才创建的自定义事件); - 给调用节点的
NewColor参数赋值:比如红色(1,0,0,1)。
步骤 4:测试运行
- 关卡中拖入
BP_CubeActor; - 点击顶部「播放」,按 F 键:方块变红,控制台打印文字。
原理
同一蓝图内直接
Call 事件名 调用 Custom Event,参数双向传递,逻辑拆分清晰。案例 2:玩家角色蓝图 调用 UI Widget 的 Custom Event(项目高频用法)
需求
玩家靠近拾取道具,按 E 键,打开 UI 并调用 UI 内自定义事件,更新 UI 文字显示道具数量。
完整分步操作
第一部分:创建 UI 蓝图并制作 Custom Event
步骤 1:创建 UI 控件
- 内容浏览器右键 → 用户界面 → Widget 蓝图,命名
W_ItemHUD; - 打开控件蓝图,进入控件蓝图编辑器;
- 左侧调色板拖入一个
Text控件,命名T_ItemCount,放在画布中间。
步骤 2:在 UI 中创建 Custom Event(供外部角色调用)
- 顶部切换到 事件图表;
- 右键创建
Custom Event; - 细节面板配置:
- 事件名称:
UpdateItemText - Inputs:添加参数
ItemNum,类型Integer(整数)
- 事件名称:
- 事件后连接逻辑:
- 搜索节点
Set Text,目标绑定T_ItemCount; - 文本内容用
Int to Text,输入连接ItemNum参数; - 额外加 Print String 打印 UI 收到的数值。
保存 UI 蓝图。
- 搜索节点
第二部分:玩家角色蓝图编写逻辑,调用 UI 的 Custom Event
步骤 1:打开玩家蓝图(ThirdPersonCharacter)
- 打开第三人称角色蓝图,事件图表;
- 先创建存储 UI 的变量:
右侧「我的蓝图」→
+变量:- 变量名:
HUDWidget - 类型:
W_ItemHUD(我们刚才创建的 UI) - 类别:UI,勾选
Editable,默认空。
- 变量名:
步骤 2:游戏开始时生成并挂载 UI
Event BeginPlay(游戏启动事件);- 拖拽执行线搜索
Create Widget,类选择W_ItemHUD; - 创建完成后,调用
Add to Viewport(显示到屏幕); - 把 Create Widget 的返回值赋值给变量
HUDWidget。
步骤 3:按键 E 触发,调用 UI 的 Custom Event
- 添加键盘事件
E Pressed; - 从变量
HUDWidget拖拽到图表 → 获取 HUDWidget; - 从获取的 UI 引脚拖拽,搜索
Call UpdateItemText(UI 里写好的自定义事件); - 给调用节点的
ItemNum赋值固定值 5(后续可替换拾取计数变量)。
第三部分:运行测试
- 关卡保留默认第三人称角色;
- 播放游戏,按 E 键:屏幕文字变成 5,控制台打印日志。
关键知识点(跨蓝图调用 Custom Event 规则)
- 外部蓝图调用其他蓝图 Custom Event,必须先获取目标蓝图对象引用;
- 事件名称必须完全一致(区分大小写);
- 参数数量、类型必须匹配,否则编译报错;
- UI、Actor、角色、关卡蓝图之间通用这套调用逻辑。
案例 3:关卡蓝图全局控制场景物体 Custom Event(全局交互)
需求
按键盘 1,关卡蓝图调用场景门 Actor 的 Custom Event,开门;按键盘 2 关门。
操作步骤
步骤 1:创建门 Actor 蓝图 BP_Door
- 蓝图类→Actor,命名 BP_Door,添加立方体作为门模型;
- 打开事件图表,创建两个 Custom Event:
- 事件 1:
OpenDoor,无参数;逻辑:门 Z 轴位移向上 50 单位; - 事件 2:
CloseDoor,无参数;逻辑:门 Z 轴归位 0;
- 事件 1:
步骤 2:关卡中放置门,并给门设置唯一标签
- 把 BP_Door 拖入关卡;
- 选中场景中的门,右侧细节面板 → 标签 → 添加标签
SceneDoor。
步骤 3:编辑关卡蓝图,通过标签找到门并调用 Custom Event
- 顶部菜单栏「蓝图」→「打开关卡蓝图」;
- 事件图表添加按键:1 Pressed、2 Pressed;
- 按键 1 逻辑(开门):
- 搜索节点
Get All Actors by Tag,Tag 输入SceneDoor; - 输出 Actors 数组 →
Get Array Index 0获取第一个门; - 从门对象拖拽 →
Call OpenDoor;
- 搜索节点
- 按键 2 逻辑(关门):
- 同样获取门,调用
Call CloseDoor。
- 同样获取门,调用
测试
播放,按 1 门升起,按 2 门落下。
进阶核心设置:网络同步 Custom Event(联机游戏必备)
选中 Custom Event,右侧细节三个关键选项:
- Replicates(复制):勾选后支持网络同步;
- Call on Server(仅服务器执行)
- 客户端调用此事件,自动发送到服务器执行;
- 适用:修改游戏数据、伤害计算、道具扣除;
- Multicast(多播)
- 服务器触发后,同步执行到所有客户端;
- 适用:特效、开门、UI 同步、动画播放;
网络使用标准流程
- 客户端输入按键 → 调用
Call on Server自定义事件; - 服务器内修改数据,再调用
Multicast事件同步给所有人;
常见报错 & 避坑指南
- 找不到 Call XXXEvent 调用节点
- 原因:没有获取目标蓝图对象;事件名拼写错误;蓝图未保存编译。
- 解决:先获取目标 Actor/UI,统一大小写事件名,Ctrl+B 编译蓝图。
- 参数类型不匹配编译失败
- 解决:Custom Event 输入参数和调用节点参数类型一一对应。
- 跨蓝图调用无反应
- 目标对象为空(UI 未创建、Actor 未放入场景);
- 网络游戏未勾选 Replicates,客户端本地触发不同步。
- Custom Event 不能有返回值
- 需求有返回值改用 Function(函数),Event 只负责执行逻辑。
完整操作总结流程图
- 新建蓝图(Actor/UI/ 关卡)
- 事件图表右键创建 Custom Event
- 细节面板命名、添加输入参数、配置网络复制
- 在事件后编写业务逻辑
- 内部调用:直接 Call 事件名;跨蓝图调用:先获取目标对象再 Call
- 编译蓝图,放入关卡测试运行
感谢您的来访,获取更多精彩文章请收藏本站。
THE END

















暂无评论内容