Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 资源已经卸载了 移除加载记录
 /// </summary>
 internal static void RemoveAssetBundleAssetRecord(LoadAssetBundleAssetRecord assetRecord)
 {
     if (assetRecord == null)
     {
         return;
     }
     //    mAllLoadResourcesAssetRecords.Remove(assetRecord.mAssetFullUri);
     assetRecord.ReleaseLoadAssetRecord();
 }
Ejemplo n.º 3
0
        /// <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));
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
        /// <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);
        }
Ejemplo n.º 6
0
        /// <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);
            });
        }