首先要在资源加载场景时 先加载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.