转自: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

https://docs-origin.unrealengine.com/latest/INT/Engine/Blueprints/UserGuide/EventDispatcher/index.html

[UE4] C++实现Delegate Event实例(例子、example、sample)的更多相关文章

  1. 【python】-- 信号量(Semaphore)、event(红绿灯例子)

    信号量(Semaphore) 之前讲的线程锁(互斥锁) 同时只允许一个线程更改数据,而Semaphore是同时允许一定数量的线程更改数据 ,比如厕所有3个坑,那最多只允许3个人上厕所,后面的人只能等里 ...

  2. C# delegate event func action 匿名方法 lambda表达式

    delegate event action func 匿名方法 lambda表达式 delegate类似c++的函数指针,但是是类型安全的,可以指向多个函数, public delegate void ...

  3. [C#] Delegate, Multicase delegate, Event

    声明:这篇博客翻译自:https://www.codeproject.com/Articles/1061085/Delegates-Multicast-delegates-and-Events-in- ...

  4. ue4 delegate event

    官网相关 https://docs.unrealengine.com/latest/CHN/Programming/UnrealArchitecture/Delegates/index.html wi ...

  5. Delegate&Event

    Delegate 1.基本类: public class Student { public int Id { get; set; } public string Name { get; set; } ...

  6. Delegate & Event

    Long time without coding,貌似对programming都失去了曾有的一点点sense了,今日有空再细瞄一下.net的委托和事件. Delegate 首先,委托用于引用一类具有相 ...

  7. 委托与事件--delegate&&event

    委托 访问修饰符 delegate 返回值 委托名(参数); public delegate void NoReturnNoPara(); public void NoReturnNoParaMeth ...

  8. C# delegate & event

    public delegate void MyDelegate(string mydelegate);//声明一个delegate对象 //实现有相同参数和返回值的函数        public v ...

  9. Delegate event 委托事件---两个From窗体使用委托事件

    窗体如下:   public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void b ...

随机推荐

  1. 2019.1.22 zigbee test

    1传输测试 频谱仪设置: sigfox 模块串口设置: 自动选择对应型号 Test step: PS:发送TX指令 AT$cw=波特率,通道,uint 这里有个问题--不应该只发送一次 ------- ...

  2. eclipse集成svn后总是弹出 Password Required问题解决方法

    最近在集成svn后,在打开eclipse后总是一遍遍的弹出 Password Required,即使输入正确的用户名以及密码也会弹出,最后发现是eclipse的Network  Connections ...

  3. Redis学习第八课:Redis高级实用特性(一)

    Redis高级实用特性 注:我学习的环境是vmware7.1 + ubantu10.10+ redis 3.0.2 1.安全性 设置客户端连接后进行任何其他指定前需要的密码.因为redis速度相当快, ...

  4. C语言指针使用小记 (深入理解C指针 读后小记)

    最近正值过年在家,新年初一,闲暇时间无事可做便把以前看过的书籍整理了一下,顺手也把这本“深入理解C指针”的书重新读了一遍,这本书总体感觉比较简单,但是还是不免有些地方是平时没有想到过或者没有注意到的, ...

  5. chapter02 K近邻分类器对Iris数据进行分类预测

    寻找与待分类的样本在特征空间中距离最近的K个已知样本作为参考,来帮助进行分类决策. 与其他模型最大的不同在于:该模型没有参数训练过程.无参模型,高计算复杂度和内存消耗. #coding=utf8 # ...

  6. Future接口和FutureTask类【FutureTask实现了Runnable和Future接口】

    Future API: public interface Future<V> { /** * Attempts to cancel execution of this task. This ...

  7. Codeforces Round #462 (Div. 2) B-A Prosperous Lot

    B. A Prosperous Lot time limit per test 1 second memory limit per test 256 megabytes input standard ...

  8. 我的第一个Mybatis程序

    第一个Mybatis程序 在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架 MyBatis由iBatis演化而来 iBATIS一词来源于“i ...

  9. (8)propetry装饰器

    propetry是一个内置函数,用来将一个功能伪装成一个数据属性 property将一个方法伪装成一个数据属性class People: def __init__(self,name,height,w ...

  10. dockerk个人学习(0)

    接下来几篇记录学习docker和ks的部署搭建环境和应用部署等