예제 #1
0
        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);
                    }
                }
            }
        }
예제 #2
0
        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();
            }
        }
예제 #3
0
        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();
                }
            }
        }
예제 #4
0
        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;
            }
        }
예제 #5
0
 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);
                 }
             });
         }
     }
 }
예제 #6
0
        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);
                    }
                }
            }
        }
예제 #7
0
        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));
        }
예제 #8
0
        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();
                    }
                }
            }
        }
예제 #9
0
        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));
        }
예제 #10
0
        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 !");
        }
예제 #11
0
        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();
            }
        }
예제 #12
0
        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);
                }
            }
        }
예제 #13
0
        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();
                        }
                    }
                }
            }
        }
예제 #14
0
 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);
     }
 }
예제 #15
0
        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();
        }
예제 #16
0
        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);
                }
            }
        }
예제 #17
0
        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));
        }
예제 #18
0
        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();
                }
            }
        }
예제 #19
0
        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]);
                        }
                    }
                };
            }
        }
예제 #20
0
        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);
        }
예제 #21
0
 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);
     }
 }
예제 #22
0
        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;
            }
        }
예제 #23
0
        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);
        }
예제 #24
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;
        }
예제 #25
0
        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);
            }
        }
예제 #26
0
        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());
        }
예제 #27
0
 public void Clear()
 {
     LoggerManager.Instance().LogProcessFormat("ClearAllEvents ...");
     mEventDispatcher.Clear();
 }
예제 #28
0
        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 ...");
            }
        }
예제 #29
0
        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,
            });
        }
예제 #30
0
        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));
        }