UE4 C++实现Delegate Event实例(例子、example、sample) - 纳金网
联系我们

给我们留言

联系我们

地址:福建省晋江市青阳街道洪山路国际工业设计园纳金网

邮箱:info@narkii.com

电话:0595-82682267

(周一到周五, 周六周日休息)

当前位置:主页 > 3D教程 > 图文教程

UE4 C++实现Delegate Event实例(例子、example、sample)

来源: 52vr | 责任编辑:传说的落叶 | 发布时间: 2019-06-11 08:32 | 浏览量:

[UE4] C++实现Delegate Event实例(例子、example、sample)

 

虽然官方doc上说Event的Binding方式跟Multi-Cast用法完全一样,Multi-Cast论坛上也有很多例子,但是实际是不一样。。而且论坛上找不到相关例子。后来看了下runtime/core的源码,Event的binging方式如下(附上完整步骤):

 

1,先定义自定义Event,此例中我们定义在GameMode中,名字叫 MyInitEvent。例子中定义的是无参函数,如果需要带参数,官方doc讲的有

 
  1. UCLASS()  
  2. class MYPROJ_API AMyGameMode : public AGameMode  
  3. {  
  4.     GENERATED_BODY()  
  5.       
  6. public:  
  7.   
  8.     AHGameMode();  
  9.   
  10.     //定义Event  
  11.     DECLARE_EVENT(MyUObject, MyInitEvent)  
  12.       
  13.     //用于获取Event引用的函数,方便在GameMode之外执行binding  
  14.     MyInitEvent& OnInitialize() { return InitEvent; }  
  15.       
  16. private:  
  17.     //Event实例化  
  18.     MyInitEvent InitEvent;  
  19.       
  20.     //Event的binding指针  
  21.     FDelegateHandle DHandle;  
  22. }  

 

2,执行Binding。MyUObject::TestFun是需要被触发的函数,这里假设是一个普通的无参成员函数:

 
  1. MyUObject* MyObj = NULL;    //这里假设创建MyUObject  
  2. if (MyObj)  
  3. {  
  4.     DHandle = MyGameMode->OnInitialize().AddUObject(MyObj, &MyUObject::TestFun);  
  5. }  

 

注:任何UObject的普通函数都可以被设置为Event的回调函数,但如果函数是UFUNCTION,那么需要将AddUObject替换为AddUFunction

 

3,触发Event,这里假设在BeginPlay中触发:

 
  1. void AMyGameMode::BeginPlay()  
  2. {  
  3.     InitEvent.Broadcast();  
  4. }  

 

4,移除Event,比如之前bingding的event不想再触发了:

 
  1. MyGameMode->OnInitialize().Remove(DHandle);  


相关文章
网友评论

您需要登录后才可以发帖 登录 | 立即注册

关闭

全部评论:0条

推荐
热门