/// <summary> /// 同步加载AssetBundle 方法(优先从缓存中读取) /// </summary> /// <param name="assetFullUri">资源相对于Resouces 完整的路径</param> public static ILoadAssetRecord AssetBundleLoadAssetSync(string assetFullUri, string assetBundleNameUri, string assetBundleDirectoryUri, string assetRelativeUri) { LoadAssetBundleAssetRecord assetRecord = LoadAssetBundleSubAssetFromCache(assetFullUri); if (assetRecord != null && assetRecord.IsRecordEnable) { return(assetRecord); } if (string.IsNullOrEmpty(assetRelativeUri)) { // Debug.LogError($"AssetBundleLoadAssetSync Fail,assetRelativeUri Is Null {assetFullUri} "); return(null); } var assetBundleRecordInfor = LoadAssetBundleRecordSync(assetBundleNameUri, assetBundleDirectoryUri); if (assetBundleRecordInfor != null) { Object asset = assetBundleRecordInfor.LoadAsset <Object>(assetRelativeUri); if (asset != null) { assetRecord = LoadAssetBundleAssetRecord.GetLoadAssetBundleAssetRecord(assetFullUri, assetBundleRecordInfor, assetRelativeUri, asset); s_AllLoadedAssetBundleSubAssetRecord[assetFullUri] = assetRecord; return(assetRecord); } } return(null); }
/// <summary> /// 资源已经卸载了 移除加载记录 /// </summary> internal static void RemoveAssetBundleAssetRecord(LoadAssetBundleAssetRecord assetRecord) { if (assetRecord == null) { return; } // mAllLoadResourcesAssetRecords.Remove(assetRecord.mAssetFullUri); assetRecord.ReleaseLoadAssetRecord(); }
/// <summary> /// 同步加载AssetBundle 方法(优先从缓存中读取) /// </summary> /// /// <param name="assetFullUri">资源相对于Resouces 完整的路径</param> public static ILoadAssetRecord AssetBundleLoadAssetSync(string assetFullUri) { LoadAssetBundleAssetRecord assetRecord = LoadAssetBundleSubAssetFromCache(assetFullUri); if (assetRecord != null && assetRecord.IsRecordEnable) { return(assetRecord); } GetBundleNameByAssetPath(assetFullUri, out var assetBundleNameUri, out var assetBundleDirectoryUri, out var assetRelativeUri); return(AssetBundleLoadAssetSync(assetFullUri, assetBundleNameUri, assetBundleDirectoryUri, assetRelativeUri)); }
/// <summary> /// 异步加载AssetBundle 方法(优先从缓存中读取) /// </summary> public static void AssetBundleLoadAssetAsync(string assetFullUri, Action <ILoadAssetRecord> loadCallback) { LoadAssetBundleAssetRecord assetRecord = LoadAssetBundleSubAssetFromCache(assetFullUri); if (assetRecord != null && assetRecord.IsRecordEnable) { loadCallback?.Invoke(assetRecord); return; } GetBundleNameByAssetPath(assetFullUri, out var assetBundleNameUri, out var assetBundleRelativeUri, out var assetRelativeUri); AssetBundleLoadAssetAsync(assetFullUri, assetBundleNameUri, assetBundleRelativeUri, assetRelativeUri, loadCallback); }
/// <summary>/// 加载缓存的 子资源 /// <param name="assetFullUri">资源相对于Resources的完整路径</param> private static LoadAssetBundleAssetRecord LoadAssetBundleSubAssetFromCache(string assetFullUri) { if (s_AllLoadedAssetBundleSubAssetRecord.TryGetValue(assetFullUri, out var record)) { if (record == null || record.IsRecordEnable == false) { s_AllLoadedAssetBundleSubAssetRecord.Remove(assetFullUri); LoadAssetBundleAssetRecord.ReleaseAssetBundleRecordInfor(record); return(null); } return(record); } return(null); }
/// <summary> /// 异步加载AssetBundle 方法(优先从缓存中读取) /// </summary> public static void AssetBundleLoadAssetAsync(string assetFullUri, string assetBundleNameUri, string assetBundleDirectoryUri, string assetRelativeUri, Action <ILoadAssetRecord> loadCallback) { LoadAssetBundleAssetRecord assetRecord = LoadAssetBundleSubAssetFromCache(assetFullUri); if (assetRecord != null && assetRecord.IsRecordEnable) { loadCallback?.Invoke(assetRecord); return; } if (string.IsNullOrEmpty(assetRelativeUri)) { Debug.LogError($"AssetBundleLoadAssetAsync Fail, 加载的资源 {assetFullUri} 为null"); loadCallback?.Invoke(null); return; } LoadAssetBundleRecordAsync(assetBundleNameUri, assetBundleDirectoryUri, (assetBundleInfor) => { if (assetBundleInfor != null) { Object asset = assetBundleInfor.LoadAsset <Object>(assetRelativeUri); if (asset != null) { assetRecord = LoadAssetBundleAssetRecord.GetLoadAssetBundleAssetRecord(assetFullUri, assetBundleInfor, assetRelativeUri, asset); s_AllLoadedAssetBundleSubAssetRecord[assetFullUri] = assetRecord; loadCallback?.Invoke(assetRecord); return; } } Debug.LogError($"AssetBundleLoadAssetAsync Fail,assetFullUri={assetFullUri} "); loadCallback?.Invoke(null); }); }