本文讲述一下动态多播委托的简单使用,包括它的声明,定义,在蓝图中的使用。
我这边使用的前提是在创建了一个属性组件,添加到角色中,当角色收到血量改变的通知的时候,会进行相应的处理。
DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams(FOnHealthChanged,AActor*,InstigatorActor,UAttributeComponent*,AttributeComponent,float,NewHealth,float,Delta);
定义变量,注意在public权限内使用,因为外部会引用到。BlueprintAssignable标识符,表示在蓝图中可以进行使用。
public:
UPROPERTY(BlueprintAssignable,Category=Events)
FOnHealthChanged OnHealthChanged;
在血量产生变化时,会进行一个通知。
bool UAttributeComponent::ApplyChangeHealth(float Delta)
{
CurrentHealth = FMath::Clamp(CurrentHealth + Delta,0.0f,MaxHealth);
OnHealthChanged.Broadcast(nullptr,this,CurrentHealth,Delta);
return true;
}
C++中的通知监听,在组件初始化好之后进行动态监听
void ASCharacter::PostInitializeComponents()
{
Super::PostInitializeComponents();
AttributeComp->OnHealthChanged.AddDynamic(this,&ASCharacter::OnHealthChanged);
}
在这里我进行了一个打印,打印出新血量和Delta
void ASCharacter::OnHealthChanged(AActor* InstigatorActor, UAttributeComponent* AttributeComponent, float NewHealth,
float Delta)
{
FString Msg = FString::Printf(TEXT("Current Health:%f,delta:%f"),NewHealth,Delta);
GEngine->AddOnScreenDebugMessage(-1,5.0f,FColor::Red,Msg);
}
在蓝图中的使用:
在代码里面定义之后,会在对应的组件底部添加事件,进行对应的处理。
在蓝图中的监听:使用绑定对应的事件,执行一次,进度条产生变化。
效果:文章来源:https://www.toymoban.com/news/detail-534196.html
可以看出对应的打印已经显示,进度条长度有变化,效果正确。文章来源地址https://www.toymoban.com/news/detail-534196.html
到了这里,关于UE4C++之动态多播委托的简单使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!