UE C++自定义事件

文章介绍了如何在UEC++中声明和使用动态组播委托来实现自定义事件OnHealthChanged。当角色健康值发生变化时,如受到伤害,此事件会被触发并广播给订阅者。HandleTakeAnyDamage函数负责处理伤害并更新健康值,然后使用Broadcast方法广播事件。蓝图中可以分配和监听这个事件。
摘要由CSDN通过智能技术生成

在UE C++中实现自定义事件,例如图中On Health Changed,当角色受到伤害时触发该事件

全局声明:声明动态组播委托_六个参数

//OnHealthChanged event 全局
DECLARE_DYNAMIC_MULTICAST_DELEGATE_SixParams(FOnHealthChangedSignature,  USHealthComponent*, HealthComp, float, Health, float, HealthDelta, const class UDamageType*, DamageType, class AController*, InstigatedBy, AActor*, DamageCauser);

//类中函数声明
public:
    UPROPERTY(BlueprintAssignable, Category = "Events")
    FOnHealthChangedSignature OnHealthChanged;

第一个是函数声明名,后面是六个参数,在蓝图中显示如下:

 在C++中适当位置触发该事件:

void USHealthComponent::HandleTakeAnyDamage(AActor* DamagedActor, float Damage, const class UDamageType* DamageType, class AController* InstigatedBy, AActor* DamageCauser)
{
	if (Damage<=0.0f)
	{
		return;
	}
	//Update health clamped
	Health = FMath::Clamp(Health - Damage, 0.0f, DefaultHealth);
    //使用 Broadcast 广播事件
	OnHealthChanged.Broadcast(this, Health, Damage, DamageType, InstigatedBy, DamageCauser);
}

该函数也可以在其他地方,比如角色中AddDynamic使用

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值