【UE4C++-ActionRougelike-09】音频动画UI
1、音频入门
我们为魔法攻击加上音效,包括攻击时的音效和命中后的音效
1.1 创建Sound Cue文件
新建Sound Cue,命名为MagicProjectile_Loop,并选择合适的Sound Wave到输出,勾选循环选项。
1.2 设置声音衰减
设置声音衰减效果,使得随着发出的魔法攻击粒子距离变远而声音持续衰减。创建Sound Attenuation文件,命名为Att_Projectiles。此处维持了默认设置,具体参数设置详见官方文档。
2、动画蓝图
2.1 动画蓝图编辑器
Animation Blueprint(动画蓝图)是一种用于创建角色动画的蓝图图表。Animation Blueprint包含Event Graph(事件图)和Anim Graph(动画图)两个部分。
Event Graph(事件图):用于处理与角色动画相关的事件和逻辑。在Event Graph中可以添加事件(例如触发动画的输入事件、状态改变事件等)以及处理这些事件的逻辑(例如播放特定的动画、设置动画参数等)。
Anim Graph(动画图):用于定义角色动画的播放逻辑和状态机。在Anim Graph中可以创建动画状态机,定义不同的动画状态(例如站立、行走、奔跑等),并根据角色的状态和输入来切换不同的动画状态。还可以在Anim Graph中定义动画融合(例如混合、遮罩等),以实现更复杂的动画逻辑和效果。
2.2 添加死亡动画
在角色动画蓝图Gideon_AnimBlueprint中添加死亡动画,设置布尔变量BIsAlive表示角色是否存活,如果死亡则播放死亡动画。
2.3 判断死亡
在UMyAttributeComponent.h中添加判断死亡函数
class ACTIONROGUELIKE_API UMyAttributeComponent : public UActorComponent
{
GENERATED_BODY()
public:
//供蓝图调用的判断死亡函数
UFUNCTION(BlueprintCallable)
bool IsAlive() const;
}
在UMyAttributeComponent.cpp中实现判断死亡函数
bool UMyAttributeComponent::IsAlive() const
{
return Health > 0.0f;
}
2.4 禁用输入
玩家死亡后应当不能再对角色进行操作,在MyCharacter.h中添加
class ACTIONROGUELIKE_API AMyCharacter : public ACharacter
{
//编写属性组件OnHealthChange委托绑定函数
UFUNCTION()
void OnHealthChanged(AActor* InstigatorActor, UMyAttributeComponent* OwningComp, float NewHealth, float Delta);
virtual void PostInitializeComponents() override;
}
在组件初始化后进行事件委托绑定,并实现委托绑定函数
void AMyCharacter::PostInitializeComponents()
{
Super::PostInitializeComponents();
AttributeComp->OnHealthChange.AddDynamic(this, &AMyCharacter::OnHealthChanged);
}
void AMyCharacter::OnHealthChanged(AActor* InstigatorActor, UMyAttributeComponent* OwningComp, float NewHealth, float Delta)
{
//血量为0时,禁止玩家输入
if(NewHealth <= 0.0f && Delta <= 0.0f)
{
APlayerController* MyController = Cast<APlayerController>(GetController());
DisableInput(MyController);
}
}
最终效果如下:
3、伤害数值UI
3.1 新建伤害数值Widget组件
新建Widget组件,命名为DamagePopup_Widget。添加文本作为伤害数值显示,添加变量AttachTo表示伤害显示的Actor。通过AttachTo计算widget应该出现的位置,同时利用Delay设置widget消失时间。
3.2 调用伤害数值UI
以TargetDummy类为例,在TargetDummy类中调用该widget。当委托触发时,显示DamagePopup_Widget。
最终伤害显示效果如下: