ue4 通过指定路径加载资源_Aery的UE4 C++游戏开发之旅(4)加载资源&创建对象

[toc]

在UE4中,项目中的所有资源都是存储在硬盘中,当需要用到资源时,则需要将其加载进入内存中使用。为了更好的表示(引用)资源,UE4提供了两种引用资源的方式——硬引用、软引用。

资源的硬引用

硬性引用,即对象 A 引用对象 B,并导致对象 B 在对象 A 加载时加载。通俗点说,硬引用所表示的资源在引用初始化时就加载进内存,因此硬引用的资源几乎不需要加载方法。

硬指针

引用资源的最简单方法是创建指针UProperty并为它指定一个类别,这种称为硬指针。 在UE4中,如果有一个硬UObject指针属性引用了一个资源(往往在蓝图上设置引用),则加载包含这个属性的对象(放在贴图中,或者从gameinfo等引用)时,就会加载这个资源。

UPROPERTY(EditDefaultsOnly, Category=Building)

USoundCue* ConstructionStartStinger;

FObjectFinder / FClassFinder

若需要用C++代码而非蓝图来设置引用,则往往需要FObjectFinder、FClassFinder。

#include "UObject/ConstructorHelpers.h" \\需要include的头文件

在UE4源码里面,FObjectFinder构造函数里通过调用LoadObject()来加载资源,而FClassFinder构造函数里调用的也是LoadObject()。

注意在使用它们的时候还得遵守如下规则:

只能在类的构造函数中使用,如果在普通的逻辑代码中嵌套这份代码,会引起整个编译器的crash。(实际上里面代码就有检查是否在构造函数里,否则crash)

其次,FObjectFinder/FClassFinder变量必须是static的,从而保证只有一份资源实例。

FObjectFinder:一般用来加载非蓝图资源,比如StaticMesh、Material、SoundWave、ParticlesSystem、AnimSequence、SkeletalMesh等资源:

static ConstructorHelpers::FObjectFinder ObjectFinder(TEXT("Texture2D'/Game/Textures/tex1.tex1'"));

UTexture2D* Texture2D = ObjectFinder.Object;

FClassFinder:一般用来加载蓝图资源并获取蓝图Class。这是因为如果C++要用蓝图创建对象,必须先获取蓝图的Class,然后再通过Class生成蓝图对象:

static Constructor

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值