24_游戏启动逻辑梳理总结

首先这个项目从游戏根入口GameRoot.cs的初始化开始

分为 服务层初始化Svc.cs 与 业务系统层初始化Sys.cs

而服务层 分为 资源加载服务层ResSvc.cs 与 音乐播放服务层AudioSvc.cs

而在 资源加载服务层ResSvc.cs中 初始化了 名字的 配置文件

而音乐播放服务层AudioSvc.cs 暂时没有初始化的类

其中服务层Svc.cs 是服务于 业务系统层Sys.cs的

所以 其服务层的初始化Svc.cs 要先于 业务系统层的初始化Sys.cs

而业务系统层初始化Sys.cs中 是进入登录场景SceneLogin的初始化

初始化完成之后 调用 登录-业务系统层LoginSys.cs 进入登陆场景

在 异步加载登陆场景时 是一个动态的过程 需要更新加载进度

而这个加载进度的更新 是通过 公共业务系统的窗口API(DynamicWnd.cs 和 LoadingWnd.cs)调用的

公共的意思是在每一个界面都可能 使用到这两个窗口业务系统API(DynamicWnd.cs 和 LoadingWnd.cs)

又因为这两个窗口公共业务系统API(DynamicWnd.cs 和 LoadingWnd.cs)会被经常用到

所以这两个脚本的引用 包留放在游戏根入口GameRoot.cs中

当这个登录场景SceneLogin 异步加载完成(val == 1)后 使用回调函数 打开窗口与背景音乐 最后置空 后停止调用

当打开 登录窗口LoginWnd.cs 点击进入游戏后 会读取账号和密码数据并发送网络消息

去请求登录

这里因还未写网络端所以模拟写了请求函数

最后为了代码的简洁写了两个基类(窗口基类WindowsRoos.cs 和 业务系统基类SystemRoot.cs)

cs 复制代码
using UnityEngine;
using UnityEngine.UI; //文本 命名空间
//功能 : 窗口基类
public class WindowsRoot : MonoBehaviour{
    #region 引用加载资源服务
    protected ResSvc resSvc = null;
    #endregion
    #region 引用音乐播放资源服务
    protected AudioSvc audioSvc = null;
    #endregion
    public void SetWndState(bool isActive = true) {
        //判断当前状态是否和目标状态相同
        if (gameObject.activeSelf != isActive) {
            gameObject.SetActive(isActive);
        }
        if (isActive){
            InitWnd();
        }
        else {
            ClearWnd();
        }
    }
    protected virtual void InitWnd() {
        #region 引用加载资源服务
        //初始化时拿到 加载资源引用
        resSvc = ResSvc.Instance;
        #endregion
        #region 引用音乐播放资源服务
        audioSvc = AudioSvc.Instance;
        #endregion
    }
    protected virtual void ClearWnd() {
        #region 引用加载资源服务
        //清空 加载资源引用
        resSvc = null;
        #endregion
        #region 引用音乐播放资源服务
        audioSvc = null;
        #endregion
    }
    #region 文本设置通法
    protected void SetText(Text txt, string context = ""){
        txt.text = context;
    }
    #endregion
}

窗口基类WindowsRoot.cs 集合了共有的方法

当子类重写设置窗口状态时 根据显示或隐藏 自动初始化窗口 或清理窗口资源

在基类初始化时 拿到了 资源以及声音服务的初始化引用

子类只需要resSvc.或audioSvc.调用即可

也包含了 设置文本组件的方法

而业务系统基类SystemRoot.cs 也是一样的思想

在初始化时 拿到相关引用方便子类调用

cs 复制代码
using UnityEngine;
// 功能 : 业务系统基类
public class SystemRoot : MonoBehaviour{
    protected ResSvc resSvc;
    protected AudioSvc audioSvc;

    public virtual void InitSys() {
        resSvc = ResSvc.Instance;
        audioSvc = AudioSvc.Instance;
    }
}

End.

相关推荐
R-G-B1 分钟前
【06】C#入门到精通——C# 多个 .cs文件项目 同一项目下添加多个 .cs文件
开发语言·c#·c# 多个 .cs文件项目
懒人Ethan15 小时前
解决一个C# 在Framework 4.5反序列化的问题
java·前端·c#
mysolisoft17 小时前
Avalonia+ReactiveUI实现记录自动更新
c#·avalonia·reactiveui·sourcegenerator
心疼你的一切18 小时前
使用Unity引擎开发Rokid主机应用的模型交互操作
游戏·ui·unity·c#·游戏引擎·交互
韩立学长18 小时前
【开题答辩实录分享】以《C#大型超市商品上架调配管理系统的设计与实现》为例进行答辩实录分享
开发语言·c#
玩泥巴的21 小时前
.NET驾驭Word之力:数据驱动文档 - 邮件合并与自定义数据填充完全指南
c#·word·.net·com互操作
心疼你的一切1 天前
使用Unity引擎开发Rokid主机应用的全面配置交互操作
学习·游戏·unity·c#·游戏引擎·交互
椒颜皮皮虾྅1 天前
【DeploySharp 】基于DeploySharp 的深度学习模型部署测试平台:安装和使用流程
人工智能·深度学习·开源·c#·openvino
kalvin_y_liu2 天前
【MES架构师与C#高级工程师(设备控制方向)两大职业路径的技术】
开发语言·职场和发展·c#·mes
椒颜皮皮虾2 天前
基于DeploySharp 的深度学习模型部署测试平台:支持YOLO全系列模型
c#