自定义Events
在AttributeComponent的.h头文件上加上代码
//自定义Event DECLARE_DYNAMIC_MULTICAST_DELEGATE_FourParams(FOnHealthChanged, AActor*, InstigatorActor, USAttributeComponent*, OwningComp, float, NewHealth, float, Delta); UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) class ACTIONROUGELIKE_API USAttributeComponent : public UActorComponent
在public内添加自定义函数FOnHealthChanged
//仅可与多播代表一起使用。在蓝图中公开分配的属性。 UPROPERTY(BlueprintAssignable) FOnHealthChanged OnHealthChanged;
最后在之前.cpp的ApplyHealthChange内添加
bool USAttributeComponent::ApplyHealthChange(float Delta) { Health += Delta; //当ApplyHealthChange执行的时候执行OnHealthChanged多播代表 OnHealthChanged.Broadcast(nullptr,this,Health,Delta); return true; }
效果图
在Attibute组件的蓝图右侧新增加了一个FOnHealthChanged的事件,并且在执行ApplyHealthChange的时候启用
将自定义Events分配给UI
回到昨天创建的生命值UI
编写蓝图事件
在开始游戏的时候获得Pawn,将Pawn转换为我们的SCharacter类,获得Attribute组件,将组件转换为Bind Event,添加为我们创建的事件,获得Progress Bar组件和我们的Attribute组件,获取组件下的默认Health变量,将NewHealth除以Health变量,最后设置百分比
给UI添加动画
首先在Window内将Animations窗口调整出来
在Text->RenderTransfrom->Transfrom->Scale下点击Add a keyframe
就将这个关键帧添加到了时间轴上
在时间轴内添加一个0.5秒先变大后回复原状的动画
最后在蓝图内添加
如果动画第0帧的默认值被修改了怎么办
将时间轴选择第0帧,然后在扳手图标处选择Restore即可
附加:桶爆炸后减少50点Health
蓝图
效果图