【UE4C++-ActionRougelike-09】音频动画UI


【UE4C++-ActionRougelike-09】音频动画UI

1、音频入门

我们为魔法攻击加上音效,包括攻击时的音效和命中后的音效

1.1 创建Sound Cue文件

新建Sound Cue,命名为MagicProjectile_Loop,并选择合适的Sound Wave到输出,勾选循环选项。

创建Sound cue

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消失时间。

伤害显示widget蓝图

3.2 调用伤害数值UI

以TargetDummy类为例,在TargetDummy类中调用该widget。当委托触发时,显示DamagePopup_Widget。

调用伤害显示widget

最终伤害显示效果如下:

伤害显示效果

文章作者: Woilin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Woilin !
评论
  目录