Beispiel #1
0
    /// <summary>
    /// 开始加载下一个场景
    /// </summary>
    /// <param name="scene"></param>
    /// <param name="res"></param>
    public void StartLoadScene(GameResources.SceneName scene, List <LoadResourcesModel> res, CallBack loadcall)
    {
        MaxResourcesProgressValue = 100;
        //重置进度条显示
        ProgressSlider.value = 0;
        //重置进度显示
        ProgressText.text = "正在加载中...  0%";
        //重置资源加载进度值
        ResProgressValue = 0;
        //重置已经加载的资源
        LoadResourcesNumber = 0;
        //重置场景加载进度值
        SceneProgressValue = 0;
        //重置资源加载显示进度值
        ResProgress = 0;
        //开始加载场景
        IsStartLoading = true;
        ProgressGameObject.SetActive(true);
        switch (scene)
        {
        case GameResources.SceneName.BATTLE:
        case GameResources.SceneName.MAIN:
            MaxResourcesProgressValue = 0;
            break;

        default:
            ProgressGameObject.SetActive(true);
            break;
        }
        StartCoroutine(LoadScene(scene, res, loadcall));
    }
Beispiel #2
0
    /// <summary>
    /// 加载场景
    /// </summary>
    /// <param name="scene"></param>
    /// <returns></returns>
    IEnumerator LoadScene(GameResources.SceneName scene, List <LoadResourcesModel> list, CallBack loadcall = null)
    {
        //展示用的进度
        int displaypro = 0;
        //实际的进度
        int topro = 0;

        //开始加载下一个场景
        async = SceneManager.LoadSceneAsync(GameData.Instance.SceneName[scene]);
        //暂时不进去下一个场景
        async.allowSceneActivation = false;
        //yield return async;
        //在加载进度不足90%时,进行进度条缓动动画
        while (async.progress < 0.9f)
        {
            //如果我们的显示进度尚未达到实际进度时,每帧增加百分之一
            topro = (int)(async.progress * 100f);
            while (displaypro < topro)
            {
                displaypro++;
                SceneProgressValue = (int)(displaypro * 0.5f);
                yield return(new WaitForFixedUpdate());
            }
        }
        //加载最后一段进度
        topro = 100;
        while (displaypro < topro)
        {
            displaypro++;
            SceneProgressValue = displaypro / 2;
            yield return(new WaitForFixedUpdate());
        }
        //加载资源
        LoadResources(list);
        displaypro = 0;
        //如果我们的显示进度尚未达到实际进度时,每帧增加百分之一
        while (ResProgressValue <= 100 && displaypro < MaxResourcesProgressValue)
        {
            displaypro++;
            ResProgress = displaypro / 2;
            yield return(new WaitForFixedUpdate());
        }

        //全部加载完毕后,进入下一个场景
        async.allowSceneActivation = true;
        //等待场景真正加载完毕
        while (!async.isDone)
        {
            yield return(new WaitForFixedUpdate());
        }
        IsStartLoading = false;
        //全部加载完毕后,执行回调
        if (loadcall != null)
        {
            loadcall();
        }

        //将加载页面隐藏
        ProgressGameObject.SetActive(false);
    }
Beispiel #3
0
    /// <summary>
    /// 加载场景
    /// </summary>
    /// <param name="tag"></param>
    public void LoadScene(GameResources.SceneName tag)
    {
        //如果当前场景名称和要加载的场景名称一致,则直接返回
        if (GameData.Instance.GameLevelName == GameData.Instance.SceneName[tag])
        {
            return;
        }
        //要加载的资源
        List <LoadResourcesModel> rModel = new List <global::LoadResourcesModel>();

        //加载完成后的回调
        LoadManager.CallBack call = null;
        switch (tag)
        {
        case GameResources.SceneName.LOGIN:
        {
            LoadResourcesModel rM = new global::LoadResourcesModel();
            rM.type = GameResources.ResourceType.PREFAB;
            rM.path = GameResources.UIResourcesPath + GameData.Instance.CanvasName[GameResources.CanvasTag.CANVASLOGIN];
            rModel.Add(rM);
            call = delegate()
            {
                //场景是空白场景,UI或其他资源在场景加载后进行实例化生成,添加到本场景
                GameObject go = GameApp.Instance.ResourcesManagerScript.LoadInstantiateGameObject(rM.path, null, Vector3.zero);
                //UI和代码同样也是分离的,方便代码热更新
                go.AddComponent <UI_Login>();
            };
        }
        break;

        case GameResources.SceneName.LOGO:
        {
            LoadResourcesModel rM = new global::LoadResourcesModel();
            rM.type = GameResources.ResourceType.PREFAB;
            rM.path = GameResources.UIResourcesPath + GameData.Instance.CanvasName[GameResources.CanvasTag.CANVASLOGO];
            rModel.Add(rM);
            call = delegate()
            {
                //场景是空白场景,UI或其他资源在场景加载后进行实例化生成,添加到本场景
                GameObject go = GameApp.Instance.ResourcesManagerScript.LoadInstantiateGameObject(rM.path, null, Vector3.zero);
                //UI和代码同样也是分离的,方便代码热更新
                go.AddComponent <UI_logo>();
            };
        }
        break;

        case GameResources.SceneName.MAIN:
        {
            LoadResourcesModel rM = new LoadResourcesModel();
            rM.type = GameResources.ResourceType.PREFAB;
            rM.path = GameResources.UIResourcesPath + GameData.Instance.CanvasName[GameResources.CanvasTag.CANVASMAIN];
            rModel.Add(rM);
            call = delegate()
            {
                //场景是空白场景,UI或其他资源在场景加载后进行实例化生成,添加到本场景
                GameObject go = GameApp.Instance.ResourcesManagerScript.LoadInstantiateGameObject(rM.path, null, Vector3.zero);
                //UI和代码同样也是分离的,方便代码热更新
                go.AddComponent <UI_main>();
            };
        }
        break;

        case GameResources.SceneName.BATTLE:
        {
            LoadResourcesModel rM = new LoadResourcesModel();
            rM.type = GameResources.ResourceType.PREFAB;
            rM.path = GameResources.UIResourcesPath + GameData.Instance.CanvasName[GameResources.CanvasTag.CANVASBATTLE];
            rModel.Add(rM);

            LoadResourcesModel rM1 = new LoadResourcesModel();
            rM1.type = GameResources.ResourceType.PREFAB;
            rM1.path = GameResources.UIResourcesPath + GameData.Instance.SystemUI[GameResources.SystemUIType.CARDOTHER_TP];
            rModel.Add(rM1);

            LoadResourcesModel rM2 = new LoadResourcesModel();
            rM2.type = GameResources.ResourceType.PREFAB;
            rM2.path = GameResources.UIResourcesPath + GameData.Instance.SystemUI[GameResources.SystemUIType.UIFIGHT_TP];
            rModel.Add(rM2);

            call = delegate()
            {
                //场景是空白场景,UI或其他资源在场景加载后进行实例化生成,添加到本场景
                GameObject go = GameApp.Instance.ResourcesManagerScript.LoadInstantiateGameObject(rM.path, null, Vector3.zero);
                //UI和代码同样也是分离的,方便代码热更新
                go.AddComponent <GameOther>();
            };
        }
        break;
        }
        //开始加载场景
        GameApp.Instance.LoadManagerScript.StartLoadScene(tag, rModel, call);
    }