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)

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 也是一样的思想

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

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

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

End.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/959406.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

125周六复盘 (167)帧数优化

1、关键词:帧数优化 2、上午收到一个平台的邮件,说欧盟DSA法案的事,然后联系客服解决问题。 3、近期测试中发现某些关卡帧数奇低,很是异常。 然后今天用了一天时间来排查、解决问题。 通过测试工具发现游戏逻辑部分耗时太多&…

使用 OpenCV 和 Python 轻松实现人脸检测

目录 一、准备工作 二、加载人脸检测模型 三、读取图像并进行人脸检测 四、处理视频中的人脸检测 五、优化人脸检测效果 六、总结 在人工智能和计算机视觉领域,人脸检测是一项非常基础且重要的技术。通过人脸检测,我们可以在图像或视频中识别并定位人脸,进而进行后续的…

Windows电脑安装USB Redirector并实现内外网跨网USB共享通信访问

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 我们每天都在与各种智能设备打交道,从手机到电脑,再到各种外设,它们已经…

20250122-正则表达式

1. 正则标记 表示一位字符:\\ 表示指定的一位字符:x 表示任意的一位字符:. 表示任意一位数字:\d 表示任意一位非数字:\D 表示任意一个字母:[a-zA-Z](大写或小写) 表示任意一个…

RDMA 工作原理 | 支持 RDMA 的网络协议

注:本文为 “RDMA” 相关文章合辑。 英文引文机翻未校。 图片清晰度受引文所限。 Introduction to Remote Direct Memory Access (RDMA) Written by: Dotan Barak on March 31, 2014.on February 13, 2015. What is RDMA? 什么是 RDMA? Direct me…

Pandoc新手使用常见问题

一、Pandoc可以做什么? Pandoc 可以很方便快捷地对不同语言的文件进行格式转换,因此被誉为格式转换的「瑞士军刀」。常见的应用包括但不限于将markdown格式文件转换为latex格式和pdf格式等等。 二、下载与安装 访问Pandoc官网进行安装包下载。 下载完…

无耳科技 Solon v3.0.7 发布(2025农历新年版)

Solon 框架! Solon 框架由杭州无耳科技有限公司(下属 Noear 团队)开发并开源。是新一代,面向全场景的 Java 企业级应用开发框架。从零开始构建(非 java-ee 架构),有灵活的接口规范与开放生态。…

用科技守护团圆时光,约克VRF中央空调新天氟地水/天氟热水让春节更美好!

冬日,是思念的漫卷。有一种温暖,叫回家过年。在每个人的心中,都有着将自己的家营造得更加舒适、健康的愿望,尤其在近些年,受益于国内经济的快速增长,以及人民生活水平提升带来的对生活居住环境舒适度要求的提高,中央空调正在成为越来越多家庭的首选,而全面升级焕新的约克VRF中央…

如何获取小程序的code在uniapp开发中

如何获取小程序的code在uniapp开发中,也就是本地环境,微信开发者工具中获取code,这里的操作是页面一进入就获取code登录,没有登录页面的交互,所以写在了APP.vue中,也就是小程序一打开就获取用户的code APP.…

css3 svg制作404页面动画效果HTML源码

源码介绍 css3 svg制作404页面动画效果HTML源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果 效果预览 源码如下 <!doctype html> <html> <head> <meta charse…

JAVAweb学习日记(八) 请数据库模型MySQL

一、MySQL数据模型 二、SQL语言 三、DDL 详细见SQL学习日记内容 四、DQL-条件查询 五、DQL-分组查询 聚合函数&#xff1a; 分组查询&#xff1a; 六、DQL-分组查询 七、分页查询 八、多表设计-一对多&一对一&多对多 一对多-外键&#xff1a; 一对一&#xff1a; 多…

leetcode28-找出字符串中第一个匹配的下标

leetcode 28 思路 首先循环haystack&#xff0c;然后当当前字符和needle的首字母相同的时候截取出长度等于needle的字符串&#xff0c;进行比较是否相等&#xff0c;如果相等则说明当前index为第一个匹配的下标&#xff0c;如果不相等则说明不正确继续进行遍历&#xff0c;直…

【含代码】逆向获取 webpack chunk 下的__webpack_require__ 函数,获悉所有的模块以及模块下的函数

背景 Webpack 打包后的代码是不会直接暴露 __webpack_require__ 函数&#xff0c;目的是为了避免污染全局变量同时也为了保护 webpack 的打包后的模块都隐藏在闭包函数里&#xff0c;达到数据的安全性。 而有时我们为了测试某个函数&#xff0c;想直接获取这个内置函数&#…

什么是区块链

区块链是一种去中心化的分布式账本技术&#xff0c;它通过一系列复杂而精密的设计原则和机制来确保数据的安全性、透明性和不可篡改性。在最基础的层面上&#xff0c;区块链是由一系列按照时间顺序链接起来的数据块组成的链式结构。每个数据块中包含了一定数量的交易记录或状态…

【嵌入式】总结——Linux驱动开发(三)

鸽了半年&#xff0c;几乎全忘了&#xff0c;幸亏前面还有两篇总结。出于快速体验嵌入式linux的目的&#xff0c;本篇与前两篇一样&#xff0c;重点在于使用、快速体验&#xff0c;uboot、linux、根文件系统不作深入理解&#xff0c;能用就行。 重新梳理一下脉络&#xff0c;本…

使用MQTT.fx向阿里云物理网平台上报物理模型数据

MQTT向阿里云物理网平台上报物理模型数据 一、前言二、测试三、结束语 一、前言 上一篇文章介绍了阿里云物联网平台的基本使用&#xff08;文章入口&#xff09;&#xff0c;本篇博客接着来讲&#xff0c;主要介绍如何使用MQTT连接测试工具向阿里云物联网平台上报物理模型数据。…

用Ollama跑DeepSeek R1

文章目录 1. 下载Ollama2. 安装Ollama3. 下载DeepSeek R14. 体验DeepSeek R14.1 智能客服与问答系统4.2 内容创作与文案生成4.3 编程与代码辅助4.4 教育与学习辅助微积分基础练习题题目1&#xff1a;极限计算题目2&#xff1a;导数计算&#xff08;基本函数&#xff09;题目3&a…

Linux 设备树

系列文章目录 Linux 知识&#xff08;2&#xff09; 文章目录 系列文章目录一、介绍二、分析工具查找 DTSoverlay流程分析初始化设备注册 参考 一、介绍 设备树(Device Tree)&#xff0c;将这个词分开就是“设备”和“树”&#xff0c;描述设备树的文件叫做 DTS(Device Tree So…

iOS 集成ffmpeg

前言 本来打算用flutter去实现一个ffmpeg的项目的&#xff0c;不过仔细分析了一下&#xff0c;我后期需要集成OpenGL ES做视频渲染处理&#xff0c;OpenGL ES的使用目前在flutter上面还不是很成熟&#xff0c;所以最后还是选择用原生来开发 ffmpeg集成到iOS工程 iOS对于ffmp…

手机app如何跳过无障碍权限实现弹框自动点击-ADB连接专题

手机app如何跳过无障碍权限实现弹框自动点击 --ADB连接专题 一、前言 我们在前期的时候&#xff0c;在双SIM卡进行协同外呼和SIM卡切换时&#xff0c;对如何在手机中“执行批处理脚本做自动点击”的内容进行预研&#xff0c;力图使用事件触发和坐标点击等方式来实现手机安装…