运行时资源替换(Runtime Asset Swapping)
你可以通过 CustomAssetLoaderCallback 在运行时替换 Rive 文件中的资源,实现动态皮肤/字体/音频切换。
加载入口
File.Load(Asset asset, CustomAssetLoaderCallback cb);
File.Load(TextAsset asset, CustomAssetLoaderCallback cb);
File.Load(byte[] bytes, CustomAssetLoaderCallback cb);
回调返回语义:
true:你已处理该资源false:交给默认加载逻辑
常见实现思路
- 在回调里识别
EmbeddedAssetReference类型 - 按资源类型调用对应 setter
- 保留引用以便后续再次替换
支持的 out-of-band 资产类型:
FontOutOfBandAssetImageOutOfBandAssetAudioOutOfBandAsset
对应引用类型:
FontEmbeddedAssetReferenceImageEmbeddedAssetReferenceAudioEmbeddedAssetReference
带 fallback 的加载重载
File.Load(..., fallbackToAssignedAssets: true):
当自定义回调未处理某资源时,运行时会尝试使用 Inspector 里绑定的默认引用资源。
内存管理建议
- 使用前先
Load()out-of-band 资源 - 不再需要时
Unload() - 文件结束时
Dispose()
动态创建 Out-of-Band 资源
若资源在构建时不存在(比如 CDN 下载),可用:
var img = OutOfBandAsset.Create<ImageOutOfBandAsset>(imageBytes);
字体和音频同理。
示例
官方示例工程的 Image Swapping 场景有完整演示。