UE4引用资源小结

UE4引用资源小结

https://zhuanlan.zhihu.com/p/64485997

引用资源

1. Hard reference: A引用了B 所以A加载B也会被加载

2. Soft reference: A引用了B的路径 A加载只有B的路径(字符串)被加载

Hard Reference

直接资源引用

这个是最常见的引用。

一句话: 在类中暴露一个UPROPERTY变量可以让别人编辑或者指定资源。

构造时引用

即通过ConstructorHelpers在A的构造函数中加载B

ConstructorHelpers先在RAM中查找资源,找不到就加载

UPROPERTY()
class B* x;
A::A(const FObjectInitializen& ObjectInitializer) : Super(ObjectInitializer)
{
    static ConstructorHelpers::FObjectFinder<B> b(TEXT("path_to_asset"));

    x = b.Object;
}

Soft Renference

间接资源引用(lazy load)

与直接引用对应,间接引用不存放资源本身而是存放字符串和资源模板(TSoftObjectPtr)。 IsPending()可以检查是否准备好。 用这种方式我们必须手动加载资源(LoadObject, StaticLoadObject, FStreamingManager)。注意同步加载过多可能造成卡顿。

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

和TSoftObjectPtr对应的还有TSoftClassPtr.

runtime层动态加载

如果资源已经加载完毕: FindObject<>()

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

A* a = FindObject<A>(Outer, *Name);
b = LoadObject<B>(nullptr, TEXT("asset_path"), nullptr, LOAD_None, nullptr);

 

编辑于 2019-05-02

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值