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

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.xdnf.cn/news/16077.html

相关文章:

  • 让复杂 AI 应用构建就像搭积木:Spring AI Alibaba Graph 使用指南与源码解读
  • 企业级数据分析创新实战:基于表格交互与智能分析的双引擎架构
  • es0102---语法格式、数据类型、整合springboot、创建库、创建映射、新增数据、自定义查询
  • 【Qt开发】信号与槽(一)
  • node.js中的fs与path模块
  • 主流摄像头协议及其开源情况,GB/T 28181协议介绍
  • 云原生MySQL Operator开发实战(一):Operator基础与CRD设计
  • [语言模型训练]基于 PyTorch 的双向 LSTM 文本分类器实现:基于旅店的评论分类语言模型
  • Java_多线程_生产者消费者模型_互斥锁,阻塞队列
  • Java与NLP实战:文本处理到情感分析全解析
  • Ethereum: 从 1e+21 到千枚以太币:解密 Geth 控制台的余额查询
  • 适配器模式——以springboot为例
  • 《云计算蓝皮书 2025 》发布:云计算加速成为智能时代核心引擎
  • MySQL--day13--视图存储过程与函数
  • 垃圾回收GC
  • 【AI News | 20250722】每日AI进展
  • Java应用程序内存占用分析
  • 什么是HTTP长连接、短连接?谁更能抗DoS攻击?
  • 【数据库】国产数据库的新机遇:电科金仓以融合技术同步全球竞争
  • Python进阶知识之pandas库
  • 图论的题目整合(Dijkstra)
  • 欧盟网络安全标准草案EN 18031详解
  • ESP32-S3学习笔记<5>:SPI的应用
  • Redis 的事务机制是怎样的?
  • freqtrade在docker运行一个dryrun实例
  • UI自动化测试实战
  • mysql什么时候用char,varchar,text,longtext
  • odoo欧度小程序——添加用户
  • Fluent许可与硬件绑定的解决方法
  • Spring Data Redis 从入门到精通:原理与实战指南