事件处理(Handling Events)和委托(Delegate)代码示例(三)【UE4】【C++】
【摘要】
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 中
添加事件的广播代码:
-
// 自定义事件
-
// FPlayerEntered TriggerVolEventListenner
-
OnPlayerEntered.Broadcast();
如此,当玩家进入了触发区域,MyTriggerVolume 才会通过事件实例进行广播,其他第三方类因为没有 OnPlayerEntered,所以无法进行广播(区别于将委托实例定义在 GameMode 当中)。
其次,新建一个 Actor 子类,命名为 TriggerVolEventListener
TriggerVolEventListener.h
-
UPROPERTY()
-
UPointLightComponent* PointLight;
-
-
UPROPERTY(EditAnywhere)
-
AMyTriggerVolume* TriggerEventSource;
-
-
UFUNCTION()
-
void OnTriggerEvent();
TriggerVolumEventListener.cpp
-
// Sets default values
-
ATriggerVolEventListener::ATriggerVolEventListener()
-
{
-
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
-
PrimaryActorTick.bCanEverTick = true;
-
PointLight = CreateDefaultSubobject<UPointLightComponent>("PointLight");
-
RootComponent = PointLight;
-
}
-
-
// Called when the game starts or when spawned
-
void ATriggerVolEventListener::BeginPlay()
-
{
-
Super::BeginPlay();
-
-
if (TriggerEventSource != nullptr)
-
{
-
TriggerEventSource->OnPlayerEntered.AddUObject(this, &ATriggerVolEventListener::OnTriggerEvent);
-
}
-
-
}
-
-
// Called every frame
-
void ATriggerVolEventListener::Tick( float DeltaTime )
-
{
-
Super::Tick( DeltaTime );
-
-
}
-
// 改变灯光的颜色
-
void ATriggerVolEventListener::OnTriggerEvent()
-
{
-
PointLight->SetLightColor(FLinearColor(0, 1, 0, 1));
-
}
在确保 MyTriggerVolume 的指针(TriggerEventSource)合法之后,绑定 TriggerVolumeListener 的 OnTriggerEvent 回调函数指针到 MyTriggerVolume 的触发事件上
(完)
文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。
原文链接:panda1234lee.blog.csdn.net/article/details/64124986
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)