Ejemplo n.º 1
0
 // 从AssetBundle中加载资源
 public void LoadAssetFromBundle(LoaderGroup group, string path, string name, Type type,
                                 GroupLoadedCallback onLoaded,
                                 bool async            = true, bool persistent = false,
                                 LoadPriority priority = LoadPriority.Normal)
 {
     path = path.ToLower();
     LoadAssetBundle(group, path, (group1, data) => {
         AssetBundleInfo cache = data as AssetBundleInfo;
         LoadBundleAsset(group1, cache, name, type, onLoaded, async);
     }, async, persistent, true, priority);
 }
Ejemplo n.º 2
0
        // ------------------------------------------------------------------------------------------
        // 从AssetBundle里加载资源
        private void LoadBundleAsset(LoaderGroup group, AssetBundleInfo info, string name, Type type,
                                     GroupLoadedCallback onLoaded,
                                     bool async = true, LoadPriority priority = LoadPriority.Normal)
        {
            if (info == null || string.IsNullOrEmpty(name))
            {
                if (onLoaded != null)
                {
                    onLoaded(group, null);
                }

                return;
            }

            if (!async)
            {
                // 同步,直接加载
                //Logger.Log(string.Format("-->LoadBundleAsset: {0}", name));

                Object asset = info.LoadAsset(name, type);
                if (onLoaded != null)
                {
                    onLoaded(group, asset);
                }
            }
            else
            {
                // 异步,创建一个加载器后加载
                BundleAssetLoadParam param = new BundleAssetLoadParam {
                    Bundle = info.Bundle,
                    Type   = type
                };

                m_task.AddLoadTask(group, Loader.LoaderType.BundleAsset, name, param, (group1, data1) => {
                    // 加载回调
                    if (onLoaded != null)
                    {
                        onLoaded(group1, data1);
                    }
                }, true, priority, true);
            }
        }
Ejemplo n.º 3
0
        // 加载AssetBundle(先从persistentData读,没有找到则从streamingAssets读,带后缀)
        private void LoadAssetBundle(LoaderGroup group, string path, GroupLoadedCallback onLoaded,
                                     bool async            = true, bool persistent = false, bool manifest = true,
                                     LoadPriority priority = LoadPriority.Normal)
        {
            path = path.ToLower();

            if (async && group == null)
            {
                group = m_task.PopGroup(priority);
            }

            if (manifest)
            {
                if (!HasBundle(path))
                {
                    // Manifest里没有这个AssetBundle,说明是一个错误的路径
                    Logger.LogError(string.Format("ab不存在:{0}", path));
                    if (onLoaded != null)
                    {
                        if (!async)
                        {
                            onLoaded(group, null);
                        }
                        else
                        {
                            m_task.AddAsyncCallback(onLoaded, group, null);
                        }
                    }

                    return;
                }

                // 加载依赖
                LoadDependencies(group, path, async, persistent);
            }

            // 检查是否有缓存
            if (m_cache.CheckAssetBundleInfo(group, path, onLoaded, persistent, async))
            {
                return;
            }

            // 添加加载任务
            m_task.AddLoadTask(group, Loader.LoaderType.Bundle, path, null, (group1, data) => {
                AssetBundle ab       = data as AssetBundle;
                AssetBundleInfo info = null;

                if (ab != null)
                {
                    info = m_cache.SetAssetBundle(path, ab);
#if UNITY_EDITOR
                    RefreshShader(ab);
#endif
                }

                // 加载回调
                if (onLoaded != null)
                {
                    onLoaded(group1, info);
                }
            }, async, priority);
        }