ue 资源引用和加载

Unreal C++ 资源加载 (UE4C++) 在虚幻冲处理资源分为:类资源和非类资源。 资产加载到内存中,需要通过引用完成。 引用分两种:硬性引用,软性引用。 1.硬性引用:即对象A引用对象B,并导致对象B在对象A加载时加载。 2.软性引用:既对象A通过间接机制来引用对象B。 什么是引用? 答:对于资产在内存当中的存储的一种操作方式。 硬性引用写法: .h头文件 UPROPERTY(EditDefaultsOnly) UClass * 变量名; .cpp文件 GetWorld()->GetWorld()->SpawnActor(变量名) 阅读详情

TSoftObjectPtr

IsValid() true 说明在内存中可以直接 调用Get()方法 或者指针

如果IsValid() = false  就需要资源加载,有异步加载和同步加载

以下是案例

		auto Iter = ShouldLoadSkills.CreateConstIterator();
		FStreamableManager& Manager = UAssetManager::GetStreamableManager();
		for (; Iter; ++Iter)
		{
			FString ContextString;
			FName EnumName = UCustomFuncLib_ForWobbo::EnumToFNameCus(TEXT("EWobboSkills"), Iter->Value);
			if(FSkillStruct* TablePtr = SkillTable->FindRow<FSkillStruct>(EnumName, ContextString))
			{
				auto Load = [this, Iter](FSoftObjectPath Path) {
					TSoftObjectPtr PathPtr(Path);
					if (USkillDataBase_ForWobbo* SkillParam = Cast<USkillDataBase_ForWobbo>(PathPtr.Get()))
					{
						if (!SkillRecordMap.Contains(Iter->Key))
						{
							SkillRecordMap.Emplace(Iter->Key, SkillParam);
							BroadCastCD(0, 0, true);
						}
					}
				};
				const FStreamableDelegate& SD = FStreamableDelegate::CreateLambda(Load, TablePtr->SkillPath);
				Manager.RequestAsyncLoad(TablePtr->SkillPath, SD);
			}
		}
		FStreamableManager& Manager = UAssetManager::GetStreamableManager();
		auto Load = [this](FSoftClassPath Path) {
			TSoftClassPtr PathPtr(Path);
			PMClass = PathPtr.Get();
		};
		const FStreamableDelegate& SD = FStreamableDelegate::CreateLambda(Load, PoseMeshPath);
		Manager.RequestAsyncLoad(PoseMeshPath, SD);
	Handler = UAssetManager::Get().LoadAssetList(PreloadPaths, FStreamableDelegate::CreateLambda([=]()
	{
		for (FSoftObjectPath Path : PreloadPaths)
		{
			if(UObject* Load = Path.TryLoad())
			{
				PreLoadAudio.Preload.Add(Load);

				UE_LOG(LogTemp, Log, TEXT("UAudioAsset::Preload. Asset=%s"), *Load->GetName());
			}	
		}
		
	}));

 

------------------------------------------------------------------

FSoftObjectPath,FSoftClassPath,FSoftObjectPtr,TSoftObjectPtr,TSoftClassPtr ,TSubclassOf 

以上都是软引用,不会直接把资源加载到内存中

同步加载和异步加载

同步加载方法:

LoadClass 

// Load a class object.
template< class T > 
inline UClass* LoadClass( UObject* Outer, const TCHAR* Name, const TCHAR* Filename=nullptr, uint32 LoadFlags=LOAD_None, UPackageMap* Sandbox=nullptr )
{
	return StaticLoadClass( T::StaticClass(), Outer, Name, Filename, LoadFlags, Sandbox );
}

LoadObject

// Load an object.
template< class T > 
inline T* LoadObject( UObject* Outer, const TCHAR* Name, const TCHAR* Filename=nullptr, uint32 LoadFlags=LOAD_None, UPackageMap* Sandbox=nullptr )
{
	return (T*)StaticLoadObject( T::StaticClass(), Outer, Name, Filename, LoadFlags, Sandbox );
}

  FStreamableManager的同步加载和异步加载

RequestSyncLoad  同步加载

RequestAsyncLoad 异步加载

---------------------------------------------------------------------------------------------------------------

分类:

hard reference    and  soft   reference

hard reference

1、直接资源引用

比如A类中有此变量

这种写法别人可以在蓝图中直接指定资源。然后在生成A对象的时候直接加载Material资源

2、构造时创建资源

在A类的构造函数中用ConstructorHelpers加载资源。

(ConstructorHelpers先在内存中查找,没有就加载)

UPROPERTY()
class C* x;
MyClass::MyClass(const FObcjectInitializen& ObjectInitializer) : SuCper(ObjectInitializer)
{
    static ConstructorHelpers::FObjectFinder<C> c(TEXT("assetPath"));

    x = c.Object;
}

soft reference

1、间接资源引用,通过存放资源路径或者资源模板(TSoftObjectPtr),来引用资源。而不是直接存放资源指针。IsPending()方法来判断该资源是否准备好可供访问。

需要手动加载才能用,加载方法有(LoadObject, StaticLoadObject, FStreamingManager),同样也分同步加载和异步加载,一次性同步加载过多资源会引起同帧卡顿。

TSoftClassPtr.同理。

UPROPERTY()
TSoftObjectPtr<B> b;
B* func()
{
    if (b.IsPending()) {
        const FSoftObjectPath& AssetRef = b.ToStringReference();
        b = Cast<B>(Streamble.SynchronousLoad(AssetRef));
    }
    return b.Get();
}

2、runtime时候加载

以上三种方法都是基于UPROPERTY()

如果A类对象已经创建完了,这个时候再加载资源就是runtime动态加载。

如果已经在内存中,通过FindObject<>()方法获得资源。

如果资源还没加载: LoadObject<>()

不过LoadObject内部已经有了FindObject。

ue4 通过指定路径加载资源_UE4 异步资源加载 概述虚幻引擎4中有几个新系统,使得可以更加轻松地异步加载资源数据,这些系统代替了虚幻引擎3中的免搜索内容包中存在的很多功能。这些新方法既可以在开发数据应用也可以在设备上的烘焙数据上进行应用,所以您不必保留两个根据需要加载数据的代码路径。有两种通用的方法可以供您根据需要来引用及加载数据。FStringAssetReferences 和TAssetPtr美术师或设计师引用资源的最简单的方法是,创建一个... 阅读详情

相关推荐

虚幻C++入门个人笔记(2)——标记宏、结构体枚举、资源加载、代理

类UCLASS、成员属性UPROPERTY、成员函数UFUNCTION蓝图和C++的交互。

hoppingg的博客 2924

UE4/5 中的TSoftObjectPtr<>、TSoftClassPtr<>和TSubclassOf<>

在蓝图的Actor变量类型中,有4中对象引用分别创建这4个对象,然后拖到事件图标中,就可以知道它们有什么区别对象引用:指一个对象实例的引用,硬引用。类引用:指一个对象类型的引用,可自定义选择类对象,硬引用。软对象引用:可自定义选择对象实例的引用,软引用。软类引用:可自定义选择类对象类型,软引用。

weixin_41130251的博客 6243

虚幻4随笔6 Object和序列化

 诚如之前所说,虚幻4主要的一些特性都是由UObject穿针引线在一起的,想把虚幻玩到比较深的程度,UObject是迟早要面对、回避不得的问题,所以,准备在其它主题之前,先把UObject好好弄一下。UObject主要完成了哪些工作呢?私以为:   反射系统   UObject体系构建了整个虚幻反射系统的核心,每个UObject都来自于一个UClass,这个Class可以是Un

noslopforever [天堂里的死神] 1万+

《UE4游戏开发》之 《TSoftObjectPtr引用资源并使用的陷阱》

错误使用例子: //该if条件永远为false if (anim_info->PreviewBorn && anim_info->PreviewBorn.IsValid()) { AnimSeq.PreviewBorn = Cast<UAnimSequenceBase>(anim_info->PreviewBorn.LoadSynchronous()); } else { AnimSeq.PreviewBorn = AnimSeq.Born; } //该.

qq_21919621的博客 4050

基于PLC1200与CB1241的RS485从站Modbus Rtu通信实战指南

本文提供了一份详细的西门子S7-1200 PLC与CB1241 RS485通讯板实现Modbus RTU从站通信的实战指南。内容涵盖从硬件接线、博途软件组态、关键参数设置到程序调试与测试的全过程,重点解析了Modbus_Slave指令配置与数据块映射,帮助工程师快速掌握工业自动化系统中的数据采集与设备接入技术。

Apple的专栏 777

睿尔曼复合机器人之底盘操作流程

控制键”按下后,可在键盘上通过‘i’(向前),‘k’(向后),‘j’(向左旋转),‘l’(向右旋转)四个按键对底盘进行运动控制。选中禁⾏线功能后,使⽤⿏标在界⾯内点击选择起点,继续在其他地⽅点击,两点之间会连成⼀条线,可以进⾏多次连续点击,形成连续线条。4)扫图完成后,软件会重新启动,返回到监控页面,点击“激光”可看到当前机器激光扫描的实时数据,在页面上表现为红色边界线,点击菜单栏“控制”键使底盘在一定范围内运动,扫描到尽可能多的边界线,可发现与实际地图的黑色边界线不同,需要进行手动校正。

realman_Rop的博客 1464

UE5中TSoftObjectPtr的使用详解

在UE5中,是一种重要的资源管理工具,它允许开发者以“软引用”的方式引用资源(如纹理、模型、蓝图等),而不会强制资源立即加载到内存中。这种机制特别适用于需要动态加载资源的场景,例如开放世界中的流送系统或按需加载资源。是UE5中实现资源动态加载的核心工具之一,合理使用可显著优化内存占用和启动时间。结合AsyncLoad和,能够高效管理大规模资源,特别适合开放世界、动态内容加载等场景。

m0_45371381的博客 2131

Windows下Python安装geopandas全攻略:解决GDAL依赖问题的5个关键步骤

本文详细解析了在Windows系统下安装Python地理空间分析库geopandas时,如何有效解决其核心依赖GDAL的编译难题。文章提供了五个关键步骤,包括理解依赖关系、获取预编译wheel文件、顺序安装及环境验证,旨在帮助用户绕过复杂的C++编译环境,顺利完成geopandas的安装部署。

weixin_28221501的博客 278

【UE5】TSoftObjectPtr的使用

TSoftObjectPtr的使用

daq233622的博客 751

模仿学习与强化学习结合(IL+RL)有没有代表性论文?未来发展趋势如何?

IL与RL的结合正成为AI研究热点,尤其在机器人控制、复杂博弈等需要边学边练的场景。经典方法如Dagger(2010)和GAIL(2016)开创了先用模仿学习预热、再用强化学习微调的模式。近期工作如IN-RIL(2024)提出交替训练策略,显著提升样本效率。开源项目RoboSchool和StableBaselines3为相关研究提供支持。未来趋势包括:1)混合式智能体结合人类经验与自主探索;2)突破小样本学习、自然语言交互等方向;3)提升安全性、样本效率和可解释性。

CyberSoma的博客 2242

Vivado IP核调参大师:高效配置RS编码器的避坑指南

本文深入解析Vivado中RS编码器IP核的高效配置方法,涵盖符号宽度选择、码长优化和AXI4-Stream接口控制等关键参数。重点指导如何避开常见陷阱,实现FPGA设计中的资源优化与性能平衡,提升RS编码在通信系统中的可靠性。

metaverse5vr的博客 218

UE5里的TObjectPtr TSharedPtr TWeakPtr TSoftObjectPtr 有什么区别

指针类型生命周期管理用途场景使用限制 」TObjectPtrUE 的垃圾回收(GC)系统管理UObject 相关类型(如 Actor、Component)只能用于 UObject 或其子类。TSharedPtr共享所有权,引用计数多个对象共享非-UObject 数据不适用于 UObject 类型。TWeakPtr无所有权,避免循环引用想访问但不拥有对象的场景必须配合 TSharedPtr 使用。

现在学习也不晚 4312

基于截图详解:SAP GUI for Java 如何设置登录链接,以及 conn= 连接字符串该怎么写

摘要:SAP GUI for Java 的连接属性配置关键是在"高级"页签的"conn="后填写连接字符串。连接字符串格式取决于网络拓扑:直连应用服务器使用"/H/主机/S/端口";通过消息服务器负载均衡使用"/M/消息服务器/S/端口/G/组名";经SAProuter访问则需添加路由器前缀。配置时需注意专家模式会覆盖其他页签设置,且连接字符串还支持附加参数如客户端、语言和默认事务码。具体填写内容应根据Basis团队提供的系统信

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 233

【虚幻引擎】UE4 同步和异步资源加载(软引用)

UE4/UE5异步加载资源

qq_43021038的博客 7186

组态王的日历时间控件脚本

日期时间控件中的脚本中在小于10的月份和天数前必须要加上0,这是由首字符对比机制规定的,首字母相同,就不再不做对比了,比如1和11,是一样的。首字母不同,再比较下一位。 float Ayear1; float Amonth1; float Aday1; string temp1; Ayear1=sd.Year; Amonth1=sd.Month; Aday1=sd.Day; temp1=StrFromInt( Ayear1, 10 ); if(Amonth1<10) temp1=temp1+"-0"+

逍遥子的博客 5714

Go语言Gin框架项目:从零到一搭建一个用户管理系统

本文介绍了一个基于Go语言Gin框架开发的用户管理系统。系统采用MySQL数据库存储数据,使用Bootstrap 5构建现代化UI界面,实现了完整的CRUD功能。主要特点包括:RESTful API设计、前后端双重表单验证、实时搜索功能、SQL防注入措施以及响应式布局。项目结构清晰,包含数据库配置、用户模型、处理器和前端模板等模块。系统提供用户列表展示、新增/编辑表单、删除确认等功能,通过参数化查询确保安全性,并支持按姓名或邮箱搜索用户。

数据知道的博客 3978

虚幻引擎基础入门(C++) — 【资源加载 08】

本文仅仅简单介绍了虚幻引擎中资源加载的使用

子枫 1378

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

虚幻学习笔记22—C++同步和异步加载

之前提到的静态和动态加载都是同步的加载,同时其中的引用基本都是硬引用。如果资源比较大的话会出现卡顿的现象,下面将介绍一种异步加载的方式。同时,还将介绍一种区别与之前的Load的方法。在说明同步和异步加载之前需要先讲一下虚幻引擎的引用路径的问题,虚幻中的资源和类的引用包含软引用和硬引用,硬引用即对象A引用对象B,那么加载对象A的时候会自动加载对象B。软引用,即对象A通过间接机制(一般是字符串形式的路径)来引用对象B,不会在A加载时加载B。静态和动态加载3.1、软引用和硬引用的区别。

Just do IT 1994

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

虚幻的软引用和硬引用

虚幻引擎 4提供了许多种机制来控制引用资源的方式并通过扩展将其装入内存。这些引用分为两种方式:硬性引用,即对象 A 引用对象 B,并导致对象 B 在对象 A 加载时加载;软性引用,即对象 A 通过间接机制(例如字符串形式的对象路径)来引用对象 B。

2301_79910723的博客 775

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

虚幻引擎项目清理终极指南:ProjectCleaner让资产管理更高效

在虚幻引擎开发过程中,随着项目规模不断扩大,**无用资源清理**和**空文件夹管理**成为了每个开发者必须面对的挑战。ProjectCleaner作为一款专业的虚幻引擎插件,提供了一套完整的解决方案,让项目资产管理变得简单高效。🚀 ## 🔍 为什么需要项目清理工具? 大型虚幻引擎项目中往往积累了大量无用资源: - 未引用的材质、纹理、静态网格体 - 损坏的资产文件 - 间接引用但未被直接使

gitblog_00983的博客 441

虚幻4 String2Asset String2Class String2Object

虚幻4 资源引用 异步加载 通过字符串加载资源

虚幻4引擎工作室 1290

UE4 异步资源加载

On this page: 概述FStringAssetReferences 和TAssetPtr资源注册表和对象库StreamableManager(动态加载管理器)和异步加载 概述 虚幻引擎4中有几个新系统,使得可以更加轻松地异步加载资源数据,这些系统代替了虚幻引擎3中的免搜索内容包中存在的很多功能。这些新方法既可以在开发数据应用也可以在设备上的烘焙数据上进行应用,所以您

痞子龙3D编程 1万+

虚幻引擎资产管理总结

介绍了虚幻引擎对资产的管理,手动管理游戏需要的资产,资源的加载和释放,资产引用关系以及打包游戏资产的设置等。

UWA—简单优化,优化简单! 2379

UE5 C++(22-1):静态加载类和资源,资源的路径复制与引用复制(用这个),模板类 ConstructorHelpers::FObjectFinder<R>用来加载资源。

(125)(126)

zhangzhangkeji的博客 180
上一篇: UE4 小知识 ScrollBox 子项是Button 点击事件 不能滑动
下一篇: ue5 UCharacterMovementComponent
[苦行僧]
博客等级 码龄23年 117粉丝 118原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值