10_异步加载场景前打开加载窗口

首先要在资源加载场景时 先加载LoadingWnd 加载窗口

逻辑上是 

1.先加载 加载窗口LoadingWnd

2.在加载场景的同时 显示加载进度

3.最后在加载完成时关闭 加载窗口LoadingWnd

4.打开 登录窗口LoginWnd

如果想控制 窗口类Wnd.cs 需要创建Wnd.cs脚本 创建一个文件夹UIWindow用来存放所有窗口类

创建脚本 加载窗口LoadingWnd.cs

Wnd这种脚本是用来关联场景中的Prefab 来做场景交互的   (比如加载进度时的Image位置显示)

所以需要将对应的Wnd.cs脚本挂载在对应的 窗口对象上

因为 动态提示窗口DynamicWnd.cs(Tips) 和 加载进度窗口LoadingWnd.cs需要在整个游戏中频繁调用,所以 将这两个窗口的引用 留给GameRoot.cs 通过GameRoot.cs来调用这两个窗口 让这两个窗口什么时候显示与关闭

所以先将这两个窗口在 GameRoot.cs引用定义

using UnityEngine;
//功能 : 游戏启动入口
public class GameRoot : MonoBehaviour{
    #region 引用两个常用窗口Wnd
    //加载窗口引用
    public LoadingWnd loadingWnd;
    //TODO
    //动态提示窗口引用
    #endregion
    void Start(){
        #region 不可销毁
        DontDestroyOnLoad(this);
        #endregion
        Debug.Log("Game Start...");
        //调用自定义初始化
        Init();
    }
    void Init() {
        //服务模块初始化
        ResSvc res = GetComponent<ResSvc>();
        res.InitSvc();
        //业务系统初始化
        LoginSys login = GetComponent<LoginSys>();
        login.InitSys();

        //进入登陆界面 并 加载相应UI
        login.EnterLogin();
    }
}

接着在 登录业务系统层LoginSys.cs在异步加载登陆场景前 先打开加载窗口

又因为加载窗口LoadingWnd.cs 和 动态提示窗口DynamicWnd.cs需要在整个游戏中频繁调用所以被引用在GameRoot.cs类中 但GameRoot.cs还不是单例类不能再其它类中调用

所以要先将GameRoot.cs设置成单例类

using UnityEngine;
//功能 : 游戏启动入口
public class GameRoot : MonoBehaviour{
    #region 单例模式
    public static GameRoot Instance = null;
    #endregion
    #region 引用两个常用窗口Wnd
    //加载窗口引用
    public LoadingWnd loadingWnd;
    //TODO
    //动态提示窗口引用
    #endregion
    void Start(){
        #region 单例模式
        Instance = this;
        #endregion
        #region 不可销毁
        DontDestroyOnLoad(this);
        #endregion
        Debug.Log("Game Start...");
        //调用自定义初始化
        Init();
    }
    void Init() {
        //服务模块初始化
        ResSvc res = GetComponent<ResSvc>();
        res.InitSvc();
        //业务系统初始化
        LoginSys login = GetComponent<LoginSys>();
        login.InitSys();

        //进入登陆界面 并 加载相应UI
        login.EnterLogin();
    }
}

这样我们就可以在 登陆业务系统LoginSys.cs 中调用让游戏在加载登录背景场景前 先打开加载窗口

using UnityEngine;
//功能 : 登陆注册业务系统
public class LoginSys : MonoBehaviour{
    public void InitSys() {
        Debug.Log("Init LoginSys...");
    }
    //进入登录界面
    public void EnterLogin() {
        //单例引用显示 加载窗口
        GameRoot.Instance.loadingWnd.gameObject.SetActive(true);
        //TODO
        //异步加载登录界面
        #region 调用ResSvc单例类
        ResSvc.Instance.AsyncLoadScene(Constans.SceneLogin);
        #endregion
        //并显示加载进度
        //加载完成后再打开登陆界面
    }
}

最后在 游戏根入口对象GameRoot.cs上绑定关联所引用的 加载窗口

隐藏加载窗口

运行 项目会在异步加载 登录背景场景SceneLogin 前先打开 加载窗口LoadingWnd.cs

之后进入SceneLogin场景

End.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值