虚幻引擎 Custom Event 节点

一、基础概念

Custom Event 自定义事件:蓝图内可被外部 / 内部调用、可传参、可绑定的事件,作用:
图片[1]_虚幻引擎 Custom Event 节点_虚幻引擎
  1. 拆分复杂蓝图逻辑,解耦代码;
  2. 实现蓝图间通信(角色→UI、关卡蓝图→Actor、Actor 之间互调);
  3. 支持输入参数、输出返回值、可设置为可复制(网络同步)。

环境说明

引擎版本:UE5.1~5.5 操作完全一致,分 3 个经典实战案例:
  1. 案例 1:单蓝图内部调用 Custom Event(基础入门)
  2. 案例 2:角色蓝图调用 UI 蓝图 Custom Event(跨蓝图通信,最常用)
  3. 案例 3:关卡蓝图控制场景物体 Custom Event(全局控制)

前置通用操作:创建 Custom Event 节点两种方式

方式 1:右键快速创建(推荐)

  1. 打开任意蓝图编辑器(角色 / UI/Actor/ 关卡蓝图);
  2. 蓝图图表空白处右键;
  3. 搜索 Custom Event → 点击生成;
  4. 选中事件,右侧细节面板配置:
    • Event Name:事件名(全局唯一,跨蓝图调用靠名字匹配)
    • Inputs:添加输入参数(int、float、Actor、Text、布尔等)
    • Outputs:返回值(Function 才有,Event 无返回)
    • Replicates:网络复制(联机游戏勾选,服务器同步触发)
    • Call on Server:仅在服务器执行
    • Multicast:多播,服务器触发后所有客户端同步执行

方式 2:蓝图顶部「函数 / 事件」面板创建

  1. 蓝图编辑器顶部切换到 My Blueprint(我的蓝图) 面板;
  2. 找到 Events 分类 → 点击 + Add Custom Event
  3. 双击事件自动跳转到图表,生成事件入口节点。

案例 1:单蓝图内部调用 Custom Event(零基础入门)

需求

玩家按下键盘 F 键,调用自定义事件,打印文字 + 改变自身方块颜色。

操作步骤

步骤 1:创建基础 Actor

  1. 内容浏览器右键 → 蓝图类 → 选择 Actor,命名 BP_CubeActor
  2. 打开蓝图,左侧组件面板 +添加立方体,作为可视化模型。

步骤 2:创建 Custom Event

  1. 切换到 事件图表
  2. 空白右键搜索 Custom Event,创建;
  3. 右侧细节面板设置:
    • Event Name:ChangeCubeColor
    • Inputs:添加参数 NewColor,类型 Linear Color(颜色);
  4. 拖拽事件输出执行引脚,搭建逻辑:
    1. Set Material Color(设置立方体颜色),目标选 Cube 组件;
    2. 颜色输入绑定 NewColor 参数;
    3. 追加 Print String,打印 “方块颜色已更新”。

步骤 3:绑定按键,调用自定义事件

  1. 空白右键搜索 F → 添加键盘事件 F Pressed
  2. 从 F 按下的执行引脚拖拽,搜索 Call ChangeCubeColor(调用刚才创建的自定义事件);
  3. 给调用节点的 NewColor 参数赋值:比如红色 (1,0,0,1)

步骤 4:测试运行

  1. 关卡中拖入 BP_CubeActor
  2. 点击顶部「播放」,按 F 键:方块变红,控制台打印文字。

原理

同一蓝图内直接 Call 事件名 调用 Custom Event,参数双向传递,逻辑拆分清晰。

案例 2:玩家角色蓝图 调用 UI Widget 的 Custom Event(项目高频用法)

需求

玩家靠近拾取道具,按 E 键,打开 UI 并调用 UI 内自定义事件,更新 UI 文字显示道具数量。

完整分步操作

第一部分:创建 UI 蓝图并制作 Custom Event

步骤 1:创建 UI 控件

  1. 内容浏览器右键 → 用户界面 → Widget 蓝图,命名 W_ItemHUD
  2. 打开控件蓝图,进入控件蓝图编辑器
  3. 左侧调色板拖入一个 Text 控件,命名 T_ItemCount,放在画布中间。

步骤 2:在 UI 中创建 Custom Event(供外部角色调用)

  1. 顶部切换到 事件图表
  2. 右键创建 Custom Event
  3. 细节面板配置:
    • 事件名称:UpdateItemText
    • Inputs:添加参数 ItemNum,类型 Integer(整数)
  4. 事件后连接逻辑:
    • 搜索节点 Set Text,目标绑定 T_ItemCount
    • 文本内容用 Int to Text,输入连接 ItemNum 参数;
    • 额外加 Print String 打印 UI 收到的数值。

      保存 UI 蓝图。

第二部分:玩家角色蓝图编写逻辑,调用 UI 的 Custom Event

步骤 1:打开玩家蓝图(ThirdPersonCharacter)

  1. 打开第三人称角色蓝图,事件图表;
  2. 先创建存储 UI 的变量

    右侧「我的蓝图」→ +变量

    • 变量名:HUDWidget
    • 类型:W_ItemHUD(我们刚才创建的 UI)
    • 类别:UI,勾选 Editable,默认空。

步骤 2:游戏开始时生成并挂载 UI

  1. Event BeginPlay(游戏启动事件);
  2. 拖拽执行线搜索 Create Widget,类选择 W_ItemHUD
  3. 创建完成后,调用 Add to Viewport(显示到屏幕);
  4. 把 Create Widget 的返回值赋值给变量 HUDWidget

步骤 3:按键 E 触发,调用 UI 的 Custom Event

  1. 添加键盘事件 E Pressed
  2. 从变量 HUDWidget 拖拽到图表 → 获取 HUDWidget;
  3. 从获取的 UI 引脚拖拽,搜索 Call UpdateItemText(UI 里写好的自定义事件);
  4. 给调用节点的 ItemNum 赋值固定值 5(后续可替换拾取计数变量)。

第三部分:运行测试

  1. 关卡保留默认第三人称角色;
  2. 播放游戏,按 E 键:屏幕文字变成 5,控制台打印日志。

关键知识点(跨蓝图调用 Custom Event 规则)

  1. 外部蓝图调用其他蓝图 Custom Event,必须先获取目标蓝图对象引用
  2. 事件名称必须完全一致(区分大小写);
  3. 参数数量、类型必须匹配,否则编译报错;
  4. UI、Actor、角色、关卡蓝图之间通用这套调用逻辑。

案例 3:关卡蓝图全局控制场景物体 Custom Event(全局交互)

需求

按键盘 1,关卡蓝图调用场景门 Actor 的 Custom Event,开门;按键盘 2 关门。

操作步骤

步骤 1:创建门 Actor 蓝图 BP_Door

  1. 蓝图类→Actor,命名 BP_Door,添加立方体作为门模型;
  2. 打开事件图表,创建两个 Custom Event:
    1. 事件 1:OpenDoor,无参数;逻辑:门 Z 轴位移向上 50 单位;
    2. 事件 2:CloseDoor,无参数;逻辑:门 Z 轴归位 0;

步骤 2:关卡中放置门,并给门设置唯一标签

  1. 把 BP_Door 拖入关卡;
  2. 选中场景中的门,右侧细节面板 → 标签 → 添加标签 SceneDoor

步骤 3:编辑关卡蓝图,通过标签找到门并调用 Custom Event

  1. 顶部菜单栏「蓝图」→「打开关卡蓝图」;
  2. 事件图表添加按键:1 Pressed、2 Pressed;
  3. 按键 1 逻辑(开门):
    • 搜索节点 Get All Actors by Tag,Tag 输入 SceneDoor
    • 输出 Actors 数组 → Get Array Index 0 获取第一个门;
    • 从门对象拖拽 → Call OpenDoor
  4. 按键 2 逻辑(关门):
    • 同样获取门,调用 Call CloseDoor

测试

播放,按 1 门升起,按 2 门落下。

进阶核心设置:网络同步 Custom Event(联机游戏必备)

选中 Custom Event,右侧细节三个关键选项:
  1. Replicates(复制):勾选后支持网络同步;
  2. Call on Server(仅服务器执行)
    • 客户端调用此事件,自动发送到服务器执行;
    • 适用:修改游戏数据、伤害计算、道具扣除;
  3. Multicast(多播)
    • 服务器触发后,同步执行到所有客户端
    • 适用:特效、开门、UI 同步、动画播放;

网络使用标准流程

  1. 客户端输入按键 → 调用 Call on Server 自定义事件;
  2. 服务器内修改数据,再调用 Multicast 事件同步给所有人;

常见报错 & 避坑指南

  1. 找不到 Call XXXEvent 调用节点
    • 原因:没有获取目标蓝图对象;事件名拼写错误;蓝图未保存编译。
    • 解决:先获取目标 Actor/UI,统一大小写事件名,Ctrl+B 编译蓝图。
  2. 参数类型不匹配编译失败
    • 解决:Custom Event 输入参数和调用节点参数类型一一对应。
  3. 跨蓝图调用无反应
    • 目标对象为空(UI 未创建、Actor 未放入场景);
    • 网络游戏未勾选 Replicates,客户端本地触发不同步。
  4. Custom Event 不能有返回值
    • 需求有返回值改用 Function(函数),Event 只负责执行逻辑。

完整操作总结流程图

  1. 新建蓝图(Actor/UI/ 关卡)
  2. 事件图表右键创建 Custom Event
  3. 细节面板命名、添加输入参数、配置网络复制
  4. 在事件后编写业务逻辑
  5. 内部调用:直接 Call 事件名;跨蓝图调用:先获取目标对象再 Call
  6. 编译蓝图,放入关卡测试运行

感谢您的来访,获取更多精彩文章请收藏本站。

THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容