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

阿赵UE引擎C++编程学习笔记——场景加载和切换

  大家好,我是阿赵。
  继续学习UE引擎,这次来学习一下切换和加载场景的各种做法。

一、 蓝图实现

1、 切换关卡

  所谓切换关卡,就是从当前关卡进入到一个新的关卡, 旧关卡的数据将会被放弃。进入新的关卡后,将会执行新关卡的关卡蓝图和GameMode的生命周期。
  在蓝图里面切换关卡,使用Open Level节点:
在这里插入图片描述

在这里插入图片描述

2、 加载关卡实例

  加载关卡和切换关卡不一样的地方是,原有的关卡并不会被卸载,而是把新的关卡直接加入到旧的关卡当中。然后生命周期还是走的原有关卡,新关卡只是用于加载资源。
  UE里面似乎没有像Unity引擎的DontDestroyOnLoad的处理,所以如果用Open Level切换关卡,旧关卡的资源和代码都会被卸载掉,然后如果有一些需要持续运行的东西,比如逻辑和背景音乐之类,也会被中断。
  所以我们可以保持一个一直存在的Level作为基础逻辑和资源,然后把需要的关卡通过关卡实例加载进来,不用的时候再卸载掉。
  加载关卡实例可以用节点Load Level Instance,可以通过对象引用或者名字来加载。名字就是Level本身的文件名,比如我这里要加载Level2场景,就直接填Level2就行。
在这里插入图片描述

在这里插入图片描述

  这个方法会返回是否加载成功,还有会返回加载后的Level对象,可以用于后续的控制:
在这里插入图片描述
在这里插入图片描述

  比如我要按一个按键来卸载这个Level,就可以拿到这个返回值,再获取Package FName,就可以卸载了:
在这里插入图片描述

3、 通过流读取关卡

  区别于上面第2种方法,通过StreamLevel来加载场景,必须先把场景设置到Level里面。这是因为,一个主关卡可以添加很多个子关卡,这些子关卡可以设置成并不是一开始就加载,而是有需要的时候才加载显示。而很多个子关卡组成一个大关卡,就能实现超大型地图场景了。
  接下来看看怎样添加子场景。比如我要把Level2场景作为Level1场景的子场景,那么我们应该打开Level1场景,然后再去窗口——>关卡,打开关卡面板:
在这里插入图片描述

  然后把Level2拖动到关卡面板
在这里插入图片描述

  然后把Level2的修改流送方法改成蓝图:
在这里插入图片描述

  设置好了之后,通过Load Stream Level节点,就可以加载子场景了。可以通过引用或者场景名称来加载。如果没有上面的设置,加载的时候会报错说找不到该名字的流场景。
在这里插入图片描述
在这里插入图片描述

  这里有个设置叫做Make Visible After Load,意思是在场景加载完的时候,是否需要显示出来,如果勾上,那么加载完成后,就自动显示了。
在这里插入图片描述

  如果想后面再显示场景的显示,可以这样:

  1. 通过GetStreamingLevel节点,可以找到刚才加载的StreamLevel
  2. 通过Set Should Be Visible节点,可以设置Level是否显示
  3. 如果想知道某个Level当前是否显示,可以用is Level Visible节点来查看
    在这里插入图片描述

所以就可以这样:
在这里插入图片描述

二、 C++实现

1、 切换关卡

和蓝图的OpenLevel节点相同,都是加载新场景放弃就场景,调用如下:
UGameplayStatics::OpenLevel(GetWorld(), “Level2”);

2、 通过StreamLevel加载

这个和蓝图的Load Stream Level节点功能基本一致,也是需要先去关卡面板把子场景添加好,才能正常加载:
加载

FString fileName = TEXT("Level2");
FLatentActionInfo info;
UGameplayStatics::LoadStreamLevel(GetWorld(), *fileName, true,false,info);

卸载

FLatentActionInfo info;
FString fileName = TEXT("Level2");
UGameplayStatics::UnloadStreamLevel(GetWorld(), *fileName, info, false);

控制

FString fileName = TEXT("Level2");
ULevelStreaming* curLevel = UGameplayStatics::GetStreamingLevel(GetWorld(), *fileName);
if (curLevel == nullptr)
{return;
}
bool isVisible = curLevel->IsLevelVisible();
curLevel->SetShouldBeVisible(not isVisible);

3、 按路径加载Level

如果不想先设置子Level,而直接按照路径加载某个场景资源,可以这样:
加载

ULevelStreamingDynamic* StreamingLevel;FString path = TEXT("/Game/Level/Level3");
FLatentActionInfo info;
StreamingLevel = NewObject<ULevelStreamingDynamic>(GWorld, ULevelStreamingDynamic::StaticClass(), NAME_None, RF_Public, NULL);
StreamingLevel->SetWorldAssetByPackageName(*path);
GetWorld()->AddStreamingLevel(StreamingLevel);
StreamingLevel->SetShouldBeLoaded(true);
StreamingLevel->SetShouldBeVisible(true);

控制和移除
需要自己保存之前加载的StreamingLevel,接下来可以控制该Level的显示隐藏或者卸载移除都可以

if (StreamingLevel != nullptr)
{
StreamingLevel->SetIsRequestingUnloadAndRemoval(true);
}

相关文章:

阿赵UE引擎C++编程学习笔记——场景加载和切换

大家好&#xff0c;我是阿赵。   继续学习UE引擎&#xff0c;这次来学习一下切换和加载场景的各种做法。 一、 蓝图实现 1、 切换关卡 所谓切换关卡&#xff0c;就是从当前关卡进入到一个新的关卡&#xff0c; 旧关卡的数据将会被放弃。进入新的关卡后&#xff0c;将会执行…...

【LLM之RAG】RAFT论文阅读笔记

研究背景 论文针对的主要问题是如何将预训练的大型语言模型&#xff08;LLMs&#xff09;适应特定领域的检索增强生成&#xff08;RAG&#xff09;。这些模型通常在广泛的文本数据上进行预训练&#xff0c;已经表现出在广义知识推理任务上的优越性能。然而&#xff0c;在特定领…...

【Android】使用Binder(AIDL)实现利用自定义Bean进行的进程间通信(二)

项目前置 这是我之前写的关于Binder的一些知识点和使用基本数据类型在通信的文章&#xff0c;感兴趣的可以看一下: Binder&#xff08;一&#xff09;Binder的介绍和AIDL使用Binder的实例 项目目标 在两个APP之间进行数据传递&#xff0c;使用Android推荐的Binder通讯&#…...

HTTP中get与post的区别?在传输数据类型上有什么区别?【面试】

HTTP中的GET和POST是两种最常见的请求方法&#xff0c;它们在数据传输和使用场景上有一些关键的区别&#xff1a; GET请求&#xff1a; 数据传输方式&#xff1a;GET请求将数据附加在URL之后&#xff0c;形成查询字符串&#xff08;namevalue的形式&#xff09;&#xff0c;数…...

「51媒体-年中大促」天津有哪些媒体资源-媒体宣传服务公司

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 天津的媒体资源相当丰富&#xff0c;涵盖了报纸、电视、广播、新闻门户网站、央媒驻天津机构、视频媒体以及全国媒体资源等多个方面。以下是详细的媒体资源分类和具体信息&#xff1a; 一…...

Thinkphp校园新闻发布系统源码 毕业设计项目实例

Thinkphp校园新闻发布系统源码 毕业设计项目实例 校园新闻发布系统模块&#xff1a; 用户模块&#xff1a;注册&#xff0c;登陆&#xff0c;查看个人信息&#xff0c;修改个人信息&#xff0c;站内搜索&#xff0c;新闻浏览等功能&#xff0c; 后台管理员模块&#xff1a;会员…...

前端老古董execCommand——操作 选中文本 样式

文章目录 ⭐前言⭐exe command api用法&#x1f496; example示例&#x1f496; 测试效果 ⭐execommand和getSelection 的联系⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于 前端老古董execCommand——操作选中文本。 execommand 当一个 HTML 文…...

elementui写一个自定义的rangeInput的组件

组件定义 使用el-row确保元素都在一行上对外暴露的prop是minValue和maxValue&#xff0c;但是不建议直接使用&#xff0c;使用计算属性minValueComputed和maxValueComputed更改计算属性的值的不要直接更改计算属性&#xff0c;也不要直接更改原本的prop&#xff0c;通知外层的父…...

护眼灯哪些牌子好?一文刨析护眼灯怎么选择!

护眼灯哪些牌子好&#xff1f;护眼台灯作为对抗视力挑战的一种方法&#xff0c;逐渐赢得了众多家长的青睐。这些台灯利用尖端光学技术&#xff0c;发出柔和且无刺激的照明&#xff0c;有助于保护眼睛不受伤害。它们不但可以调节亮度和色温&#xff0c;打造一个舒适且自然的阅读…...

抖音短剧看剧系统是怎么做的?怎么样搭建上线运营?

前言&#xff1a; 当前热门短剧已深入大家的日常&#xff0c;针对一些好的短剧更是吸金无数。今天给大家介绍一下短剧这个项目整个运作模式。 一、一部短剧是怎么样呈现到观众眼前的&#xff1f; 首先影视作品公司拍摄剪辑好短剧 &#xff0c;弄好一切审核后&#xff0c;放到…...

2024.06.06校招 实习 内推 面经

绿*泡*泡VX&#xff1a; neituijunsir 交流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 追觅科技2025届校园招聘/正式启动&#xff01; 校招 | 追觅科技2025届校园招聘正式启动&#xff01; 2、校招&实习&社招 | 博世海外招聘—德国/专场正式启动&#xff0…...

神经网络模型---ResNet

一、ResNet 1.导入包 import tensorflow as tf from tensorflow.keras import layers, models, datasets, optimizersoptimizers是用于更新模型参数以最小化损失函数的算法 2.加载数据集、归一化、转为独热编码的内容一致 3.增加颜色通道 train_images train_images[...,…...

Linux之网络编程

Linux之网络编程 TCP协议 TCP(Transmission ControlProtocol) : 传输控制协议&#xff0c;是一个 面向连接的、可靠的、基于字节流的传输层的协议。TCP 协议建立的是一种点到点的&#xff0c;一对一的可靠连接协议 特点&#xff1a; 数据无丢失数据无失序数据无错误数据无重…...

opencascade AIS_InteractiveContext源码学习1

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…...

TIA博途 WinCC下载到面板时,提示错误消息:“装载过程终止由于传输错误:8020AB001A06FFF4!”的解决办法

TIA博途 WinCC下载到面板时,提示错误消息:“装载过程终止由于传输错误:8020AB001A06FFF4!”的解决办法 这个错误信息是由于缺少设备镜像无法下载到操作面板而导致的。 当使用 TIA V15.1 Update 4 和 Update 5 组态 TP1000F Mobile 时,请遵守特别注意事项。 问题 在编译一个…...

【MySQL】聊聊数据库是如何保证数据不丢的

对于一个存储系统来说&#xff0c;其中比较关键的核心组件包含&#xff0c;网络、存储模型、持久化、数据结构等。而数据如何保证不丢失&#xff0c;对于不同的存储系统来说&#xff0c;比如Redis采用AOF和RDB的方式进行混合使用&#xff0c;而MySQL采用日志进行保证。也就是re…...

GitLab教程(四):分支(branch)和合并(merge)

文章目录 1.分支&#xff08;branch&#xff09;&#xff08;1&#xff09;分支的概念&#xff08;2&#xff09;branch命令 2.合并&#xff08;merge&#xff09;&#xff08;1&#xff09;三个命令pullfetchmergegit fetchgit mergegit pull &#xff08;2&#xff09;合并冲…...

2021数学建模A题目–“FAST”主动反射面的形状调节

A 题——“FAST”主动反射面的形状调节 思路&#xff1a;该题主要是通过利用伸缩杆调整FAST反射面&#xff0c;给出合适的调整方案 程序获取 第一题问题思路与结果&#xff1a; 当待观测天体S位于基准球面正上方&#xff0c;结合考虑反射面板调节因素&#xff0c;确定理想抛物…...

华为---- RIP路由协议基本配置

08、RIP 8.1 RIP路由协议基本配置 8.1.1 原理概述 RIP(Routing Information Protocol,路由协议)作为最早的距离矢量IP路由协议&#xff0c;也是最先得到广泛使用的一种路由协议&#xff0c;采用了Bellman-Ford算法&#xff0c;其最大的特点就是配置简单。 RIP协议要求网络中…...

Android studio在Ubuntu桌面上 创建桌面图标,以及导航栏图标

Android studio在Ubuntu桌面上 创建桌面图标&#xff0c;以及导航栏图标 1. 下载Android studio for Lunux 免安装版本之后&#xff0c;解压 2. 通过控制台运行 ~/Documents/android-studio-2024.1.1.2-linux/android-studio/bin$ ./studio.sh 3. 选择菜单&#xff0c;Tools…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟

2025年4月29日&#xff0c;在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上&#xff0c;可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞&#xff0c;强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...

WEB3全栈开发——面试专业技能点P7前端与链上集成

一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染&#xff08;SSR&#xff09;与静态网站生成&#xff08;SSG&#xff09; 框架&#xff0c;由 Vercel 开发。它简化了构建生产级 React 应用的过程&#xff0c;并内置了很多特性&#xff1a; ✅ 文件系…...

Tauri2学习笔记

教程地址&#xff1a;https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引&#xff1a;https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多&#xff0c;我按照Tauri1的教程来学习&…...

FTXUI::Dom 模块

DOM 模块定义了分层的 FTXUI::Element 树&#xff0c;可用于构建复杂的终端界面&#xff0c;支持响应终端尺寸变化。 namespace ftxui {...// 定义文档 定义布局盒子 Element document vbox({// 设置文本 设置加粗 设置文本颜色text("The window") | bold | color(…...