当前位置:   article > 正文

Unity Addressables跨工程加载资源_unity inbalid path in assetbundleprovider

unity inbalid path in assetbundleprovider

Unity Addressables跨工程加载资源

工程配置

通过 输出工程 进行资源打包,然后在 加载工程 中进行跨工程资源加载。需要对两个工程进行以下设置:

  1. Assets/AddressableAssetsData/AddressableAssetSettings.asset 文件的 Catalog 栏目中,启用 Build Remote Catalog 选项,然后设置 Build PathLoad Path 属性,两个工程可以分别设置不同的 Build PathLoad Path 属性。这两个属性可以使用C#的内插字符串语法。
    “加载工程”的配置
    “输出工程”的配置
  2. 加载工程 中创建和 输出工程Load Path 属性值同名的文件夹,并将 输出工程 的打包输出文件复制到此文件夹中。如果文件夹路径不能完全匹配,在进行跨工程资源加载时将会报错:Exception encountered in operation Resource<IAssetBundleResource>(xxx.bundle): Invalid path in AssetBundleProvider: ‘xxx.bundle’.
    复制文件到同名文件夹

加载资源的代码

Catalog文件的路径是 Load Path 文件夹下处于最高层的那个 catalog*.json 文件的路径(子文件夹中也可能有 catalog*.json 文件)。

// 来自其他工程的Addressable资源的catalog*.json文件路径
var catalogPath = @"D:\UnityProjects\AddressablesTest\Mods\mod_01\catalog_2020.03.09.05.54.27.json";

// 加载catalog,并在加载完成事件回调中进行资源加载
Addressables.LoadContentCatalogAsync(catalogPath).Completed += (resLocatorAopHandler) =>
{
    // 要加载的资源
    var assetKey = "Assets/ModAssets/Prefabs/cube_01.prefab";

    // 可以直接进行全局查找并加载
    //Addressables.InstantiateAsync(assetKey);

    // 也可以只在本次加载的Catalog数据中查找并加载(理论上性能应该更好,没有见到相关文档)
    if (resLocatorAopHandler.Result.Locate(assetKey, typeof(GameObject), out var locations))
    {
        var resourceLocation = locations[0];
        Addressables.InstantiateAsync(resourceLocation);
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/102631
推荐阅读
相关标签
  

闽ICP备14008679号