IEnumerator DownLoadAssetBundleByBuffer(string url, UnityEngine.Events.UnityAction <byte[]> cb, UnityEngine.Events.UnityAction onFailed) { using (UnityWebRequest www = UnityWebRequest.Get(url)) { DownloadHandlerBuffer handler = new DownloadHandlerBuffer(); www.downloadHandler = handler; yield return(www.Send()); if (www.isError) { LoggerManager.Instance().LogErrorFormat("DownLoadAssetBundleByBuffer Failed:{0} url={1}", www.error, url); if (null != onFailed) { onFailed.Invoke(); } } else { LoggerManager.Instance().LogFormat("DownLoadAssetBundleByBuffer Succeed : Length = {0} ...", handler.data.Length); if (null != cb) { cb.Invoke(www.downloadHandler.data); } } } }
public IEnumerator DownLoadAssetBundles(string url, List <string> bundles, UnityAction onSucceed, UnityAction onFailed) { bool succeed = true; for (int i = 0; i < bundles.Count; ++i) { var bundleName = bundles[i]; var assetBundleUrl = string.Format("{0}{1}", url, bundleName); yield return(DownLoadAssetBundleByBuffer(assetBundleUrl, (byte[] datas) => { var savePath = CommonFunction.getAssetBundleSavePath(CommonFunction.getPlatformString() + "/" + bundleName, false); SaveFile(savePath, datas, () => { succeed = false; }); }, () => { succeed = false; LoggerManager.Instance().LogErrorFormat("DownLoad AssetBundle Failed ... For bundleName = [{0}] ...", bundleName); })); if (!succeed) { if (null != onFailed) { onFailed.Invoke(); } yield break; } } if (null != onSucceed) { onSucceed.Invoke(); } }
protected void SaveFile(string path, byte[] datas, UnityEngine.Events.UnityAction onFailed = null) { var bundleName = System.IO.Path.GetFileName(path); var dir = System.IO.Path.GetDirectoryName(path); try { if (!System.IO.Directory.Exists(dir)) { System.IO.Directory.CreateDirectory(dir); } System.IO.File.WriteAllBytes(path, datas); LoggerManager.Instance().LogProcessFormat("TrySave {0} To {1} Succeed ...", bundleName, path); } catch (System.Exception e) { LoggerManager.Instance().LogErrorFormat("TrySave {0} To {1} Failed ...", bundleName, path); LoggerManager.Instance().LogErrorFormat(e.ToString()); if (null != onFailed) { onFailed.Invoke(); } } }
IEnumerator LoadFileMD5Info() { TextAsset versionText = Resources.Load <TextAsset>(@"Data/MD5/VersionMd5File"); if (null == versionText) { mError = GMError.GME_LoadFileMD5Failed; LoggerManager.Instance().LogErrorFormat("加载本地 VersionMd5File 失败 !!!", mBundleName); yield break; } var succeed = AssetLoaderManager.Instance().SetLocalVersionMD5(versionText.text); if (!succeed) { mError = GMError.GME_LoadFileMD5Failed; LoggerManager.Instance().LogErrorFormat("解析本地 VersionMd5File 失败 !!!"); yield break; } var md5url = string.Format("{0}{1}/{2}/VersionMd5File.txt", mBaseConfigUrl, CommonFunction.getPlatformString(), AssetLoaderManager.Instance().RemoteVersion); yield return(AssetLoaderManager.Instance().LoadRemoteVersionMD5Files(md5url, null, () => { succeed = false; })); if (!succeed) { mError = GMError.GME_LoadFileMD5Failed; LoggerManager.Instance().LogErrorFormat("加载远程 VersionMd5File 失败 !!!"); yield break; } }
protected void _InitFilters() { for (int i = 0; i < 4; ++i) { var toggle = mScriptBinder.GetObject("Filter_" + i) as UnityEngine.UI.Toggle; if (null != toggle) { int flag = (1 << i); bool isOn = (LoggerManager.Instance().Filter & flag) == 0; toggle.onValueChanged.RemoveAllListeners(); toggle.isOn = isOn; toggle.onValueChanged.AddListener((bool bValue) => { if (bValue) { LoggerManager.Instance().RemoveFilter(flag); } else { LoggerManager.Instance().AddFilter(flag); } }); } } }
public void Clear(bool bGlobal = false) { LoggerManager.Instance().LogProcessFormat("Clear All Invokes ... bGlobal = {0}", bGlobal); if (bGlobal) { for (int i = 0; i < m_actives.Count; ++i) { m_actives[i].Reset(); m_recycled.Add(m_actives[i]); } m_actives.Clear(); } else { for (int i = 0; i < m_actives.Count; ++i) { var item = m_actives[i]; if ((item.flag & FLAG_GLOBAL) == 0) { item.Reset(); m_actives.RemoveAt(i--); m_recycled.Add(item); } } } }
protected T _LoadResFromResourcesFolder <T>(ResourceInfoTable resInfoItem, AssetType eAssetType, int iHashCode) where T : UnityEngine.Object { if (eAssetType == AssetType.AT_PREFAB) { var assetInst = Resources.Load <T>(resInfoItem.Path[0]); if (null == assetInst) { LoggerManager.Instance().LogErrorFormat("LoadGameObject with path = {0} failed ...", resInfoItem.PathHashKey); return(null); } _AddOrUpdateAlivedObject(resInfoItem, iHashCode, assetInst); return(UnityEngine.Object.Instantiate(assetInst) as T); } else if (eAssetType == AssetType.AT_SPRITE) { Sprite assetInst = null; Sprite[] spriteArray = Resources.LoadAll <Sprite>(resInfoItem.Path[0]); for (int i = 0; i < spriteArray.Length; ++i) { if (spriteArray[i].name == resInfoItem.Path[1]) { assetInst = spriteArray[i]; break; } } if (null == assetInst) { LoggerManager.Instance().LogErrorFormat("Load Sprite with path = {0} failed ...", resInfoItem.PathHashKey); return(default(T)); } _AddOrUpdateAlivedObject(resInfoItem, iHashCode, assetInst); return(assetInst as T); } else if (eAssetType == AssetType.AT_ASSETS) { T assetInst = Resources.Load <T>(resInfoItem.Path[0]); if (null == assetInst) { LoggerManager.Instance().LogErrorFormat("Load Asset from path = {0} with type = {1} failed ...", resInfoItem.PathHashKey, typeof(T).Name); return(null); } _AddOrUpdateAlivedObject(resInfoItem, iHashCode, assetInst); return(assetInst); } LoggerManager.Instance().LogErrorFormat("LoadResFromResourcesFolder failed ... path = {0} type = {1}", resInfoItem.PathHashKey, typeof(T).Name); return(default(T)); }
public IEnumerator LoadAssetBundle(string bundleName, UnityAction onSucceed, UnityAction onFailed, bool bLoadAssetBundleFromStreamingAssets) { if (IsBundleExist(bundleName)) { LoggerManager.Instance().LogFormat("DownLoadAssetBundle {0} Failed , this bundle has already loaded ...", bundleName); if (null != onSucceed) { onSucceed.Invoke(); } yield break; } var bundleUrl = CommonFunction.getAssetBundleSavePath(string.Format("{0}/{1}", CommonFunction.getPlatformString(), bundleName), true, bLoadAssetBundleFromStreamingAssets); LoggerManager.Instance().LogProcessFormat("[LoadAssetBundle]: bundleName = {0} bundleUrl = {1}", bundleName, bundleUrl); using (UnityWebRequest www = UnityWebRequest.Get(bundleUrl)) { DownloadHandlerAssetBundle handler = new DownloadHandlerAssetBundle(www.url, 0); www.downloadHandler = handler; yield return(www.Send()); if (www.error != null) { LoggerManager.Instance().LogErrorFormat("DownLoadAssetBundle Failed:{0} url={1}", www.error, bundleUrl); if (null != onFailed) { onFailed.Invoke(); } } else { AssetBundle bundle = handler.assetBundle; if (null == bundle) { LoggerManager.Instance().LogErrorFormat("DownLoadAssetBundle Failed: Bundle Downloaded is null ..."); if (null != onFailed) { onFailed.Invoke(); } yield break; } AddBundleToDic(bundleName, bundle); if (null != onSucceed) { onSucceed.Invoke(); } } } }
public T LoadResources <T>(string path, AssetType eAssetType) where T : UnityEngine.Object { int iHashCode = path.GetHashCode(); var resInfoItem = getResourceInfo(iHashCode); if (null == resInfoItem || resInfoItem.Path.Count <= 0) { LoggerManager.Instance().LogErrorFormat("LoadResources with path = {0} eAssetType = {1} failed ,can not be found in ResourceInfoTable ...", path, eAssetType); return(default(T)); } if (eAssetType != (AssetType)resInfoItem.TypeId) { LoggerManager.Instance().LogErrorFormat("LoadResources failed assetType verify failed eAssetType = {0} while assetType in ResourceInfoTable = {1}", (int)eAssetType, resInfoItem.TypeId); return(default(T)); } if (mAlivedObjects.ContainsKey(iHashCode)) { var assetInst = mAlivedObjects[iHashCode]; if (null != assetInst && assetInst.objectRef.IsAlive) { if (eAssetType == AssetType.AT_PREFAB) { return(UnityEngine.Object.Instantiate(assetInst.objectRef.Target as T)); } else if (eAssetType == AssetType.AT_SPRITE) { return(assetInst.objectRef.Target as T); } else if (eAssetType == AssetType.AT_ASSETS) { return(assetInst.objectRef.Target as T); } } } //LoadFromResources if (resInfoItem.LoadType == ResourceInfoTable.eLoadType.LoadFromResources) { return(_LoadResFromResourcesFolder <T>(resInfoItem, eAssetType, iHashCode)); } else if (resInfoItem.LoadType == ResourceInfoTable.eLoadType.LoadFromBundle) { return(_LoadResFromStreamingAssetsBundle <T>(resInfoItem, eAssetType, iHashCode)); } LoggerManager.Instance().LogErrorFormat("LoadResources failed path={0} eAssetType={1} type={2}", path, eAssetType, typeof(T).Name); return(default(T)); }
IEnumerator StartCheckVersion() { //加载版本信息 yield return(LoadVersionInfo()); if (ReportError()) { yield break; } LoggerManager.Instance().LogProcessFormat("LoadVersionInfo Succeed !"); //检测大版本更新 if (AssetLoaderManager.Instance().HasLargeUpdate) { LoggerManager.Instance().LogProcessFormat("NeedReDownLoadFrom AppleStore , Has Large Update !"); yield break; } //加载文件MD5 yield return(LoadFileMD5Info()); if (ReportError()) { yield break; } LoggerManager.Instance().LogProcessFormat("Load VersionMd5File Succeed !"); //检测小版本更新 if (AssetLoaderManager.Instance().HasSmallUpdate) { //下载差异包 LoggerManager.Instance().LogProcessFormat("DownLoad Package From Server!"); yield return(DownLoadBaseModule()); if (ReportError()) { yield break; } } else { LoggerManager.Instance().LogProcessFormat("Need Not DownLoad Package From Server!"); } //加载游戏基础模块 yield return(LoadGameBaseModule()); if (ReportError()) { yield break; } LoggerManager.Instance().LogProcessFormat("LoadGameBaseModule Succeed !"); }
public void LoadAssetBundleImmediately(string bundleName, UnityAction onSucceed, UnityAction onFailed, bool bLoadAssetBundleFromStreamingAssets) { if (IsBundleExist(bundleName)) { LoggerManager.Instance().LogFormat("LoadAssetBundleImmediately {0} Failed , this bundle has already loaded ...", bundleName); if (null != onSucceed) { onSucceed.Invoke(); } return; } var bundleUrl = CommonFunction.getAssetBundleSavePath(string.Format("{0}/{1}", CommonFunction.getPlatformString(), bundleName), false, bLoadAssetBundleFromStreamingAssets); LoggerManager.Instance().LogProcessFormat("[LoadAssetBundleImmediately]: bundleName = {0} bundleUrl = {1}", bundleName, bundleUrl); if (!System.IO.File.Exists(bundleUrl)) { LoggerManager.Instance().LogErrorFormat("LoadAssetBundleImmediately File Does Not Exist For {0} !", bundleUrl); if (null != onFailed) { onFailed.Invoke(); } return; } var datas = System.IO.File.ReadAllBytes(bundleUrl); if (null == datas || datas.Length == 0) { LoggerManager.Instance().LogErrorFormat("LoadAssetBundleImmediately File Data Length = {0} !", 0); if (null != onFailed) { onFailed.Invoke(); } return; } AssetBundle bundle = AssetBundle.LoadFromMemory(datas); if (null == bundle) { LoggerManager.Instance().LogErrorFormat("Load [{0}] From Memory Failed !!!", bundleName); return; } AddBundleToDic(bundleName, bundle); if (null != onSucceed) { onSucceed.Invoke(); } }
public void ReportAlivedObject() { var iter = mAlivedObjects.GetEnumerator(); while (iter.MoveNext()) { var assetInst = iter.Current.Value; if (null != assetInst && assetInst.objectRef.IsAlive) { LoggerManager.Instance().LogFormat("[alivedRes]:<color=#00ff00>[Path={0}][LoadType={1}]</color>", assetInst.resInfo.Path, assetInst.resInfo.LoadType); } } }
public IEnumerator LoadRemoteVersionMD5Files(string url, UnityAction onSucceed, UnityAction onFailed) { using (UnityWebRequest www = UnityWebRequest.Get(url)) { yield return(www.Send()); if (www.isError) { LoggerManager.Instance().LogErrorFormat(www.error); if (null != onFailed) { onFailed.Invoke(); } } else { mRemoteFileMD5Dic.Clear(); if (!string.IsNullOrEmpty(www.downloadHandler.text)) { var tokens = www.downloadHandler.text.Split(new char[] { '\r', '\n' }); for (int i = 0; i < tokens.Length; ++i) { var token = tokens[i].Split('|'); if (2 == token.Length && !string.IsNullOrEmpty(token[0]) && !string.IsNullOrEmpty(token[1])) { if (!mRemoteFileMD5Dic.ContainsKey(token[0])) { mRemoteFileMD5Dic.Add(token[0], token[1]); } } } } if (mRemoteFileMD5Dic.Count == 0) { LoggerManager.Instance().LogErrorFormat(@"Load Remote MD5File Failed ..."); if (null != onFailed) { onFailed.Invoke(); } } else { if (null != onSucceed) { onSucceed.Invoke(); } } } } }
protected void DeleteFile(string path) { try { if (!string.IsNullOrEmpty(path) && System.IO.File.Exists(path)) { LoggerManager.Instance().LogProcessFormat("Delete file Path = {0}", path); System.IO.File.Delete(path); LoggerManager.Instance().LogProcessFormat("Delete {0} Succeed", path); } } catch (System.Exception e) { LoggerManager.Instance().LogErrorFormat("Delete file Path = {0} Failed:Error={1}", path, e.Message); } }
public void CloseAllFrames() { LoggerManager.Instance().LogProcessFormat("CloseAllFrames ..."); var iter = mKey2Frames.GetEnumerator(); while (iter.MoveNext()) { IFrame frame = iter.Current.Value as IFrame; if (null != frame) { frame.Close(); } } mKey2Frames.Clear(); }
public IEnumerator LoadRemoteVersion(string url) { IsVersionOK = false; using (UnityWebRequest www = UnityWebRequest.Get(url)) { yield return(www.Send()); if (www.isError) { LoggerManager.Instance().LogErrorFormat(www.error); } else { IsVersionOK = SetVersion(www.downloadHandler.text, ref mRemoteVersion); } } }
protected T _LoadResFromStreamingAssetsBundle <T>(ResourceInfoTable resInfoItem, AssetType eAssetType, int iHashCode) where T : UnityEngine.Object { if (resInfoItem.Path.Count > 1) { AssetBundle assetBundle = AssetBundleManager.Instance().getAssetBundle(resInfoItem.Path[0]); if (null == assetBundle) { LoggerManager.Instance().LogProcessFormat("get assetbundle failed name = {0} ...", resInfoItem.Path[0]); return(default(T)); } return(_LoadResFromAssetBundle <T>(resInfoItem, assetBundle, iHashCode)); } LoggerManager.Instance().LogErrorFormat("_LoadResFromStreamingAssetsBundle failed ... path = {0} type = {1} argc = {2} error", resInfoItem.PathHashKey, typeof(T).Name, resInfoItem.Path.Count); return(default(T)); }
public IEnumerator LoadAssetBundleFromModule(int moduleId, UnityAction onSucceed, UnityAction onFailed) { var moduleItem = TableManager.Instance().GetTableItem <ModuleTable>(moduleId); if (null == moduleItem) { if (null != onFailed) { onFailed.Invoke(); } yield break; } bool succeed = true; for (int i = 0; i < moduleItem.RequiredBundles.Count; ++i) { yield return(LoadAssetBundleFromPkg(moduleItem.RequiredBundles[i], null, () => { succeed = false; })); if (!succeed) { LoggerManager.Instance().LogErrorFormat("Load {0} AssetBundleFailed ...", moduleItem.RequiredBundles[i]); break; } } if (succeed) { if (null != onSucceed) { onSucceed.Invoke(); } } else { if (null != onFailed) { onFailed.Invoke(); } } }
protected void _InitLogList() { if (null != mLogger) { UIListTemplate.Initialize <ComLogItem>(mLogger); mLogger.onItemVisiable = (ComUIListElementScript item) => { var datas = LoggerManager.Instance().LogItems; if (null != item && item.m_index >= 0 && item.m_index < datas.Count) { ComLogItem logItem = item.gameObjectBindScript as ComLogItem; if (null != logItem) { logItem.OnItemVisible(datas[item.m_index]); } } }; } }
public bool Create(object argv) { LoggerManager.Instance().LogProcessFormat("Create Scene Name = {0}", sceneItem.Name); userData = argv; for (int i = 0; i < sceneItem.AssetBundles.Count; ++i) { var bundleName = sceneItem.AssetBundles[i]; if (!string.IsNullOrEmpty(bundleName)) { AddTask(AssetBundleManager.Instance().LoadAssetBundle(bundleName, null, () => { LoggerManager.Instance().LogErrorFormat("LoadAssetBundleFailed Name = {0} SceneName = {1}", bundleName, sceneItem.Name); }, false)); } } OnCreate(); return(true); }
protected void _UpdateLogList() { if (null != mLogger) { List <Vector2> elementsSize = new List <Vector2>(); for (int i = 0; i < LoggerManager.Instance().LogItems.Count; ++i) { var logItem = LoggerManager.Instance().LogItems[i]; Vector2 size = Vector2.zero; if (null != logItem) { float fw = mGenerator.GetPreferredWidth(logItem.log, mGenerationSetting) / mGeneratorText.pixelsPerUnit; float fh = mGenerator.GetPreferredHeight(logItem.log, mGenerationSetting) / mGeneratorText.pixelsPerUnit; size.x = fw; size.y = fh; //Debug.LogErrorFormat("size={0}", size); } elementsSize.Add(size); } mLogger.SetElementAmount(LoggerManager.Instance().LogItems.Count, elementsSize); } }
IEnumerator LoadVersionInfo() { if (!AssetLoaderManager.Instance().SetLocalVersion(Application.version)) { mError = GMError.GME_LoadVersionFailed; LoggerManager.Instance().LogErrorFormat("SetLocalVersion Failed V = {0}", Application.version); yield break; } var versionUrl = string.Format("{0}{1}/Version.txt", mBaseConfigUrl, CommonFunction.getPlatformString()); //var md5url = platformUrl + "/VersionMd5File.txt"; yield return(AssetLoaderManager.Instance().LoadRemoteVersion(versionUrl)); if (!AssetLoaderManager.Instance().IsVersionOK) { mError = GMError.GME_LoadVersionFailed; LoggerManager.Instance().LogErrorFormat("SetRemoteVersion Failed ..."); yield break; } }
public bool Initialize(object argv) { var data = argv as AssetLoaderData; frameHandle = data.frameHandle; mLocalResourcesInfoTable.Clear(); if (null != data.localResourcesInfoTable) { var iter = data.localResourcesInfoTable.GetEnumerator(); while (iter.MoveNext()) { var resItem = iter.Current.Value as ResourceInfoTable; if (null != resItem) { int iHashCode = 0; if (!string.IsNullOrEmpty(resItem.PathHashKey)) { iHashCode = resItem.PathHashKey.GetHashCode(); } if (0 != iHashCode) { if (!mLocalResourcesInfoTable.ContainsKey(iHashCode)) { mLocalResourcesInfoTable.Add(iHashCode, resItem); } else { var orgItem = mLocalResourcesInfoTable[iHashCode]; mLocalResourcesInfoTable[iHashCode] = resItem; LoggerManager.Instance().LogErrorFormat("mLocalResourcesInfoTable hash key repeated for id = {0} and id = {1}", orgItem.ID, resItem.ID); } } } } } return(mLocalResourcesInfoTable.Count > 0); }
public void Exit() { LoggerManager.Instance().LogProcessFormat("Exit Scene Name = {0}", sceneItem.Name); OnExit(); ansyTasks.Clear(); userData = null; iId = -1; UIManager.Instance().CloseAllFrames(); EventManager.Instance().Clear(); InvokeManager.Instance().Clear(); for (int i = 0; i < sceneItem.AssetBundles.Count; ++i) { if (!string.IsNullOrEmpty(sceneItem.AssetBundles[i])) { AssetBundleManager.Instance().UnLoadAssetBundle(sceneItem.AssetBundles[i]); } } sceneItem = null; }
protected void _AddOrUpdateAlivedObject(ResourceInfoTable resInfoItem, int iHashCode, UnityEngine.Object objRef) { AssetType eAssetType = (AssetType)resInfoItem.TypeId; if (null == resInfoItem) { LoggerManager.Instance().LogErrorFormat("AddOrUpdateAlivedObject resInfoItem is null ..."); return; } if (null == objRef) { LoggerManager.Instance().LogErrorFormat("AddOrUpdateAlivedObject objRef is null ... resId = {0}", resInfoItem.ID); return; } AssetInstance assetInstance = null; if (mAlivedObjects.ContainsKey(iHashCode)) { assetInstance = mAlivedObjects[iHashCode]; assetInstance.objectRef.Target = objRef; assetInstance.resInfo = resInfoItem; assetInstance.eAssetType = eAssetType; } else { assetInstance = new AssetInstance { iHashCode = iHashCode, resInfo = resInfoItem, objectRef = new WeakReference(objRef), eAssetType = eAssetType, }; mAlivedObjects.Add(iHashCode, assetInstance); } }
public void SwitchScene(int iId, SceneParam param = null) { _sceneId = iId; _param = param; StopAllCoroutines(); if (null != _current) { _current.Exit(); _current = null; } if (null != param && null != param.begin) { param.begin.Invoke(); param.begin = null; } _current = Create(iId); object argv = null; if (null != _param) { argv = _param.argv; } if (null == _current || !_current.Create(argv)) { LoggerManager.Instance().LogErrorFormat("Create Scene Failed For Id = {0}", iId); return; } StartCoroutine(AnsySwitchScene()); }
public void Clear() { LoggerManager.Instance().LogProcessFormat("ClearAllEvents ..."); mEventDispatcher.Clear(); }
IEnumerator DownLoadBaseModule() { bool succeed = true; var baseBundleUrl = string.Format("{0}{1}/{2}/", mBaseConfigUrl, CommonFunction.getPlatformString(), AssetLoaderManager.Instance().RemoteVersion); yield return(AssetBundleManager.Instance().DownLoadAssetBundles(baseBundleUrl, new List <string>() { mBundleName }, null, () => { succeed = false; })); if (!succeed) { mError = GMError.GME_DownLoadBaseModuleFailed; LoggerManager.Instance().LogErrorFormat("从远程加载[{0}] Bundle 失败 !!!", mBundleName); yield break; } yield return(AssetBundleManager.Instance().LoadAssetBundle(mBundleName, null, () => { succeed = false; }, false)); if (!succeed) { mError = GMError.GME_DownLoadBaseModuleFailed; LoggerManager.Instance().LogErrorFormat("从本地加载 刚下载的[{0}] Bundle 失败 !!!", mBundleName); yield break; } var baseBundle = AssetBundleManager.Instance().getAssetBundle(mBundleName); if (null == baseBundle) { mError = GMError.GME_DownLoadBaseModuleFailed; LoggerManager.Instance().LogFormat("加载[{0}] Bundle 失败 !!!", mBundleName); yield break; } //加载模块表 TableManager.Instance().LoadTableFromAssetBundle <ProtoTable.ModuleTable>(baseBundle); var moduleTable = TableManager.Instance().GetTable <ModuleTable>(); if (null == moduleTable) { mError = GMError.GME_DownLoadBaseModuleFailed; LoggerManager.Instance().LogErrorFormat("加载模块表 ModuleTable 失败 !!!"); yield break; } //加载 int baseModuleId = 1; var moduleItem = TableManager.Instance().GetTableItem <ModuleTable>(baseModuleId); if (null == moduleTable) { mError = GMError.GME_DownLoadBaseModuleFailed; LoggerManager.Instance().LogErrorFormat("加载模块表项 ModuleTable 失败 ID={0}!!!", baseModuleId); yield break; } List <string> needDownLoadBundles = new List <string>(32); AssetLoaderManager.Instance().GetNeedDownLoadModule(moduleItem.RequiredBundles.ToArray(), needDownLoadBundles); AssetLoaderManager.Instance().GetNeedDownLoadModule(new string[] { CommonFunction.getPlatformString() }, needDownLoadBundles); AssetBundleManager.Instance().UnLoadAssetBundle(mBundleName); if (needDownLoadBundles.Count > 0) { for (int i = 0; i < needDownLoadBundles.Count; ++i) { LoggerManager.Instance().LogProcessFormat("Bundle [{0}] 需要下载 ...", needDownLoadBundles[i]); } var bundleUrl = string.Format("{0}{1}/{2}/", mBaseConfigUrl, CommonFunction.getPlatformString(), AssetLoaderManager.Instance().RemoteVersion); yield return(AssetBundleManager.Instance().DownLoadAssetBundles(bundleUrl, needDownLoadBundles, null, () => { succeed = false; LoggerManager.Instance().LogErrorFormat("DownLoadAssetBundles Failed ..."); })); if (!succeed) { mError = GMError.GME_DownLoadBaseModuleFailed; yield break; } LoggerManager.Instance().LogFormat("DownLoadBaseModule Succeed !"); } else { LoggerManager.Instance().LogProcessFormat("No Bundle Need Download ..."); } }
IEnumerator LoadGameBaseModule() { bool succeed = true; if (AssetLoaderManager.Instance().HasSmallUpdate) { yield return(AssetBundleManager.Instance().LoadAssetBundleFromPkg(mBundleName, null, () => { succeed = false; })); if (!succeed) { mError = GMError.GME_LoadBaseModuleFailed; LoggerManager.Instance().LogErrorFormat("Load BaseBundle {0} From Pkg Failed ...", mBundleName); yield break; } } else { yield return(AssetBundleManager.Instance().LoadAssetBundle(mBundleName, null, () => { succeed = false; }, true)); if (!succeed) { mError = GMError.GME_LoadBaseModuleFailed; LoggerManager.Instance().LogErrorFormat("Load BaseBundle {0} From StreamingAssets Failed ...", mBundleName); yield break; } } TableManager.Instance().LoadTableFromAssetBundle <ProtoTable.ModuleTable>(AssetBundleManager.Instance().getAssetBundle(mBundleName)); var moduleTable = TableManager.Instance().GetTable <ProtoTable.ModuleTable>(); if (null == moduleTable) { mError = GMError.GME_LoadBaseModuleFailed; LoggerManager.Instance().LogErrorFormat("load ModuleTable Failed ..."); yield break; } LoggerManager.Instance().LogProcessFormat("Load ModuleTable Succeed !"); yield return(AssetBundleManager.Instance().LoadAssetBundleFromModule(1, null, () => { succeed = false; })); if (!succeed) { mError = GMError.GME_LoadBaseModuleFailed; LoggerManager.Instance().LogErrorFormat("load baseModule Failed ..."); yield break; } TableManager.Instance().LoadTableFromAssetBundle <ProtoTable.ResourceInfoTable>(AssetBundleManager.Instance().getAssetBundle(mBundleName)); var localResourcesInfoTable = TableManager.Instance().GetTable <ProtoTable.ResourceInfoTable>(); if (null == localResourcesInfoTable) { mError = GMError.GME_LoadBaseModuleFailed; LoggerManager.Instance().LogErrorFormat("加载游戏资源表失败..."); yield break; } TableManager.Instance().LoadTableFromAssetBundle <ProtoTable.FrameTypeTable>(AssetBundleManager.Instance().getAssetBundle(mBundleName)); var frameTypeTable = TableManager.Instance().GetTable <ProtoTable.FrameTypeTable>(); if (null == frameTypeTable) { mError = GMError.GME_LoadBaseModuleFailed; LoggerManager.Instance().LogErrorFormat("加载界面表失败..."); yield break; } var resourceInfoTable = AssetLoaderManager.Instance().Initialize(new AssetLoaderData { frameHandle = this, localResourcesInfoTable = localResourcesInfoTable, }); }
protected T _LoadResFromAssetBundle <T>(ResourceInfoTable resInfoItem, AssetBundle assetBundle, int iHashCode) where T : UnityEngine.Object { AssetType eAssetType = (AssetType)resInfoItem.TypeId; if (eAssetType == AssetType.AT_PREFAB) { if (resInfoItem.Path.Count != 2) { LoggerManager.Instance().LogErrorFormat("Load Prefab From AssetBundle Failed ... need 2 argvs ... now is {0}", resInfoItem.Path.Count); return(default(T)); } var assetInst = assetBundle.LoadAsset <T>(resInfoItem.Path[1]); if (null == assetInst) { LoggerManager.Instance().LogErrorFormat("Load Prefab From AssetBundle Failed ... ResId = {0} PathHashKey = {1} ...", resInfoItem.ID, resInfoItem.PathHashKey); return(default(T)); } _AddOrUpdateAlivedObject(resInfoItem, iHashCode, assetInst); return(UnityEngine.Object.Instantiate(assetInst) as T); } else if (eAssetType == AssetType.AT_SPRITE) { Sprite assetInst = null; if (resInfoItem.Path.Count != 3) { LoggerManager.Instance().LogErrorFormat("Load Sprite From AssetBundle Failed ... need 3 argvs ...now is {0}", resInfoItem.Path.Count); return(default(T)); } var sprites = assetBundle.LoadAssetWithSubAssets(resInfoItem.Path[1], typeof(Sprite)); if (null != sprites) { for (int i = 0; i < sprites.Length; ++i) { if (sprites[i].name == resInfoItem.Path[2]) { assetInst = sprites[i] as Sprite; break; } } } if (null == assetInst) { LoggerManager.Instance().LogErrorFormat("Load Sprite From AssetBundle Failed ... ResId = {0} PathHashKey = {1} ...", resInfoItem.ID, resInfoItem.PathHashKey); return(default(T)); } _AddOrUpdateAlivedObject(resInfoItem, iHashCode, assetInst); return(assetInst as T); } else if (eAssetType == AssetType.AT_ASSETS) { var assetInst = assetBundle.LoadAsset <T>(resInfoItem.Path[1]); if (null == assetInst) { LoggerManager.Instance().LogErrorFormat("Load Asset From AssetBundle Failed ... ResId = {0} PathHashKey = {1} ... type={2}", resInfoItem.ID, resInfoItem.PathHashKey, typeof(T).Name); return(default(T)); } _AddOrUpdateAlivedObject(resInfoItem, iHashCode, assetInst); return(assetInst as T); } return(default(T)); }