Exemplo n.º 1
0
 private void OnRelease()
 {
     if (RefCount > 0)
     {
         RefCount--;
         if (RefCount <= 0)
         {
             //停止对这个AB的请求
             ABRequest.StopRequest(ABName);
             //停止这个对这个AB中资源的请求
             AssetRequest.StopRequest(ABName);
             //缓存列表中移除
             if (mResMap.ContainsKey(ResName))
             {
                 mResMap.Remove(ResName);
             }
             //释放这个AB的所有资源,从这个AB中加载的资源Asset都将变为"null"
             if (AB != null)
             {
                 AB.Unload(true);
                 AB = null;
             }
         }
     }
 }
Exemplo n.º 2
0
        protected override IEnumerator CoLoad(bool isSync, bool isAll, bool isPreLoad, Action <AssetLoadData> callback)
        {
            ABRequest.Load(this, isSync, AssetType);
            while (!ABRequest.IsComplete)
            {
                yield return(null);
            }

            OnCompleted(null, isPreLoad, callback);
        }
Exemplo n.º 3
0
        protected virtual IEnumerator CoLoad(bool isSync, bool isAll, bool isPreLoad, Action <AssetLoadData> callback)
        {
            ABDep = Get <HAssetBundle>(ABName, "", AssetType.eAB);

            //加载AB
            ABRequest.Load(ABDep, isSync, AssetType);
            while (!ABRequest.IsComplete)
            {
                yield return(null);
            }

            //加载Asset
            AssetRequest.Load(ABDep.AB, AssetName, isSync, isAll);
            while (!AssetRequest.IsComplete)
            {
                yield return(null);
            }

            //回调
            OnCompleted(AssetRequest, isPreLoad, callback);
        }
Exemplo n.º 4
0
        public void ReleaseAll()
        {
            List <HRes> resList = new List <HRes>();

            foreach (var item in HRes.mResMap)
            {
                resList.Add(item.Value);
            }

            //停止掉正在加载的AB
            ABRequest.StopAllRequest();
            //停止掉正在加载的AB中的资源
            AssetRequest.StopAllRequest();

            //释放AB资源
            for (int i = 0; i < resList.Count; i++)
            {
                resList[i].ReleaseAll();
            }

            HAssetBundle.ReleaseAssetBundleManifest();
        }
Exemplo n.º 5
0
    //真正地加载资源
    private void InnerLoadAssetBundle()
    {
        ABRequest abRequest = m_LoadList[0];

        string          name      = abRequest.name;
        Type            type      = abRequest.type;
        Action <object> callback  = abRequest.callback;
        Action <string> errorback = abRequest.errorback;

        name = name + GameConfig.AssetTail;                     //eg:ui/panel.unity3d
        Action <List <AssetBundle> > action = (depenceAssetBundles) => {
            string realName = GameConfig.GetPlatformPath(name); //eg:Windows/ui/panel.unity3d
            string path     = GameConfig.GetWWWReadPath(realName, false);
            LoadRes(path, (www) => {
                if (www.error != null)
                {
                    errorback(www.error);
                    return;
                }

                int index               = realName.LastIndexOf("/");
                string assetName        = realName.Substring(index + 1);
                assetName               = assetName.Replace(GameConfig.AssetTail, "");
                AssetBundle assetBundle = www.assetBundle;
                UnityEngine.Object obj  = assetBundle.LoadAsset(assetName, type); //LoadAsset(name),这个name没有后缀,eg:panel
                //卸载资源内存
                assetBundle.Unload(false);
                foreach (AssetBundle depenceAssetBundle in depenceAssetBundles)
                {
                    depenceAssetBundle.Unload(false);
                }
                //加载目标资源完成的回调
                callback(obj);
            });
        };

        LoadDependenceAssets(name, action, errorback);
    }
Exemplo n.º 6
0
 public HRes()
 {
     ABRequest    = new ABRequest();
     AssetRequest = new AssetRequest();
     AssetData    = new AssetLoadData();
 }