68. UE5 RPG 优化敌人角色的表现效果

我们现在已经有了四个敌人角色,接下来,处理一下在战斗中遇到的问题。

处理角色死亡后还会攻击的问题

因为我们有角色溶解的效果,角色在死亡以后的5秒钟才会被销毁掉。所以在这五秒钟之内,角色其实还是会攻击。主要时因为AI行为树不知道角色已经死亡,所以,我们需要在行为树里增加对角色死亡的判断。
我们在黑板增加一个黑板键,命名为Dead
在这里插入图片描述
接下来,我们打开代码编辑器,在角色死亡时,将黑板键设置为true

void ARPGEnemy::Die()
{
	SetLifeSpan(LifeSpan);
	if(RPGAIController) RPGAIController->GetBlackboardComponent()->SetValueAsBool(FName("Dead"), true); //设置死亡,停止AI行为树
	Super::Die();
}

有了黑板键,我们在AI行为树中增加一个装饰器,用于判断后续逻辑是否需要执行
在这里插入图片描述

在设置这里,判断Dead黑板键,如果已被设置,将终止后续的所有逻辑操作
在这里插入图片描述

碰撞问题

关于碰撞,这里在设置一下,因为移动碰撞我们使用的角色基类内置的胶囊体组件。鼠标选中需要使用角色身上的碰撞进行查询,所以,我们将其设置了开,但是,因为身体时包裹在胶囊体组件里面,所以,我们不需要它触发和技能的检测,这个交给胶囊体组件即可。
所以,我们最终的设置为
胶囊体组件:需要开启重叠事件,用于接受投掷物的碰撞检测,检测响应关闭,用于防止被鼠标拾取到和阻挡相机将相机拉进,还有和火球的重叠需要设置为重叠
在这里插入图片描述
网格体碰撞:主要是为了能够被鼠标选中,让玩家攻击,所以,我们需要将碰撞设置为可以查询,并且将通道Visibility设置为阻挡
在这里插入图片描述
武器不需要碰撞,只用作展示,所以我们将其设置了没有碰撞
在这里插入图片描述

优化敌人的音效

现在我们敌人还没有移动声效,我们接下来增加敌人的脚步声,这个脚步声,我们直接在动画里面添加,这样混合空间进行混合移动时,就能够触发对应的音效。
我们打开移动文件,在动画脚落地的帧增加一个播放音效的通知
在这里插入图片描述
然后设置音效即可
在这里插入图片描述
接下来,我们设置一下战士攻击时的音效,由于攻击通常会从多个攻击音效中随机一个使用,这里设置里通用模版,从设置的数组中随机一个音频播放,并随机音高,输出的还是立体声。
在这里插入图片描述
设置立体声这里需要选择MetaSound设置
在这里插入图片描述
在细节这里设置输出格式
在这里插入图片描述
我们选择输入的变量
在这里插入图片描述
在细节这里添加音频
在这里插入图片描述
选择内容浏览器,打开一个新的资源管理器
在这里插入图片描述
打开目录
在这里插入图片描述
选中拖拽到数组中
在这里插入图片描述
打开攻击的蒙太奇,将音效添加进去
在这里插入图片描述

添加粒子特效

我们将实现角色冒血的特效,需要在每个角色身上设置,那么在角色基类上增加一个设置Niargra粒子特效的配置项。

	UPROPERTY(EditAnywhere, BlueprintReadOnly)
	UNiagaraSystem* BloodEffect; //受伤特效

然后我们在战斗接口增加一个获取受伤特效的函数,用于技能攻击时,集中目标角色后,可以通过目标角色的受伤特效显示。

	UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
	UNiagaraSystem* GetBloodEffect(); //获取角色的受伤特效

然后,我们在角色基础类里面覆写它

virtual UNiagaraSystem* GetBloodEffect_Implementation() override;

并在实现里返回配置项

UNiagaraSystem* ARPGCharacter::GetBloodEffect_Implementation()
{
	return BloodEffect;
}

设置和获取受伤特效的代码就完成了。后续我们可以在技能蓝图里面获取和设置。

然后,我们想给敌人技能增加集中声效,在技能设置的结构体里面增加一个音效设置

//蒙太奇动画和标签以及骨骼位置的映射,用于攻击技能获取和设置攻击范围
USTRUCT(BlueprintType)
struct FTaggedMontage
{
	GENERATED_BODY()

	//使用的蒙太奇
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	UAnimMontage* Montage = nullptr;

	//对应的标签
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	FGameplayTag MontageTag;

	//攻击时的触发伤害的骨骼插槽
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	FName CombatTipSocketName; //设置技能释放的位置
	
	//攻击时的触发音效
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	USoundBase* ImpactSound = nullptr;
};

编辑代码,打开UE,在敌人蓝图基类里面设置通用的受伤特效
在这里插入图片描述
接下来设置技能击中的音效,我们先创建一个混合音效
在这里插入图片描述
然后设置给技能
在这里插入图片描述
接下来在敌人的近战攻击中实现逻辑,我们首先增加一个局部变量,用于获取释放击中了敌人。
在这里插入图片描述
在触发技能时,设置为false,因为它对一个角色只存在一个,并且不会销毁,所以,我们要保证没有击中敌人时,这个值为false
在这里插入图片描述
然后在最后,应用伤害后面设置为true,代表已经击中了敌人
在这里插入图片描述
接下来,就是在角色身上播放一个击中特效
在这里插入图片描述
在数组角色循环完成后,如果布尔值变为了true,代表击中了敌人,那么,我们将播放一个音效,也就是技能击中的音效
在这里插入图片描述
然后运行查看是否实现了对应的效果
在这里插入图片描述

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-15 08:42:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-15 08:42:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-15 08:42:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-15 08:42:02       18 阅读

热门阅读

  1. Pod中使用自定义服务账号调用自定义资源

    2024-06-15 08:42:02       10 阅读
  2. 使用dockerfile能力构建制品并打包容器

    2024-06-15 08:42:02       7 阅读
  3. C# 泛型分析

    2024-06-15 08:42:02       9 阅读
  4. 找工作小项目:day15-macOS支持、完善逻辑

    2024-06-15 08:42:02       6 阅读
  5. 自动化机械臂喷涂生产线方案五

    2024-06-15 08:42:02       8 阅读
  6. AWD攻防比赛流程手册

    2024-06-15 08:42:02       7 阅读
  7. 公链常用的共识算法

    2024-06-15 08:42:02       8 阅读
  8. 探索 Spring Boot 集成缓存功能的最佳实践

    2024-06-15 08:42:02       8 阅读
  9. 第十三章:huggingface的resume训练源码内容

    2024-06-15 08:42:02       7 阅读
  10. 用python写一个企业知识库算法

    2024-06-15 08:42:02       8 阅读
  11. ADBMS1818驱动程序解析

    2024-06-15 08:42:02       7 阅读
  12. 浏览器无痕模式和非无痕模式的区别

    2024-06-15 08:42:02       6 阅读