虚幻引擎5 GAS开发俯视角RPG游戏 P05-07 广播效果资产标签
目标:上面我们实现了获取添加GE时的回调,并能够打印对应GE上面添加的Tags,接下来,我们要实现ASC和Widget Controller之间的沟通,在GE添加时,在WidgetController里面也能够获取到Broadcast广播,并触发对应的回调。
1.ASC.h在之前的基础上,添加一个委托宏设置FEffectAssetTags,然后定义一个属性EffectAssetTags用于后续的广播。
Source/CC_Aura/Public/AbilitySystem/CC_AbilitySystemComponent.h:
//定义多播委托,用于向小部件控制器广播效果标签
DECLARE_MULTICAST_DELEGATE_OneParam(FEffectAssectTags, const FGameplayTagContainer& /*AssectTags*/)
//定义一个多播委托FEffectAssectTags EffectAssectTags;
Source/CC_Aura/Private/AbilitySystem/CC_AbilitySystemComponent.cpp:
EffectAssectTags.Broadcast(TagContainer);
2.在小部件控制器中,调用ASC中的EffectAssectTags的委托回调函数:
在函数BindCallbacksToDependencies()中,添加:
if (CC_AbilitySystemComponent == nullptr){CC_AbilitySystemComponent = Cast<UCC_AbilitySystemComponent>(AbilitySystemComponent);}CC_AbilitySystemComponent->EffectAssectTags.AddLambda([](const FGameplayTagContainer& AssectTags){for(const FGameplayTag& Tag : AssectTags){//TODO: 将tag广播给Widget Controllerconst FString Msg = FString::Printf(TEXT("GE Tag: %s"), *Tag.ToString()); //获取Asset TagGEngine->AddOnScreenDebugMessage(-1, 8.f, FColor::Cyan, Msg); //打印到屏幕上 -1 不会被覆盖}});
效果:
失败!!!
查找原因:
发现:
但
找了很长时间BUG,最后没办法,只能迁移项目,这个项目是UE5.5版本做的, 现在换UE5.2. 效果: