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

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

 

 

 

 

 

 

相关文章:

  • UE4 Rendering Dependency Graph
  • 分析 UObjecBaseUtility
  • 解析PAK文件
  • UE4资源热更打包工具HotPatcher
  • Unity游戏资源逆向工具
  • UE4 Pak 文件格式
  • 更新UnrealPakViewer工具
  • UE4中Taglib使用及插件制作
  • UE4编辑器扩展踩坑血泪史
  • require函数
  • UE4 给static mesh 动态添加Socket
  • UE4 角色用Child Actor组建添加装备 这样方便随时添加,更换套装等行为
  • Unity Assets目录下的特殊文件夹名称
  • Unity-ShaderVariantCollection
  • Unity渲染教程(九):复杂材质 https://www.jianshu.com/p/5e3af869870f
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • Android开源项目规范总结
  • Babel配置的不完全指南
  • conda常用的命令
  • Elasticsearch 参考指南(升级前重新索引)
  • js面向对象
  • log4j2输出到kafka
  • React Transition Group -- Transition 组件
  • zookeeper系列(七)实战分布式命名服务
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 大数据与云计算学习:数据分析(二)
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 记一次用 NodeJs 实现模拟登录的思路
  • 蓝海存储开关机注意事项总结
  • 删除表内多余的重复数据
  • 微服务入门【系列视频课程】
  • 由插件封装引出的一丢丢思考
  • 智能合约开发环境搭建及Hello World合约
  • linux 淘宝开源监控工具tsar
  • 阿里云服务器如何修改远程端口?
  • 阿里云重庆大学大数据训练营落地分享
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • #pragam once 和 #ifndef 预编译头
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (11)MSP430F5529 定时器B
  • (C++17) std算法之执行策略 execution
  • (C语言)球球大作战
  • (ibm)Java 语言的 XPath API
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (转) Android中ViewStub组件使用
  • (转)Linux下编译安装log4cxx
  • (转)Scala的“=”符号简介
  • (转)菜鸟学数据库(三)——存储过程
  • (转)使用VMware vSphere标准交换机设置网络连接
  • *** 2003
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .net core Swagger 过滤部分Api