虚幻的软引用和硬引用

引用介绍

虚幻引擎 4提供了许多种机制来控制引用资源的方式并通过扩展将其装入内存。这些引用分为两种方式:

硬性引用,即对象 A 引用对象 B,并导致对象 B 在对象 A 加载时加载;

软性引用,即对象 A 通过间接机制(例如字符串形式的对象路径)来引用对象 B。

硬引用

直接属性引用

直接属性引用,这是最常见的资源引用情况,并通过 UPROPERTY 宏公开。您的游戏类会公开一个 UPROPERTY,后者允许设计人员通过蓝图继承对原型指定特定资源,或通过放在环境中的实例来指定该资源

UPROPERTY(VisibleAnywhere)
	UStaticMeshComponent* body; 

UPROPERTY(VisibleAnywhere)
	class UPhysicsThrusterComponent* upThrusterComp;

构造时属性引用

您将会遇到的第二类硬性引用是程序员知道需要为给定属性加载的确切资源,并在对象的构造中设置该属性。这项任务是使用特殊类 ConstructorHelpers 完成的,这个类在构造阶段查找某个对象的对象和类。

ConStructorHelpers::FObjectFinder<T>一般用来加载非蓝图资源

ConStructorHelpers::FObjectFinder<T>一般用来加载蓝图资源并获取蓝图Class

FObjectFinder和FClassFinder构造函数一般都是调用LoadObject()

auto paddleMesh = ConstructorHelpers::FObjectFinder<UStaticMesh>
(TEXT("StaticMesh'/Game/Demo_Drone/SM/paddle.paddle'"));

static ConstructorHelpers::FClassFinder<AActor> 
BPClassFinder(TEXT("Blueprint'/Game/CPPFunction/Load/BP_MyActor'"));

TSubClassOf与UClass

TSubclassOf 与 UClass 类似,但 TSubclassOf 是安全类型,同时具有筛选功能

UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
TSoftClassPtr<AActor> ClassSoftPtr;

软引用

对象 A 通过间接机制(例如字符串形式的对象路径)来引用对象 B

软引用可以减少加载负担,可以缩短程序启动时间
软引用不会主动加载到内存中,在需要时加载,用完释放

FSoftObjectPath 

FSoftObjectPath 是一个简单的结构体,其中有一个字符串包含资源的完整名称。

UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
FSoftObjectPath ObjectSoftRef;

UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta = (AllowedClasses = "SkeletalMesh,StaticMesh"))
FSoftObjectPath MeshSoftRef;

FSoftClassPath

FSoftClassPath继承自FSoftObjectPath,用于储存一个类型的软引用,专门用于对 UClass* 的软引用

UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "SoftObjectClass")
	FSoftClassPath SoftClassPath;

UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "SoftObjectClass", meta = ( MetaClass= "Pawn"))
	FSoftClassPath SoftClassPath_Pawn;

TSoftObjectPtr<T>

TSoftObjectPtr<T>基本上是包含了FSoftObjectPath的TWeakObjectPtr,是智能指针的一种

TSoftObjectPtr与蓝图中的SoftObjectReference是一回事

FSoftObjectPtr的模板化,内部逻辑是基于FSoftObjectPtr的二次封装,可用UProperties公开给蓝图

UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
TSoftClassPtr<AActor> ClassSoftPtr;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值