事件处理(Handling Events)和委托(Delegate)代码示例(三)【UE4】【C++】

举报
ShaderJoy 发表于 2021/12/30 00:44:25 2021/12/30
【摘要】 6. 自定义事件(Custom Event) 首先添加事件声明宏到 MyTriggerVolume 类中(不是 GameMode) 自定义事件声明如下: DECLARE_EVENT(AMyTriggerVolume, FPlayerEntered) 第一个参数是具体实现事件的类,也是唯一能调用 Broadcast 的类 第...

6. 自定义事件(Custom Event)

首先添加事件声明宏到 MyTriggerVolume 类中(不是 GameMode)

自定义事件声明如下:

DECLARE_EVENT(AMyTriggerVolume, FPlayerEntered)
 

第一个参数是具体实现事件的类,也是唯一能调用 Broadcast 的类

第二个参数是我们事件函数的签名


并添加刚刚声明的事件签名的实例

FPlayerEntered OnPlayerEntered;
 

在 MyTriggerVolume.cpp 的 NotifyActorBeginOverlap 中

添加事件的广播代码:


  
  1. // 自定义事件
  2. // FPlayerEntered TriggerVolEventListenner
  3. OnPlayerEntered.Broadcast();

如此,当玩家进入了触发区域,MyTriggerVolume 才会通过事件实例进行广播,其他第三方类因为没有 OnPlayerEntered,所以无法进行广播(区别于将委托实例定义在 GameMode 当中)。

其次,新建一个 Actor 子类,命名为 TriggerVolEventListener

TriggerVolEventListener.h 


  
  1. UPROPERTY()
  2. UPointLightComponent* PointLight;
  3. UPROPERTY(EditAnywhere)
  4. AMyTriggerVolume* TriggerEventSource;
  5. UFUNCTION()
  6. void OnTriggerEvent();

TriggerVolumEventListener.cpp


  
  1. // Sets default values
  2. ATriggerVolEventListener::ATriggerVolEventListener()
  3. {
  4. // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
  5. PrimaryActorTick.bCanEverTick = true;
  6. PointLight = CreateDefaultSubobject<UPointLightComponent>("PointLight");
  7. RootComponent = PointLight;
  8. }
  9. // Called when the game starts or when spawned
  10. void ATriggerVolEventListener::BeginPlay()
  11. {
  12. Super::BeginPlay();
  13. if (TriggerEventSource != nullptr)
  14. {
  15. TriggerEventSource->OnPlayerEntered.AddUObject(this, &ATriggerVolEventListener::OnTriggerEvent);
  16. }
  17. }
  18. // Called every frame
  19. void ATriggerVolEventListener::Tick( float DeltaTime )
  20. {
  21. Super::Tick( DeltaTime );
  22. }
  23. // 改变灯光的颜色
  24. void ATriggerVolEventListener::OnTriggerEvent()
  25. {
  26. PointLight->SetLightColor(FLinearColor(0, 1, 0, 1));
  27. }

在确保 MyTriggerVolume 的指针(TriggerEventSource)合法之后,绑定 TriggerVolumeListener 的 OnTriggerEvent 回调函数指针到 MyTriggerVolume 的触发事件上

(完)

文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/64124986

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。