Unity Addressables跨工程加載資源

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);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章