跳到主要内容

运行时资源替换(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:交给默认加载逻辑

常见实现思路

  1. 在回调里识别 EmbeddedAssetReference 类型
  2. 按资源类型调用对应 setter
  3. 保留引用以便后续再次替换

支持的 out-of-band 资产类型:

  • FontOutOfBandAsset
  • ImageOutOfBandAsset
  • AudioOutOfBandAsset

对应引用类型:

  • FontEmbeddedAssetReference
  • ImageEmbeddedAssetReference
  • AudioEmbeddedAssetReference

带 fallback 的加载重载

File.Load(..., fallbackToAssignedAssets: true)

当自定义回调未处理某资源时,运行时会尝试使用 Inspector 里绑定的默认引用资源。

内存管理建议

  1. 使用前先 Load() out-of-band 资源
  2. 不再需要时 Unload()
  3. 文件结束时 Dispose()

动态创建 Out-of-Band 资源

若资源在构建时不存在(比如 CDN 下载),可用:

var img = OutOfBandAsset.Create<ImageOutOfBandAsset>(imageBytes);

字体和音频同理。

示例

官方示例工程的 Image Swapping 场景有完整演示。