7 - 软引用与懒加载

本文将简要介绍蓝图编程中有关软引用和资源懒加载的话题,它们通常被用于性能优化。

背景

在蓝图编程中,一些SFX资源可能只会在某些时候才使用。我们通常使用对象引用使用它,这导致在一开始这些资源就会被加载进内存中,造成不必要的内存消耗。因此可以使用对象软引用进行资源的懒加载,避免内存占用过大问题。

软引用与懒加载

软引用如下图所示,这是一个Niagara粒子系统的软引用:

要想使用它得先进行资源的加载,资源加载和使用的流程如下图所示:

其中,软引用经过Resolve节点解析为对象引用,然后供其他节点使用,如果解析失败,说明该软引用指向的资源还未被加载,需要进行资源加载;如果解析成功,说明该软引用指向的资源已被加载,可以正常使用。对于资源加载有两种实现方法,红框中的是非异步懒加载方法,如果资源过大会导致游戏出现卡顿现象;蓝框中的则是异步懒加载方法,它只能在事件蓝图中使用,具体定义如下:

通过Async Load Asset节点实现资源的异步懒加载,此时可以用输出执行引脚进行后续操作,等资源加载完成时会执行Completed执行引脚。这里则是等待资源加载完成后生成粒子特效。

通过使用对象软引用进行资源的懒加载,可以有效避免不必要的内存占用,是高级性能优化技巧之一(还有纹理压缩等)。

参考资料

  • Course: Unreal Engine 5 Blueprints - The Ultimate Developer Course | Udemy