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); } } }
//加载一个具体资源时,先从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); })); } }