[UE4] C++实现Delegate Event实例(例子、example、sample)
转自:http://aigo.iteye.com/blog/2301010
虽然官方doc上说Event的Binding方式跟Multi-Cast用法完全一样,Multi-Cast论坛上也有很多例子,但是实际是不一样。。而且论坛上找不到相关例子。后来看了下runtime/core的源码,Event的binging方式如下(附上完整步骤):
1,先定义自定义Event,此例中我们定义在GameMode中,名字叫 MyInitEvent。例子中定义的是无参函数,如果需要带参数,官方doc讲的有
2,执行Binding。MyUObject::TestFun是需要被触发的函数,这里假设是一个普通的无参成员函数:
注:任何UObject的普通函数都可以被设置为Event的回调函数,但如果函数是UFUNCTION,那么需要将AddUObject替换为AddUFunction。
3,触发Event,这里假设在BeginPlay中触发:
4,移除Event,比如之前bingding的event不想再触发了:
MyGameMode->OnInitialize().Remove(DHandle);
如何用蓝图实现Delegate Event:
当前例子使用的版本是v4.10,演示的内容包括:
按下字母键时,去调用事先绑定好的Event Dispatcher,在这个Event Dispatcher中,来实现修改一个widget蓝图中一个button组件的文本。
1,先在Project Settings中添加一个输入动作,名字为TestOutStr,按下V键时触发。

2,在蓝图脚本中实现调用Event Dispatcher的操作。
这里已经建好了一个PlayerController的蓝图,名字叫:MyPlayerController_BP。打开这个蓝图后,新建一个变量:NewVar_0,string类型,默认值为“BBBB”,我们将会把这个“BBBB”字符串传递到后面定义的Custom Event中,让button的文本显示为“BBBB”;
再新建一个Event Dispatcher,名字叫:UpdateBtnTxt,我们需要传递参数,所以为这个Event Dispatcher新建一个String参数,参数名为NewString。



3,这个MyPlayerController_BP蓝图的逻辑具体如下:
当按下V键时,会触发UpdateBtnTxt这个事件,同时在屏幕中打印一句“Press V++++”来测试调用Dispatch Event是否执行过。

4,在事先建好的Widget蓝图中添加一个button和一个Text组件,这个button的ID为Button_Txt,后续蓝图中会用到这个ID,Text组件的默认值为AAAA,结构如下图所示:

5,打开Widget蓝图的Graph面板,右键新建一个Custom Event

6,这个Custom Event名字起为ChangeTxtEvent,由于要接受MyPlayerController_BP蓝图中传递过来的string类型参数,所以这里也新建一个string类型参数,名字为NewParam。

7,最后用蓝图node来连线实现逻辑,我们在Event Construct事件中绑定了事先定义好的Event Dispathcer:UpdateBtnTxt。
MyPlayerController_BP蓝图中调用UpdateBtnTxt时,则会触发Widget蓝图的Custom Event:ChangeTxtEvent,从而来修改button的文本。

参考资料:
UE4 Event Dispatchers
https://www.youtube.com/watch?v=k-MAALv3P-Y
Event Dispatchers
[UE4] C++实现Delegate Event实例(例子、example、sample)的更多相关文章
- 【python】-- 信号量(Semaphore)、event(红绿灯例子)
信号量(Semaphore) 之前讲的线程锁(互斥锁) 同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 ,比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里 ...
- C# delegate event func action 匿名方法 lambda表达式
delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void ...
- [C#] Delegate, Multicase delegate, Event
声明:这篇博客翻译自:https://www.codeproject.com/Articles/1061085/Delegates-Multicast-delegates-and-Events-in- ...
- ue4 delegate event
官网相关 https://docs.unrealengine.com/latest/CHN/Programming/UnrealArchitecture/Delegates/index.html wi ...
- Delegate&Event
Delegate 1.基本类: public class Student { public int Id { get; set; } public string Name { get; set; } ...
- Delegate & Event
Long time without coding,貌似对programming都失去了曾有的一点点sense了,今日有空再细瞄一下.net的委托和事件. Delegate 首先,委托用于引用一类具有相 ...
- 委托与事件--delegate&&event
委托 访问修饰符 delegate 返回值 委托名(参数); public delegate void NoReturnNoPara(); public void NoReturnNoParaMeth ...
- C# delegate & event
public delegate void MyDelegate(string mydelegate);//声明一个delegate对象 //实现有相同参数和返回值的函数 public v ...
- Delegate event 委托事件---两个From窗体使用委托事件
窗体如下: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...
随机推荐
- 20165210 Java第四周学习总结
20165210 Java第四周学习总结 教材学习内容 第五章学习总结 子类与父类: 子类: class 子类名 extends 父类名 { ... } 类的树形结构 子类的继承性: 子类和父类在同一 ...
- HDU 4557
http://acm.hdu.edu.cn/showproblem.php?pid=4557 解决一类问题的set用法 #include <iostream> #include <c ...
- linux 读取物理寄存器
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/mman.h ...
- matplotlib.pyplot中add_subplot方法参数111的含义
下述代码若要运行,得在安装Python之外安装matplotlib.numpy.scipy.six等库,专门来看这篇小贴的朋友应该知道这些库. 参数331的意思是:将画布分割成3行3列,图像画在从左到 ...
- BZOJ3230: 相似子串【后缀数组】
Description Input 输入第1行,包含3个整数N,Q.Q代表询问组数. 第2行是字符串S. 接下来Q行,每行两个整数i和j.(1≤i≤j). Output 输出共Q行,每行一个数表示每组 ...
- sublime text 3 实用的快捷键
Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+V:粘贴并格 ...
- SharePoint PeopleEditor控件使用
以下用于简要介绍在SharePoint 2016二次开发中如何使用PeopleEditor人员选择器,并采用前端的方式获取和设置值. 一.在使用的.aspx页面进行注册 <%@ Register ...
- hdu 1723 DP/递推
题意:有一队人(人数 ≥ 1),开头一个人要将消息传到末尾一个人那里,规定每次最多可以向后传n个人,问共有多少种传达方式. 这道题我刚拿到手没有想过 DP ,我觉得这样传消息其实很像 Fibonacc ...
- cache、session与cookie
cache.session.cookie的区别 session把数据保存在服务器端,每一个用户都有属于自己的Session,与别人的不冲突 就是说,你登陆系统后,你的信息(如账号.密码等)就会被保存在 ...
- SQLite数据库学习小结——Frameworks层实现
3. SQLite的Frameworks层实现 3.1 Frameworks层架构 Android系统方便应用使用,在Frameworks层中封装了一套Content框架,之所以叫Content框架而 ...