独立游戏《星尘异变》UE5 C++程序开发日志7——实现加载界面

news2024/9/21 19:00:29

       

目录

一、创建自定义AssetManager类

二、异步加载资产

三、加载界面UI的实现

1.UI布局

2.在打开关卡前和进入关卡后创建UI并统计进度


        有时可能会遇到关卡已经进去但依然会卡顿一段时间的情况,所以我们需要在进入关卡后,玩家可以操作关卡之前,对关卡内的资产和一些重要的资产进行加载,同时为了尽可能加载完全进行一些伪加载,加载界面效果如下:

一、创建自定义AssetManager类

        在编辑器中创建一个c++类,选择AssetManager为父类,下面那个类就是我们已经创建好的类

然后在项目设置->引擎->一般设置->默认类->高级 中将资产管理器类改成我们刚才生成的c++类

此类是可以被静态获取的:

//.h中的声明
UFUNCTION(BlueprintPure,BlueprintCallable,Category="AssetLoader")
static UAstromutateAssetManager* GetAstromutateAssetManager();

//.cpp中实现
UAstromutateAssetManager* UAstromutateAssetManager::GetAstromutateAssetManager()
{
	auto Temp{Cast<UAstromutateAssetManager>(GEngine->AssetManager)};
	if(Temp)
	{
		return Temp;
	}
	UE_LOG(LogTemp,Error,TEXT("GetAssetManager failed"));
	return NewObject<UAstromutateAssetManager>();
}

二、异步加载资产

        首先,我们声明动态委托,用于在有资产加载完成后统计加载进度:

DECLARE_DYNAMIC_DELEGATE(FAssetLoaded);

        然后是加载资产的函数,传入资产路径和触发的事件,因为事件是在UI蓝图里实现的,资产路径是纯净路径,也就是没有单引号,没有后缀点的路径

void UAstromutateAssetManager::LoadLevelAsset( FSoftObjectPath LevelName, FAssetLoaded AssetLoadedEvent)
{
    //检查路径是否合法
	if(!LevelName.IsValid())
	{
		UE_LOG(LogTemp,Error,TEXT("LoadLevel failed,invalid name:%s"),*LevelName.ToString())
	}
	UE_LOG(LogTemp,Warning,TEXT("LoadingLevel:%s"),*LevelName.ToString());
    //虚幻提供的异步加载函数,具体原理尚待研究
	LoadPackageAsync(CurrentLoadingPackage,FLoadPackageAsyncDelegate::CreateLambda([=](const FName&PackageName,UPackage* LoadedPackage,EAsyncLoadingResult::Type Result)
	{
        //加载成功
		if(Result==EAsyncLoadingResult::Succeeded)
		{
			UE_LOG(LogTemp,Warning,TEXT("LoadLevelAsset successed"));
			AssetLoadedEvent.ExecuteIfBound();
		}
	}),0,PKG_ContainsMap);
}

三、加载界面UI的实现

1.UI布局

        作为变量的就是开始游戏的按钮和进度条:

2.在打开关卡前和进入关卡后创建UI并统计进度

        首先将开始游戏按钮隐藏,然后我们从游戏实例中获取当前是新游戏还是在加载存档,然后如果要加载的存档的索引是-2,该UI就是打开关卡后的UI,是-1的话该UI是进入关卡前的UI且是新游戏,否则就是要加载的存档的索引。

        对于进入关卡前的UI,我们先延迟一秒,做一个伪加载,然后开始异步加载所有要加载的资产,同时每加载好一个就令当前进度+1,全部加载好之后将进度推进到0.5,然后根据是否是新游戏,具体执行读档或者直接打开关卡,无论是哪个,打开关卡后都会再次创建一个新的该UI。

        然后对于进入关卡后的UI,我们设置一个定时器每秒统计一下进度

        下面是更新进度的函数,BP_EventManager是关卡中负责执行读档函数的Actor,在玩家pawn、HUD、Controller的BeginPlay执行完毕后,都会反馈给该Actor,这里我们每次进入这个函数只检查其中一个是否加载完成,也是为了延长加载时间做的伪加载,其中Controller加载好之后就可以先把游戏暂停了,因为我们游戏是有失败进度累计的,在最后检查完存档数据全部加载完成后或者是新游戏再继续游戏,同时显示开始游戏按钮,玩家可以点击按钮关闭UI进入关卡:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1935672.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RAG技术进化史:从初级到高级,再到模块化RAG架构的创新发展

大型语言模型&#xff08;LLMs&#xff09;通过在自然语言任务及其它领域的成功应用&#xff0c;如 ChatGPT、Bard、Claude 等所示&#xff0c;已经彻底改变了 AI 领域。这些 LLMs 能够生成从创意写作到复杂代码的文本。然而&#xff0c;LLMs 面临着幻觉、过时知识和不透明、无…

Codeforces Round 672 (Div. 2) C1. Pokémon Army (easy version) (DP)

不知道能不能用贪心&#xff0c;反正我是没看出来&#xff0c;所以用DP求解。 首先分析一下题意&#xff0c;我们要在一段序列中取出一段子序列&#xff0c;然后让这段子序列按顺序逐个先加后减最终得到的结果最大。 如果要用DP&#xff0c;那么我们首先就要思考怎么表示状态…

心好累,早点睡!永远不要提前焦虑——早读(逆天打工人爬取热门微信文章解读)

你们遇到心烦的事&#xff0c;会怎么排解呢&#xff1f; 引言Python 代码第一篇 洞见 永远不要提前焦虑第二篇 故事来源于生活结尾 引言 这两天天气都是阴雨 雨时而大 时而小 就是下个不停 老天还算给面子 上班路上总是细雨或者无雨 昨天晚上回来 山地车的前轮有些送动 马上发…

C++从入门到起飞之——this指针 全方位剖析!

个人主页&#xff1a;秋风起&#xff0c;再归来~ C从入门到起飞 个人格言&#xff1a;悟已往之不谏&#xff0c;知来者犹可追 克心守己&#xff0c;律己则安&#xff01; 目录 1、this指针 2、C和C语⾔实现Stack对⽐ C实现Stack代码 C实现Stack代…

深度挖掘行情接口:股票市场中的关键金融数据API接口解析

在股票市场里&#xff0c;存在若干常见的股票行情数据接口&#xff0c;每一种接口皆具备独特的功能与用途。以下为一些常见的金融数据 API 接口&#xff0c;其涵盖了广泛的金融数据内容&#xff0c;其中就包含股票行情数据&#xff1a; 实时行情接口 实时行情接口&#xff1a…

光耦合器技术的实际应用

光耦合器也称为光隔离器&#xff0c;是现代电子产品中的关键组件&#xff0c;可确保电路不同部分之间的信号完整性和隔离。它们使用光来传输电信号&#xff0c;提供电气隔离和抗噪性。 结构和功能 光耦合器通常由以下部分组成&#xff1a; 1.LED&#xff08;发光二极管&#…

Bone Collector-动态规划题解

Bone Collector Problem - 2602 (hdu.edu.cn)https://acm.hdu.edu.cn/showproblem.php?pid2602 Problem Description Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’…

Ubuntu18 中JDK的安装

文章目录 一、背景说明二、获取安装包三、安装JDK3.1 上传安装包3.2 复制和解压3.3 环境变量的设置3.4 验证安装 四、问题列表4.1 .bashrc文件在哪里&#xff1f;.bashrc是什么&#xff1f;4.2 为什么使用rz上传安装包时会报&#xff1a; 传输失败&#xff1f; 五、总结 一、背…

SpringBoot项目中将word转换为pdf

需求&#xff0c;用户将用户上传的word文件转换成为pdf格式&#xff0c;然后返回 第一步&#xff1a;引入依赖 <dependency><groupId>aspose</groupId><artifactId>aspose-words</artifactId><version>15.8.0-jdk16</version></…

走进标杆 | 宁波市领导一行至金鸡强磁开展专项调研活动

为深入了解supOS助力宁波打造数实融合标杆城市的实践成果&#xff0c;日前&#xff0c;宁波市领导和专家共赴蓝卓supOS标杆项目——宁波金鸡强磁股份有限公司&#xff08;以下简称“金鸡强磁”&#xff09;调研考察&#xff0c;蓝卓总经理助理杨明明、浙江大区副总经理章来胜等…

力扣3202:找出有效子序列的最大长度||

class Solution { public:int maximumLength(vector<int>& nums, int k) {int res0;for(int m0;m<k;m){//假设子序列两数%k之后的结果为m 相当于枚举vector<int> v(k,0);for(auto num:nums){v[num%k]v[(m-num%kk)%k]1; //知道m之后可以知道需要的子序列当前…

做外贸如何高效跟进转化客户

做外贸业务&#xff0c;基本上每天要做的几个事情&#xff0c;开发客户、跟进转化客户、维护客户等等&#xff0c;经常也有外贸新手朋友问我&#xff0c;遇到什么什么客户要怎么跟进&#xff0c;客户不回复怎么办等等&#xff0c;今天就来跟大家聊聊客户跟进转化这块的一些问题…

通俗易懂讲解电池的主要性能参数(下)

接上期内容&#xff0c;上次主要分享影响电池性能评估的两个主要性能参数&#xff1a;电池容量和电池功率。可以点击这里回顾&#xff1a;一起学习电池的主要性能参数和测试方法 今日接着分享电池性能评估的另外两个主要性能参数&#xff1a;电池的使用寿命和自放电率。 上期…

react 快速入门思维导图

在掌握了react中一下的几个步骤和语法&#xff0c;基本上就可以熟练的使用react了。 1、组件的使用。react创建组件主要是类组件和函数式组件&#xff0c;类组件有生命周期&#xff0c;而函数式组件没有。 2、jsx语法。react主要使用jsx语法&#xff0c;需要使用babel和webpa…

SSM 整合(Spring + MyBatis;Spring + Spring MVC)

1. SSM 整合(Spring MyBatis&#xff1b;Spring Spring MVC) 文章目录 1. SSM 整合(Spring MyBatis&#xff1b;Spring Spring MVC)2. 引入相关依赖3. SSM 整合3.1 创建包结构 4. Spring 整合 MyBatis4.1 编写 jdbc.properties4.2 编写 DataSourceConfig 数据源配置4.3 编…

样式布局学习:盒模型浮动FlexboxGrid Layout定位(Positioning响应式布局(Responsive Layout):

看视频确实更容易理解&#xff0c;但是花费时间有点长了&#xff0c;以下是一些官方文档网址&#xff08;可切换中文&#xff09;&#xff0c;也算是节省时间了&#xff1a; 在前端开发中&#xff0c;布局样式是非常重要的一部分&#xff0c;它决定了页面中元素的位置和排列方…

wps office 2019 Pro Plus 集成序列号Vba安装版教程

前言 wps office 2019专业增强版含无云版是一款非常方便的办公软件&#xff0c;我们在日常的工作中总会碰到需要使用WPS的时候&#xff0c;它能为我们提供更好的文档编写帮助我们更好的去阅读PDF等多种格式的文档&#xff0c;使用起来非常的快捷方便。使用某银行专业增强版制作…

snmp++操作之trap

文章目录 snmp六种操作简述Get&#xff08;获取操作&#xff09;&#xff1a;Get Next&#xff08;获取下一个操作&#xff09;&#xff1a;Get Bulk&#xff08;批量获取操作&#xff09;&#xff1a;Set&#xff08;设置操作&#xff09;&#xff1a;Inform&#xff08;通知操…

数据建模标准-面向对象建模

前情提要 数据模型定义 DAMA数据治理体系中将数据模型定义为一种文档形式&#xff0c;数据模型是用来将数据需求从业务传递到IT,以及在IT内部从分析师、建模师和架构师到数据库设计人员和开发人员的主要媒介&#xff1b; 作用 记录数据需求和建模过程中产生的数据定义&…

任意空间平面点云旋转投影至水平面—罗德里格旋转公式

1、背景介绍 将三维空间中位于任意平面上的点云数据&#xff0c;通过一系列的坐标变换&#xff08;平移旋转&#xff09;&#xff0c;使其投影到XOY平面上&#xff0c;同时保证点云的几何中心与XOY平面的原点重合&#xff0c;同时点云形状保持不变。具体效果如下&#xff0c;具…