UE5 关卡显示与存档功能

A、思路

1、最早的设想是在GM、FBC里用变量存储关卡数等进度,但发现不靠谱,

退出游戏,重新测试时,进度就没了。

或即便不退出游戏,刚开始正常,切换界面后就混乱了,各种错误。

2、尝试了很多方法,最终还是回归存档功能,这个最靠谱。

因为存档是可以储存到本地硬盘里的,需要时读档,这就确保了数据的安全性,不是临时的。

3、主要思路是关卡相关BP在初始时传参数到FBC,

FBC初始时读档或建档,确保进度是以往储存过的,

FBC的tick里监控GM里的重要布尔值判断,触发改变Save里的参数,以及存盘。

然后关卡相关BP根据Save里的参数,决定是否显示。

/难点在于要通过FBC来向SAVE实施储存行为,很绕。

UE的很多功能都是把简单问题复杂化,在魔兽3的WE等编辑器里很多功能太傻瓜了,而UE里就要很费劲的才能实现。这种复杂化类似CCG的WE,优点是自定义空间大,上限高,缺点是流程复杂,门槛高,一开始能把人绕晕。

B、参考图

### UE5 中运行时切换关卡而保持蓝图不变 在 Unreal Engine 5 (UE5) 中实现在运行时切换关卡而不改变蓝图的关键在于利用 Level Streaming 技术以及合理管理游戏状态和资源加载。通过这种方式可以确保不同关卡之间的过渡平滑流畅,同时维持一致的游戏逻辑。 #### 利用 Level Streaming 实现无缝地图切换 为了达到不修改现有蓝图的情况下进行关卡切换的效果,推荐采用动态载入机制——即 Level Streaming 功能[^1]。此功能允许开发者指定哪些部分的地图应该随着玩家接近特定区域自动加载或卸载,从而实现所谓的“流式传输”。这不仅有助于优化性能,还能让多个子级别组合成一个看似连续的世界环境。 当设计者希望保留当前场景内的对象及其属性(如角色的生命值、魔法值等),则需考虑持久化存储方案,在每次进入新关前将重要数据保存至磁盘文件或其他形式的外部储存介质中;待重新读取该关卡时再恢复这些参数[^4]。具体做法如下: - **保存关键信息**:每当准备离开某个关卡之前,先调用函数把必要的变量写入配置文件或者数据库内。 - **读取并应用已存档的数据**:到达目标地点后立即执行初始化过程,从先前记录的地方提取所需资料,并将其赋给对应的实体实例。 此外,对于那些需要展示加载进度条或者其他提示性的 UI 组件的情况,则可以通过定制化的 GameInstance 类来处理这类需求[^2]。这样做的好处是可以集中管理和调整全局范围内的交互行为,而且不会干扰到其他模块的工作流程。 最后值得注意的是,如果涉及到复杂的动画效果或是定时触发的动作序列,时间轴节点会是非常有用的工具之一[^3]。它能够帮助精确控制各种视觉表现的时间节奏,使得整个转换过程更加自然和谐。 ```cpp // C++ 示例代码片段用于说明如何编程方式开启新的关卡 void AMyGameMode::ChangeLevel(FName NewLevelName) { UWorld* World = GetWorld(); if (!ensure(World)) return; // 开始异步加载下一个关卡 FLatentActionInfo LatentInfo; LatentInfo.CallbackTarget = this; LatentInfo.ExecutionFunction = TEXT("OnNewLevelLoaded"); LatentInfo.Linkage = 0; LatentInfo.UUID = FGuid::NewGuid(); UKismetSystemLibrary::LoadStreamLevel(this, NewLevelName, true, false, LatentInfo); } void AMyGameMode::OnNewLevelLoaded() { // 完成后的回调函数,这里可以根据实际情况做更多事情 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值