当前位置: 首页 > news >正文

RPG64.制作敌人攻击波数四:优化

1。优化:当前处于最后一波袭击时,在生成敌人前倒计时结束后,会显示最后一波袭击的提示。

为此,我们需要知道倒计时的总动画长度,并以此为延迟生成最后一波袭击的ui提示。

所以我们需要计算两个动画的总时长,稍作调整

然后打开BP_SurvialGamemode

在枚举的第二个引脚后设置

2。添加难度设置,根据gamamode的不同难度,将会对玩家的技能等级和属性等级、敌人的技能等级和属性等级造成不一样的影响。

打开WarriorEnumTypes.添加难度枚举

UENUM(BlueprintType)
enum class EXMBGameDifficulty : uint8
{Easy,Normal,Hard,VeryHard
};

然后打开XMBGameModeBase

public://FORCEINLINE EXMBGameDifficulty GetCurrentGameDifficulty() const { return CurrentGameDifficulty; }protected:UPROPERTY(EditDefaultsOnly,BlueprintReadOnly,Category = "Game Settings")EXMBGameDifficulty CurrentGameDifficulty;

然后再WarriorPlayer.cpp的PossessedBy函数内,这个函数式对玩家的属性和技能进行等级定义,所以要根据难度来设置定义的等级。

void AWarriorPlayer::PossessedBy(AController* NewController)
{Super::PossessedBy(NewController);//if (!CharacterStartUpData.IsNull()){//使用同步加载的方式尝试加载数据if (UDataAsset_PlayerStartUpData* LoadedData = Cast<UDataAsset_PlayerStartUpData>(CharacterStartUpData.LoadSynchronous())){//根据游戏难度设置等级int32 AbilityApplyLevel = 1;if (AXMBGameModeBase* BaseGameMode = GetWorld()->GetAuthGameMode<AXMBGameModeBase>()){switch (BaseGameMode->GetCurrentGameDifficulty()){case EXMBGameDifficulty::Easy:AbilityApplyLevel = 4;break;case EXMBGameDifficulty::Normal:AbilityApplyLevel = 3;break;case EXMBGameDifficulty::Hard:AbilityApplyLevel = 2;break;case EXMBGameDifficulty::VeryHard:AbilityApplyLevel = 1;break;default:break;}}LoadedData->GiveToAbilitySystemComponent(XMBAbilitySystemComponent,AbilityApplyLevel);}}
}

在EnemyBase.cpp的InitEnemyStartUpData函数内

void AEnemyBase::InitEnemyStartUpData()
{if (CharacterStartUpData.IsNull()){return;}//根据游戏难度设置等级int32 AbilityApplyLevel = 1;if (AXMBGameModeBase* BaseGameMode = GetWorld()->GetAuthGameMode<AXMBGameModeBase>()){switch (BaseGameMode->GetCurrentGameDifficulty()){case EXMBGameDifficulty::Easy:AbilityApplyLevel = 1;break;case EXMBGameDifficulty::Normal:AbilityApplyLevel = 2;break;case EXMBGameDifficulty::Hard:AbilityApplyLevel = 3;break;case EXMBGameDifficulty::VeryHard:AbilityApplyLevel = 4;break;default:break;}}//使用异步加载资产UAssetManager::GetStreamableManager().RequestAsyncLoad(CharacterStartUpData.ToSoftObjectPath(),// 将 TSoftObjectPtr 转换为 FSoftObjectPath,供异步加载系统使用FStreamableDelegate::CreateLambda([this,AbilityApplyLevel	](){if (UDataAsset_EnemyStartUpData* LoadedData = Cast<UDataAsset_EnemyStartUpData>(CharacterStartUpData.Get())){// 将加载的数据传递给能力系统组件LoadedData->GiveToAbilitySystemComponent(XMBAbilitySystemComponent,AbilityApplyLevel);}}));
}

启动项目后,在BaseGamemode内进行设置,运行时输入debugabilitysystem将进行查看属性内容是否对得上。

http://www.lryc.cn/news/598185.html

相关文章:

  • vue 项目中 components 和 views 包下的组件功能区别对比,示例演示
  • vue递归树形结构删除不符合数据 生成一个新数组
  • 基于深度学习的图像分类:使用MobileNet实现高效分类
  • 【SpringAI实战】提示词工程实现哄哄模拟器
  • MCNN-BiLSTM-Attention分类预测模型等!
  • 模型量化方式及分类
  • OpenAI最新大模型GPT-4o体验之Code Copilot AI编程大模型
  • 边缘智能体:轻量化部署与离线运行
  • 高可用架构模式——如何应对接口级的故障
  • node.js中的fs与path模块
  • Unity 多人游戏框架学习系列十
  • 贪心算法Day6学习心得
  • 苹果带火的3D高斯泼溅产品化玩法:一个成熟产品参考——以DJI Terra为例解析空间智能产品的商业化路径
  • ML3072 MQTT连接阿里云
  • 企业资产管理智能化:IT运维如何借力数字化管理提效避坑?
  • 计算机网络-- TCP 滑动窗口与拥塞控制
  • 亚马逊云科技:引领云计算新时代,开启无限可能
  • JavaSE:学习输入输出编写简单的程序
  • 【Unity开发】飞机大战项目实现总结
  • DigitalOcean 一键模型部署,新增支持百度开源大模型ERNIE 4.5 21B
  • Socket编程入门:从IP到端口全解析
  • element-plus 组件 ElMessage、ElLoading 弹框 和加载css 样式展示异常总结
  • SQL基础⑫ | 视图篇
  • 若用dnf下载的nginx和源文件下载的nginx冲突
  • 【学习路线】JavaScript全栈开发攻略:前端到后端的完整征程
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现卫星图像识别(C#代码,UI界面版)
  • 20-ospf技术
  • Java Map.Entry 核心解析
  • IPSec VPN -- 野蛮模式
  • OSPF开放式最短路径优先