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); } } }
//表示已经加载过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); } }
//加载一个具体资源时,先从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); })); } }
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); }
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); } }
/// <summary> /// 释放这个AB包里的单个资源 /// </summary> public void UnloadAsset(string bundleName, string assetName) { if (resObj.ContainsKey(bundleName)) { AssetResObj tmpAsset = resObj[bundleName]; tmpAsset.UnloadAsset(assetName); } }
/// <summary> /// 释放某个包的单个资源 /// </summary> public void UnloadAsset(string bundleName, string resName) { if (loadObjDic.ContainsKey(bundleName)) { AssetResObj tmpObj = loadObjDic[bundleName]; tmpObj.ReleaseResObj(resName); } }
public void DisposeResObj(string bundleName, string resName) { if (loadObj.ContainsKey(bundleName)) { AssetResObj tmpObj = loadObj[bundleName]; tmpObj.ReleaseResObj(resName); } }
//释放缓存物体 public void DisposeResObj(string bundleName) { if (loadObj.ContainsKey(bundleName)) { AssetResObj tmpObj = loadObj[bundleName]; tmpObj.ReleaseAllResObj(); } Resources.UnloadUnusedAssets(); }
/// <summary> /// 释放某个包的所有资源,但不卸载这个包 /// </summary> /// <param name="bundleName"></param> public void UnloadAsset(string bundleName) { if (loadObjDic.ContainsKey(bundleName)) { AssetResObj tmpObj = loadObjDic[bundleName]; tmpObj.ReleaseAllResObj(); loadObjDic.Remove(bundleName); } }
/// <summary> /// 释放这个AB包里的所有资源 /// </summary> /// <param name="bundleName"></param> public void UnloadAsset(string bundleName) { if (resObj.ContainsKey(bundleName)) { AssetResObj tmpAsset = resObj[bundleName]; tmpAsset.UnloadAsset(); } Resources.UnloadUnusedAssets(); }
public void ReleaseResObj(string name) { if (resObjs.ContainsKey(name)) { AssetResObj tmpObj = resObjs[name]; tmpObj.ReleaseObj(); } else { } }
public List <Object> GetResObj(string name) { if (resObjs.ContainsKey(name)) { AssetResObj tmpObj = resObjs[name]; return(tmpObj.objs); } else { return(null); } }
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(); } }
/// <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); } }
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); } }
/// <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); } }
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); } }
/// <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); } }
/// <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); }
/// <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); }
public AssetResObjs(string name, AssetResObj tmp) { resObjs = new Dictionary <string, AssetResObj>(); resObjs.Add(name, tmp); }
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; } }
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; } }
public void AddResObj(string name, AssetResObj tmpObj) { resObjs.Add(name, tmpObj); }