Unity GameFramework Star Force 拆解(一)—— 启动流程

文章目录

    • 启动流程:
      • ProcedureLaunch:
      • ProcedureSplash:
      • ProcedureInitResources:
      • ProcedurePreload:
      • ProcedureChangeScene:
      • ProcedureMenu:
      • ProcedureMain:

首先,我是个菜鸡,其次,这是我第一次了解GameFramework,这也是我打算写这篇文章的目的,我希望从头到尾了解一遍GameFramework,通过这个小Demo来进一步了解框架和制作流程,这样我就可以做个大Demo了()

万事开头难,先从整体框架来看,这是最简单的,因为每个教你这个框架的人开头都会说,并且都是一样的

这个框架虽然几年没更新,但实际本身已经非常完善,虽然我还没学,不过听说做的很漂亮规范,对于初学者而言,也是一个非常值得学习的开源框架。

启动流程:

GameFrameworkComponent 在 Awake 中向静态类 GameEntry 注册自己(所有组件都放在场景中的预制体里了)

StarForce.GameEntry 在 Start 中将所有已注册的组件缓存到自己身上的静态字段中(方便本项目内的类使用)

GameEntry被分成了三份,Builtin负责缓存框架组件到自身,Custom负责缓存自定义组件到自身,而这两个初始化操作在什么后缀都没有的GameEntry的那份使用Monobehavior的Start函数进行调用

接下来是Procedure的逐步初始化。GameFramework将游戏的整个流程拆解成有限状态机,使得流程明确,逻辑得以分散,即方便阅读,也方便理解。

GameFramework会自动在视图更新所有继承自ProcedureBase的类,因此我们自己继承一个后也会被显示上去。设定哪个流程是开始流程的选项,只需要选择对应的类即可,就像枚举一样。

首先是在场景中的Procedure中就配置的ProcedureLaunch,一切从该状态开始

ProcedureLaunch:

第一步先初始化BuildinData,虽然叫Buildin,不过这个是一个Custom组件,放在了场景中GameFramework的Custom下。这个数据应该是用来进行资源热更新用的,其内部记录了版本号,检查版本和各个平台的资源获取路径。初始化就是将在场景中拖动到该组件上的版本文本资源给解释成C#类,不然代码没法读取其数据

第二步是进行语言的配置,首先从GameEntry.Localization中拿出language,然后将其赋值为GameEntry.Setting中存储的Language(当然是在有的前提下),之后对语言进行,检查,是不支持的语言就默认改成英语,这个操作同样要再同步回GameEntry.Setting

第三步是加载资源包变体,GameFramework不仅允许字体的本地化,同时还支援了资源包的本地化,即不同的语言对应了不同的资源包,更加的自由哇!!!这里是调用GameEntry.Resource的SetCurrentVariant来加载对应变体。

第四步比较简单,是初始化设置音量,直接挨个读取GameEntry.Setting的值,然后设置进GameEntry.Sound就行

ProcedureSplash:

这个状态看了下,说是可以放个闪屏动画,不过通过流程可以看出来,这个是用于分支的状态,在这之后,程序会按照设置走向编辑器,单机,可更新三种状态的其中一个。除了分流外什么也没干

编辑器模式直接走向ProcedurePreload,可更新和单机走向ProcedureCheckVersion和ProcedureInitResources两个不同状态,其中可更新会走向一个很长的更新流程(就是一般资源热更新该做的所有事情),而单机会在下一个状态走向ProcedurePreload,因此现在先忽略可更新,看一下ProcedureInitResources和ProcedurePreload

ProcedureInitResources:

调了俩接口,从UnityGameFrameworkComponent调到GameFrameworkComponent层去了,没下GameFramework,暂时看不到引用(),总之就是UGF层的Resource组件调了个InitResource。

ProcedurePreload:

预加载加载了四大东西:Config,DataTable,Dictionary,Font

看了下都是拼了个路径再调用对应的模块去读取这些配置文件,将其作为C#对象存在了模块中,方便后续读取

预加载结束后,设定下一个场景ID为Menu场景,接着转到下一个场景

ProcedureChangeScene:

在这一层对场景进行异步加载,如果是加载到菜单场景的,就会跳入ProcedureMenu,否则会进入ProcedureMain(扩展自己的项目的时候可以将场景ID写入全局配置使用,再在该流程进行一个切换)

ProcedureMenu:

这一层打开了MenuUI,并且向UI提供了StartGame的函数接口,用于调用,其会将开始游戏的flag设置为true,流程会立刻向后推进,加载Main地图,然后就会进入ProcedureChangeScene,接着在地图加载完后进入ProcedureMain

ProcedureMenu和MenuForm息息相关,ProcedureMenu进入会打开MenuForm,并将自己注入UI中,UI异步打开完成后会缓存ProcedureMenu的引用

同时ProcedureMenu状态离开时也会主动关闭MenuForm

ProcedureMain:

看了下,该进程主要逻辑是控制当前的游戏模式和何时切换回菜单

游戏模式的类是GameBase,其Initialize被ProcedureMain调用,包括了

  • 显示玩家飞机到默认位置
  • 获取背景图的缓存

SurvivalGame是唯一的游戏模式,继承自GameBase,在Update中新增了随机生成敌人的逻辑

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基于TensorFlow实现双向循环神经网络GRU加注意力机制分类模型(BiGRU-Attention分类算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着深度学习技术的发展,循环神经网络(RNN)及其变种如门控循环…

echart实现地图数据可视化

文章目录 [TOC](文章目录) 前言一、基本地图展示2.数据可视化 总结 前言 最近工作安排使用echarts来制作图形报表,记录一下我的步骤,需求呈现一个地图,地图显示标签,根据业务指标值给地图不同省市填充不同颜色,鼠标放…

数学真题总结

举反例 看清正负号 对应的特征值一致 不用裁开计算行列式要注意符号!!! 根据值的大小确定正负 没有思路就构建tanx求极值要考虑端点线性方程:求通解归并x几何意义 整体思想 u e^x y都设计好了,曲线是f(x,y) 0,直接把…

ES跟Kafka集成

配合流程 1. Kafka作为分布式流处理平台,能够实时收集和处理不同数据源的数据流; 2. 通过Kafka Connect或者Logstash等中间件,可以将Kafka中的数据流实时推送到Elasticsearch中; 3. Elasticsearch接收到数据后,会根据…

价格文本对齐

记录一下工作里常遇到的一些简单问题: 需求是一个购买按钮上同时展示原价和现价: 1.原价现价文本格式不同 2.原价切需要加打折红线,不方便用富文本一个文本处理。 3.需要对两条文本适配父节点的宽度,不能超出按钮 以下是实现代…

c++:vector模拟实现

一、vector成员变量 库里实现用的就是这三个成员变量&#xff0c;咱们实现跟库里一样&#xff0c; namespace myvector {template<class T>class vector{public://vecttor的迭代器是原生指针typedef T* iterator;typedef const T* const_iterator; private:iterator _sta…

Microsoft.Extensions.Configuration 中检测到版本冲突

同一个项目用VS2019 可以正常打开编译运行 用VS2022打开编译报如下错误, 项目要求使用 .NET Core 2.2 版本 代码 说明 项目 文件 行 禁止显示状态 错误(活动) NU1107 Microsoft.Extensions.Configuration 中检测到版本冲突。直接安装/引用 Microsoft.Extensions.Configuratio…

【热门主题】000023 计算机视觉:算法与应用的深度探索

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…

国产服务器平台离线部署k8s和kubesphere(含离线部署新方式)

"信创&#xff1a;鲲鹏麒麟&#xff0c;ARM64架构&#xff0c;实现K8s和Kubesphere的离线部署&#xff0c;全新方式助力企业高效运维。" 本文将深入探讨如何借助鲲鹏CPU(arm64)和操作系统Kylin V10 SP2/SP3,通过KubeKey制作KubeSphere与Kubernetes的离线安装包&#…

面试题整理 2

总结了本次面试遇到的值得整理记录的面试题。 目录 变量赋值判断 变量判断 Foreach使用 Mysql优化策略 合理的索引设计 查询优化 数据表结构设计 配置优化 合理使用事务 定期维护数据库 使用缓存 监控与性能分析 Redis主从复制 介绍 配置 示例 Redis 数据类型…

SOLID原则-单一职责原则

转载请注明出处:https://blog.csdn.net/dmk877/article/details/143447010 作为一名资深程序员越来越感觉到基础知识的重要性&#xff0c;比如设计原则、设计模式、算法等&#xff0c;这些知识的长期积累会让你突破瓶颈实现质的飞跃。鉴于此我决定写一系列与此相关的博客&…

「C/C++」C/C++ 之 指针详解

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

CSS--导航栏案例

利用CSS制作北大官网导航栏 详细代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>*{margin: 0;padding: 0;}#menu{background-color: darkred;width: 100%;height: 50px…

【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割!

【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割&#xff01; 【语义分割|代码解析】CMTFNet-2: CNN and Multiscale Transformer Fusion Network 用于遥感图像分割&#xff01; 文章目录 【语义分割|代码解析】CMTFNet-2: …

基于 Python 的 Django 框架开发的电影推荐系统

项目简介&#xff1a;本项目是基于 Python 的 Django 框架开发的电影推荐系统&#xff0c;主要功能包括&#xff1a; 电影信息爬取&#xff1a;获取并更新电影数据。数据展示&#xff1a;提供电影数据的列表展示。推荐系统&#xff1a;基于协同过滤算法实现个性化推荐。用户系…

Spring Boot 集成 RocketMQ

在现代分布式系统中&#xff0c;消息队列扮演着至关重要的角色。它能够实现系统间的异步通信、解耦组件以及提高系统的可扩展性和可靠性。RocketMQ 作为一款高性能、分布式的消息中间件&#xff0c;被广泛应用于各种大规模系统中。而 Spring Boot 作为一种流行的 Java 开发框架…

Window系统性能调优

1. 系统设置优化 性能选项调整&#xff1a; 右键点击“此电脑” > “属性” > “高级系统设置” > “性能” > “设置”。在“视觉效果”选项卡中&#xff0c;选择“调整为最佳性能”以禁用不必要的动画和效果&#xff0c;或选择自定义禁用特定效果。 电源选项&…

高并发场景下的性能测试方法!

在现代互联网应用中&#xff0c;高并发场景下的性能测试显得尤为重要。无论是电商平台的秒杀活动&#xff0c;还是社交应用的突发流量&#xff0c;都需要确保系统能够在高并发情况下稳定运行。本文将详细介绍高并发场景下的性能测试方法&#xff0c;并提供具体的方案和实战演练…

苹果开发 IOS 证书生成步骤

前提条件 你手上有一台 Macbook你的苹果账号已被添加到开发人员中 证书创建步骤 打开 XCode 直接生成 p12证书生成后&#xff0c;就可在苹果开发者管理界面中看到你的证书记录登录苹果开发中心&#xff0c;创建 profiles 文件&#xff0c;并下载以上步骤即可&#xff0c;就这…

超萌!HTMLCSS:超萌卡通熊猫头

效果演示 创建了一个卡通风格的熊猫头 HTML <div class"box"><div class"head"><div class"head-copy"></div><div class"ears-left"></div><div class"ears-right"></di…