コード例 #1
0
    void LoadObjectFromBundle(string bundleName, string resName, LoadObjectCallBack callback)
    {
        if (loadedHelper.ContainsKey(bundleName))
        {
            IABRelationManager relation = loadedHelper[bundleName];
            Object             tempObj  = relation.GetSingleResource(resName);

            //缓存 tempObj
            AssetObj assetObj = new AssetObj(tempObj);

            if (!loadObjs.ContainsKey(bundleName))
            {
                AssetResObj tmpRes = new AssetResObj(resName, assetObj);
                loadObjs.Add(bundleName, tmpRes);
            }
            else
            {
                AssetResObj resObj = loadObjs[bundleName];
                resObj.AddResObj(resName, assetObj);
            }

            if (null != callback)
            {
                callback(tempObj);
            }
        }
        else
        {
            if (null != callback)
            {
                callback(null);
            }
        }
    }
コード例 #2
0
 //表示已经加载过bundle
 public Object GetSingleResource(string bundleName, string resName)
 {
     if (loadObj.ContainsKey(bundleName))
     {
         AssetResObj   tmpRes = loadObj[bundleName];
         List <Object> tmpObj = tmpRes.GetResObj(resName);
         if (tmpObj != null)
         {
             return(tmpObj[0]);
         }
     }
     if (loadHelper.ContainsKey(bundleName))
     {
         IABRelationManager loader      = loadHelper[bundleName];
         Object             tmpObj      = loader.GetSingleResource(resName);
         AssetObj           tmpAssetObj = new AssetObj(tmpObj);
         //缓存里面是否已经有了这个包
         if (loadObj.ContainsKey(bundleName))
         {
             AssetResObj tmpRes = loadObj[bundleName];
             tmpRes.AddResObj(resName, tmpAssetObj);
         }
         else
         {
             //没有加载过这个包
             AssetResObj tmpRes = new AssetResObj(resName, tmpAssetObj);
             loadObj.Add(bundleName, tmpRes);
         }
         return(tmpObj);
     }
     else
     {
         return(null);
     }
 }
コード例 #3
0
    //加载一个具体资源时,先从loadObjs中找,如果没有的话再从loadedHelper中找,再没有的话再根据AssetBundle名字和地址用WWW下载
    public void LoadSingleObject(string bundleName, string resName, LoadObjectCallBack callback)
    {
        //表示是否已近缓存了物体
        if (loadObjs.ContainsKey(bundleName))
        {
            AssetResObj tmpRes = loadObjs[bundleName];
            Object      tmpObj = tmpRes.GetAssetObj(resName);
            if (null != tmpObj)
            {
                callback(tmpObj);
                return;
            }
        }

        //表示bundle已经加载过
        if (loadedHelper.ContainsKey(bundleName))
        {
            LoadObjectFromBundle(bundleName, resName, callback);
        }
        else
        {
            StartCoroutine(LoadAssetBundle(bundleName, (tmpBundleName) =>
            {
                LoadObjectFromBundle(bundleName, resName, callback);
            }));
        }
    }
コード例 #4
0
    public UnityEngine.Object[] GetMultiResources(string bundleName, string resName)
    {
        //表示是否已经缓存了
        if (loadObj.ContainsKey(bundleName))
        {
            AssetResObj   tmpRes = loadObj[bundleName];
            List <Object> tmpObj = tmpRes.GetResObj(resName);
            if (tmpObj != null)
            {
                return(tmpObj.ToArray());
            }
        }

        //表示已经加载过bundle
        if (loadHelper.ContainsKey(bundleName))
        {
            IABRelationManager loader = loadHelper[bundleName];
            Object[]           tmpObj = loader.GetMultiResource(resName);

            //放入缓存
            AssetObj tmpAssetObj = new AssetObj(tmpObj);
            if (loadObj.ContainsKey(bundleName))
            {
                loadObj[bundleName].AddResObj(resName, tmpAssetObj);
            }
            else
            {
                AssetResObj tmpRes = new AssetResObj(resName, tmpAssetObj);
                loadObj.Add(bundleName, tmpRes);
            }

            return(tmpObj);
        }
        return(null);
    }
コード例 #5
0
ファイル: IABMgr.cs プロジェクト: xxxhycl2010/QFramework
    public Object[] GetMultiRes(string bundleName, string resName)
    {
        if (mLoadHelper.ContainsKey(bundleName))
        {
            IABRelationMgr loader = mLoadHelper [bundleName];

            Object[] tmpObjs = loader.GetMultiRes(resName);

            AssetObj tmpAssetObj = new AssetObj(tmpObjs);

            // 缓存里面 是否已经有这个包
            if (mLoadObj.ContainsKey(bundleName))
            {
                AssetResObj tmpRes = mLoadObj [bundleName];

                tmpRes.AddResObj(resName, tmpAssetObj);
            }
            else
            {
                // 没有加载过 这个包
                AssetResObj tmpRes = new AssetResObj(resName, tmpAssetObj);

                mLoadObj.Add(bundleName, tmpRes);
            }

            return(tmpObjs);
        }
        else
        {
            return(null);
        }
    }
コード例 #6
0
 /// <summary>
 /// 释放这个AB包里的单个资源
 /// </summary>
 public void UnloadAsset(string bundleName, string assetName)
 {
     if (resObj.ContainsKey(bundleName))
     {
         AssetResObj tmpAsset = resObj[bundleName];
         tmpAsset.UnloadAsset(assetName);
     }
 }
コード例 #7
0
ファイル: IABManager.cs プロジェクト: IManual/Learn
 /// <summary>
 /// 释放某个包的单个资源
 /// </summary>
 public void UnloadAsset(string bundleName, string resName)
 {
     if (loadObjDic.ContainsKey(bundleName))
     {
         AssetResObj tmpObj = loadObjDic[bundleName];
         tmpObj.ReleaseResObj(resName);
     }
 }
コード例 #8
0
 public void DisposeResObj(string bundleName, string resName)
 {
     if (loadObj.ContainsKey(bundleName))
     {
         AssetResObj tmpObj = loadObj[bundleName];
         tmpObj.ReleaseResObj(resName);
     }
 }
コード例 #9
0
 //释放缓存物体
 public void DisposeResObj(string bundleName)
 {
     if (loadObj.ContainsKey(bundleName))
     {
         AssetResObj tmpObj = loadObj[bundleName];
         tmpObj.ReleaseAllResObj();
     }
     Resources.UnloadUnusedAssets();
 }
コード例 #10
0
ファイル: IABManager.cs プロジェクト: IManual/Learn
 /// <summary>
 /// 释放某个包的所有资源,但不卸载这个包
 /// </summary>
 /// <param name="bundleName"></param>
 public void UnloadAsset(string bundleName)
 {
     if (loadObjDic.ContainsKey(bundleName))
     {
         AssetResObj tmpObj = loadObjDic[bundleName];
         tmpObj.ReleaseAllResObj();
         loadObjDic.Remove(bundleName);
     }
 }
コード例 #11
0
    /// <summary>
    /// 释放这个AB包里的所有资源
    /// </summary>
    /// <param name="bundleName"></param>
    public void UnloadAsset(string bundleName)
    {
        if (resObj.ContainsKey(bundleName))
        {
            AssetResObj tmpAsset = resObj[bundleName];
            tmpAsset.UnloadAsset();
        }

        Resources.UnloadUnusedAssets();
    }
コード例 #12
0
 public void ReleaseResObj(string name)
 {
     if (resObjs.ContainsKey(name))
     {
         AssetResObj tmpObj = resObjs[name];
         tmpObj.ReleaseObj();
     }
     else
     {
     }
 }
コード例 #13
0
 public List <Object> GetResObj(string name)
 {
     if (resObjs.ContainsKey(name))
     {
         AssetResObj tmpObj = resObjs[name];
         return(tmpObj.objs);
     }
     else
     {
         return(null);
     }
 }
コード例 #14
0
        public IEnumerator GetResAsys(string bundleName, BundleInfo tmpInfo)
        {
            bool hasFind = false;

            ///缓存中已经加载了Object
            if (loadObj.ContainsKey(bundleName))
            {
                //Debug.Log("get  from memory =="+ resName);
                AssetResObj tmpRes = loadObj[bundleName];

                List <Object> tmpObj = tmpRes.GetResObj(tmpInfo.resName);
                if (tmpObj != null)
                {
                    tmpInfo.AddReses(tmpObj.ToArray());


                    tmpInfo.ReleaseObj();
                    hasFind = true;
                }
            } // 没有找到 继续向下


            if (!hasFind && loadHelper.ContainsKey(bundleName))
            {
                IABRelationManager loader = loadHelper[bundleName];

                yield return(loader.GetResAsys(tmpInfo)

                             );

                AssetObj tmpAssetObj = new AssetObj(tmpInfo.resObj);

                //是否已经包含bundle 
                if (loadObj.ContainsKey(bundleName))
                {
                    AssetResObj tmpRes = loadObj[bundleName];


                    tmpRes.AddResObj(tmpInfo.resName, tmpAssetObj);
                }
                else
                {
                    AssetResObj tmpRes = new AssetResObj(tmpInfo.resName, tmpAssetObj);
                    loadObj.Add(bundleName, tmpRes);
                }


                tmpInfo.ReleaseObj();
            }
        }
コード例 #15
0
        /// <summary>
        /// Gets the single resource.
        /// </summary>
        /// <returns>The single resource.</returns>
        /// <param name="bundleName">Bundle name. 相对路径</param>
        /// <param name="resName">Res name.</param>

        public Object GetSingleResource(string bundleName, string resName)
        {
            ///缓存中已经加载了Object
            if (loadObj.ContainsKey(bundleName))
            {
                //Debug.Log("get  from memory =="+ resName);
                AssetResObj tmpRes = loadObj[bundleName];

                List <Object> tmpObj = tmpRes.GetResObj(resName);
                if (tmpObj != null)
                {
                    return(tmpObj[0]);
                }
            }             // 没有找到 继续向下

            if (loadHelper.ContainsKey(bundleName))

            {
                //  Debug.Log("single  load manager =="+ bundleName);

                IABRelationManager loader = loadHelper[bundleName];

                Object   tmpObj      = loader.GetSingleResource(resName);
                AssetObj tmpAssetObj = new AssetObj(tmpObj);

                //是否已经包含bundle 
                if (loadObj.ContainsKey(bundleName))
                {
                    AssetResObj tmpRes = loadObj[bundleName];


                    tmpRes.AddResObj(resName, tmpAssetObj);
                }
                else
                {
                    AssetResObj tmpRes = new AssetResObj(resName, tmpAssetObj);
                    loadObj.Add(bundleName, tmpRes);
                }



                return(tmpObj);
            }
            else
            {
                return(null);
            }
        }
コード例 #16
0
        public Object[] GetMutiResources(string bundleName, string resName)
        {
            if (loadObj.ContainsKey(bundleName))
            {
                AssetResObj tmpRes = loadObj[bundleName];

                List <Object> tmpObj = tmpRes.GetResObj(resName);
                if (tmpObj != null)
                {
                    return(tmpObj.ToArray());
                }
            }



            if (loadHelper.ContainsKey(bundleName))
            {
                IABRelationManager loader = loadHelper[bundleName];

                Object[] tmpObjs     = loader.GetAllResources(resName);
                AssetObj tmpAssetObj = new AssetObj(tmpObjs);


                if (loadObj.ContainsKey(bundleName))
                {
                    AssetResObj tmpRes = loadObj[bundleName];


                    tmpRes.AddResObj(resName, tmpAssetObj);
                }
                else
                {
                    AssetResObj tmpRes = new AssetResObj(resName, tmpAssetObj);
                    loadObj.Add(bundleName, tmpRes);
                }



                return(tmpObjs);
            }
            else
            {
                return(null);
            }
        }
コード例 #17
0
    /// <summary>
    /// 加载多个资源(一般用于切割多张的精灵图片)
    /// </summary>
    /// <param name="bundleName">包名</param>
    /// <param name="resName">资源名</param>
    /// <returns></returns>
    public Object[] GetMultiResources(string bundleName, string resName)
    {
        // 是否已经缓存了这个包
        if (loadObjs.ContainsKey(bundleName))
        {
            // 缓存包中有指定资源,直接返回
            AssetResObj   tmpRes  = loadObjs[bundleName];
            List <Object> tmpObjs = tmpRes.GetResObj(resName);

            if (tmpObjs != null)
            {
                return(tmpObjs.ToArray());
            }
        }

        // 是否已经加载过bundle
        if (loadHelper.ContainsKey(bundleName))
        {
            // 从包中加载出obj
            IABRelationManager loader      = loadHelper[bundleName];
            Object[]           tmpObjs     = loader.GetMultiResources(resName);
            AssetObj           tmpAssetObj = new AssetObj(tmpObjs);

            // 是否已经缓存了这个包
            if (loadObjs.ContainsKey(bundleName))
            {
                // 添加缓存资源
                AssetResObj tmpRes = loadObjs[bundleName];
                tmpRes.AddResObj(resName, tmpAssetObj);
            }
            else
            {
                // 添加缓存包和资源
                AssetResObj tmpRes = new AssetResObj(resName, tmpAssetObj);
                loadObjs.Add(bundleName, tmpRes);
            }

            return(tmpObjs);
        }
        else
        {
            return(null);
        }
    }
コード例 #18
0
ファイル: IABMgr.cs プロジェクト: xxxhycl2010/QFramework
    public Object GetSingleRes(string bundleName, string resName)
    {
        // 表示 是否已经缓存了物体
        if (mLoadObj.ContainsKey(resName))
        {
            AssetResObj tmpRes = mLoadObj [bundleName];

            List <Object> tmpObj = tmpRes.GetResObj(resName);

            if (tmpObj != null)
            {
                return(tmpObj [0]);
            }
        }

        // 表示已经加载过bundle
        if (mLoadHelper.ContainsKey(bundleName))
        {
            IABRelationMgr loader = mLoadHelper [bundleName];

            Object tmpObj = loader.GetSingleRes(resName);

            AssetObj tmpAssetObj = new AssetObj(tmpObj);

            if (mLoadObj.ContainsKey(bundleName))
            {
                AssetResObj tmpRes = mLoadObj [bundleName];
                tmpRes.AddResObj(resName, tmpAssetObj);
            }
            else
            {
                // 没有加载过 这个包
                AssetResObj tmpRes = new AssetResObj(resName, tmpAssetObj);
                mLoadObj.Add(bundleName, tmpRes);
            }

            return(tmpObj);
        }
        else
        {
            return(null);
        }
    }
コード例 #19
0
ファイル: IABManager.cs プロジェクト: IManual/Learn
    /// <summary>
    /// 获取单个资源
    /// </summary>
    /// <param name="bundleName"></param>
    /// <param name="resName"></param>
    /// <returns></returns>
    public UnityEngine.Object GetSingleResources(string bundleName, string resName)
    {
        if (loadObjDic.ContainsKey(bundleName))
        {
            AssetResObj tmpRes = loadObjDic[bundleName];
            List <UnityEngine.Object> tmpObj = tmpRes.GetResObj(resName);

            if (tmpObj != null)
            {
                return(tmpObj[0]);
            }
        }

        //表示已经加载过bundle
        if (loadHelperDic.ContainsKey(bundleName))
        {
            IABRelationManager loader = loadHelperDic[bundleName];
            UnityEngine.Object tmpObj = loader.GetSingleResources(resName);

            AssetObj tmpAssetObj = new AssetObj(tmpObj);

            if (loadObjDic.ContainsKey(bundleName))
            {
                AssetResObj tmpRes = loadObjDic[bundleName];
                tmpRes.AddResObj(resName, tmpAssetObj);
            }
            else
            {
                //没有加载过这个包
                AssetResObj tmpRes = new AssetResObj(bundleName, tmpAssetObj);
                tmpRes.AddResObj(resName, tmpAssetObj);
                loadObjDic.Add(bundleName, tmpRes);
            }
            return(tmpObj);
        }
        else
        {
            Debug.LogError(resName + "load error");
            return(null);
        }
    }
コード例 #20
0
    /// <summary>
    /// 获取这个AB包下的单个资源
    /// </summary>
    public UnityEngine.Object LoadAsset(string bundleName, string assetName)    // scene1/test.prefab
    {
        // 先看缓存的有没有
        if (resObj.ContainsKey(bundleName))
        {
            AssetResObj   tmpRes  = resObj[bundleName];
            List <Object> objList = tmpRes.GetResObj(assetName);
            if (objList != null)
            {
                return(objList[0]);
            }
        }

        // 缓存的没有,或者缓存里没有我们需要的Object, 就去底层加载一次
        if (!relationDic.ContainsKey(bundleName))
        {
            Debug.LogError("The loadHelper Not ContainsKey :" + bundleName);
            return(null);
        }

        AssetBundleRelation abRela = relationDic[bundleName];
        Object obj = abRela.LoadAsset(assetName);

        AssetObj tmpObj = new AssetObj(obj);

        if (resObj.ContainsKey(bundleName))         // 如果缓存里有这个bundle包,获取value,加到value里去;
        {
            AssetResObj tmpResObj = resObj[bundleName];
            tmpResObj.AddResObj(assetName, tmpObj);
        }
        else         // 缓存里没有这个 bundle包,直接加进去
        {
            AssetResObj assetRes = new AssetResObj(assetName, tmpObj);
            resObj.Add(bundleName, assetRes);
        }

        return(obj);
    }
コード例 #21
0
    /// <summary>
    /// 获取这个AB包下的多个资源
    /// </summary>
    public Object[] LoadAssetWithSubAssets(string bundleName, string assetName)
    {
        if (resObj.ContainsKey(bundleName))
        {
            AssetResObj   tmpRes  = resObj[bundleName];
            List <Object> objList = tmpRes.GetResObj(assetName);
            if (objList != null)
            {
                return(objList.ToArray());
            }
        }

        if (!relationDic.ContainsKey(bundleName))
        {
            Debug.LogError("The loadHelper Not ContainsKey :" + bundleName);
            return(null);
        }

        AssetBundleRelation abRela = relationDic[bundleName];

        Object[] tmpObjs = abRela.LoadAssetWithSubAssets(assetName);

        AssetObj assetObj = new AssetObj(tmpObjs);

        if (resObj.ContainsKey(bundleName))
        {
            AssetResObj tmpAsset = resObj[bundleName];
            tmpAsset.AddResObj(assetName, assetObj);
        }
        else
        {
            AssetResObj assetRes = new AssetResObj(assetName, assetObj);
            resObj.Add(bundleName, assetRes);
        }


        return(tmpObjs);
    }
コード例 #22
0
 public AssetResObjs(string name, AssetResObj tmp)
 {
     resObjs = new Dictionary <string, AssetResObj>();
     resObjs.Add(name, tmp);
 }
コード例 #23
0
ファイル: IABMgr.cs プロジェクト: liangxiegame/QFramework
	public Object GetSingleRes(string bundleName,string resName)
	{
		// 表示 是否已经缓存了物体
		if (mLoadObj.ContainsKey (resName)) {
			AssetResObj tmpRes = mLoadObj [bundleName];

			List<Object> tmpObj = tmpRes.GetResObj (resName);

			if (tmpObj != null) {
				return tmpObj [0];
			}
		} 

		// 表示已经加载过bundle
		if (mLoadHelper.ContainsKey (bundleName)) {
			IABRelationMgr loader = mLoadHelper [bundleName];

			Object tmpObj = loader.GetSingleRes (resName);

			AssetObj tmpAssetObj = new AssetObj (tmpObj);

			if (mLoadObj.ContainsKey (bundleName)) {
				AssetResObj tmpRes = mLoadObj [bundleName];
				tmpRes.AddResObj (resName, tmpAssetObj);
			} else {
				// 没有加载过 这个包
				AssetResObj tmpRes = new AssetResObj (resName, tmpAssetObj);
				mLoadObj.Add (bundleName, tmpRes);
			}

			return tmpObj;
		} else {
			return null;
		}
	}
コード例 #24
0
ファイル: IABMgr.cs プロジェクト: liangxiegame/QFramework
	public Object[] GetMultiRes(string bundleName,string resName)
	{
		if (mLoadHelper.ContainsKey (bundleName)) {
			IABRelationMgr loader = mLoadHelper [bundleName];

			Object[] tmpObjs = loader.GetMultiRes (resName);

			AssetObj tmpAssetObj = new AssetObj (tmpObjs);

			// 缓存里面 是否已经有这个包
			if (mLoadObj.ContainsKey (bundleName)) {
				AssetResObj tmpRes = mLoadObj [bundleName];

				tmpRes.AddResObj (resName, tmpAssetObj);
			} else {
				// 没有加载过 这个包
				AssetResObj tmpRes = new AssetResObj (resName, tmpAssetObj);

				mLoadObj.Add (bundleName, tmpRes);
			}

			return tmpObjs;
		} else {
			return null;
		}
	}
コード例 #25
0
 public void AddResObj(string name, AssetResObj tmpObj)
 {
     resObjs.Add(name, tmpObj);
 }