Unity技术-GameFramework-官方案例解析

这篇具有很好参考价值的文章主要介绍了Unity技术-GameFramework-官方案例解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

😜下载项目

在本地创建个文件夹,利用git下载项目(推荐)

  • 1.git init

  • 2.git clone https://github.com/EllanJiang/StarForce.git

  • 3.如果上面github下载慢,可以去gitee下载

git clone https://gitee.com/jiangyin/StarForce.git

使用Unity打开工程,我的是Unity2019.4.9f1版本,打开可能有点慢,不急,等一等。

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

进去后运行StarForce Launcher,即可开始游戏。(可能出现不同Unity版本打开的时候脚本里面的API或者什么有报错,自己对应修改下就行了)

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

😜寻找入口

任何一款游戏入口是第一印象,程序入口是开发的切入口。案例的入口找起来也很快,有个StarForce Launcher的场景,点进去发现只有个Game Framework的物体,挂载着【GameEntry】脚本,拿这个脚本必定是入口了,点进去看看。

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

发现里面只有两个函数方法;这么简单?点进去看看;

private static void InitBuiltinComponents()

{

Base = UnityGameFramework.Runtime.GameEntry.GetComponent();

Config = UnityGameFramework.Runtime.GameEntry.GetComponent();

DataNode = UnityGameFramework.Runtime.GameEntry.GetComponent();

DataTable = UnityGameFramework.Runtime.GameEntry.GetComponent();

Debugger = UnityGameFramework.Runtime.GameEntry.GetComponent();

Download = UnityGameFramework.Runtime.GameEntry.GetComponent();

Entity = UnityGameFramework.Runtime.GameEntry.GetComponent();

Event = UnityGameFramework.Runtime.GameEntry.GetComponent();

FileSystem = UnityGameFramework.Runtime.GameEntry.GetComponent();

Fsm = UnityGameFramework.Runtime.GameEntry.GetComponent();

Localization = UnityGameFramework.Runtime.GameEntry.GetComponent();

Network = UnityGameFramework.Runtime.GameEntry.GetComponent();

ObjectPool = UnityGameFramework.Runtime.GameEntry.GetComponent();

Procedure = UnityGameFramework.Runtime.GameEntry.GetComponent();

Resource = UnityGameFramework.Runtime.GameEntry.GetComponent();

Scene = UnityGameFramework.Runtime.GameEntry.GetComponent();

Setting = UnityGameFramework.Runtime.GameEntry.GetComponent();

Sound = UnityGameFramework.Runtime.GameEntry.GetComponent();

UI = UnityGameFramework.Runtime.GameEntry.GetComponent();

WebRequest = UnityGameFramework.Runtime.GameEntry.GetComponent();

}

InitBuiltinComponents()-光看名字就知道初始化内置组件,另一个就是初始化自定义的组件了。

等等,好像哪里不对!怎么感觉是不同的文件?

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

GameEntry竟然有三个类,我哩个去,挺6的啊。仔细看,原来是partial class作祟。

partial class是部分类关键字,什么是部分类?就是将一个类的代码根据不同的内容逻辑划分开,然后写在不同的文件中,这样有利于多位开发人员同时对该类处理,既增强可读性又实用。而且命名的时候最好也规范化,比如主部分类文件名为AClass,次部分类就为AClass.PartName。

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

Partial 关键字还有几点注意

  • 1.所有部分类都要使用partial关键字

  • 2.各个部分访问权限要一致,是public就都是public,是其他的就都是其他的

  • 3.其中任意一个声明抽象类型,整个类型都会是抽象的

  • 4.她们内部的任何类,结构等是可以相互使用的

😜真假入口?

之前的文章中找到个初步入口代码发现就走不动了,这不对啊,按道理讲找到入口就应该层层递进分析透彻,唰唰唰咔咔咔的打通奇经八脉。卡在这可不甘心啊。我又在官方看介绍,发现官方有个流程一说,她就像人的大脑心脏一样,有条不絮的管理整个身体。

官方案例中确实也有个流程(procedure)的物体,那我们就一探究竟,看看到底是不是真正的入口。

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

这个流程组件,从直观上来看只是提供了勾选功能,没有其他功能,那这“玄乎”的内容里面到底做了什么呢?

我们先随便找到个流程文件看看,发现她是继承自【ProcedureBase】类的,我们再反过来去看看框架作者说的话(仔细去品味一下):

流程是贯穿游戏运行时整个生命周期的有限状态机。通过流程,将不同的游戏状态进行解耦将是一个非常好的习惯。

对于一款网络游戏来说,你可能需要如下几个流程:检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程,而对于单机游戏,你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。

所以,如果想增加流程,只要派生自【ProcedureBase】类并实现自己的流程类即可使用。

从最后一句话我们可以看出,每个流程只要继承【ProcedureBase】框架就会自动读取,然后在上图中显示出来。还有【Entrance Procedure】翻译过来就是入口,应该是从各个流程中选择一个启动流程入口。

有兴趣的也可以测试下自定义类继承【ProcedureBase】,看是否会在这出现。

事实是会的。

😜流程分析

既然从入口处知道了流程贯穿整个过程,那我们倒要看看这个流程到底有什么能耐。

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

从上图代码和注释看出,流程也是有生命周期函数的,至于对应的里面都做什么我们马上打开看看,但我们要先理清两点

  • 1.框架是用流程来管理所有事情,不同流程负责不同工作,就像生产线一样

  • 2.流程的切换是用有限状态机来实现的

OnInit】方法,凡是Init初始化方法,在编程里不成文的规定-都是最先执行的。事实此框架也是这么干的。

OnEnter】方法,这里面有个GameMode-游戏模式,和LOL的匹配,大乱斗,无限火力一样的思想,模式不同,里面的玩法内容不同。里面是【m_CurrentGame.Initialize();】初始化的,而【CurrentGame】是【GameBase】类型,我们就看看【GameBase】她是怎么初始化的。进去发现她不是框架的一部分,那必然是根据各自的开发项目不同自己定义。

初始化方法【Initialize】里面出了注册Event事件外,就是创建玩家【ShowMyAircraft】,我们层层剖析发现【ShowMyAircraft】最终是调用【ShowEntity】,这个里面又有两大方法:读取配置文件和加载实体配置【暂不剖析】。

接着我们在回去看看【OnInit】里面初始化了个【SurvivalGame】,而这个是继承自【GameBase】,

GameBase】是基础游戏类,那继承自她的【SurvivalGame】就应该是实际游戏的实现了。

看看【SurvivalGame】里的方法-只有个【Update】,且里面是每秒创建一个怪物,随机坐标,然后加载出来。

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

那么我们整体回顾下流程

  1. OnInit初始化游戏模式,而游戏模式类里面有具体的业务代码

  2. OnEnter初始化游戏相关,并且利用从配置文件读取数据,根据数据来加载实体创建玩家,还有启用OnInit里面初始化的代码。

  3. OnUpdate切换不同的流程

  4. onLeave,离开当前流程的时候释放资源,比如取消订阅事件,关闭菜单UI

先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以扫码领取!!!!

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

最后的最后

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的

Unity技术-GameFramework-官方案例解析,程序员,unity,游戏引擎

最后,互联网不存在所谓的寒冬,只是你没有努力罢了!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可免费领取!文章来源地址https://www.toymoban.com/news/detail-849678.html

只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的

[外链图片转存中…(img-fOO4KIxV-1711251289204)]

最后,互联网不存在所谓的寒冬,只是你没有努力罢了!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可免费领取!

到了这里,关于Unity技术-GameFramework-官方案例解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity3d:GameFramework解析:实体,对象池,资源管理,获取计数,引用计数,自动释放

    1.GF万物基于引用池IReference 2.ObjectBase : IReference类的m_Target持有unity中Mono,资源,GameObejct 3.AssetObject : ObjectBase类m_Target持有Assetbundle中的Asset,具有获取,引用两个计数管理释放 4.ResourceObject : ObjectBase类m_Target持有Assetbundle,具有获取,引用两个计数管理释放 5.EntityInstanceObject :

    2024年02月11日
    浏览(28)
  • 【Unity学习笔记】DOTween(2)官方案例

    本文中大部分内容学习来自DOTween官方文档 此处无法展示动图(懒得录GIF),请下载官方案例场景自行学习 案例一展示了最基础的一些用法: 解读一下代码,redCube的移动是在两秒内移动到了指定坐标 0,4,0 ,而greenCube移动带有 From 方法,则是从坐标 0,4,0 移动到原坐标。blueC

    2024年02月11日
    浏览(44)
  • Unity官方FPS教程解析(一)

          在刚接触Unity的时候学习官方教程时下载导入过官方FPS教程,但是由于什么都不懂所以光是看着整个层次面板都觉得难受😂,所以就放弃了,今天算是重拾并且也算是对一些和我一样的刚接触的各位发表一些自己的见解 。 (一)下载并导入这个FPS资源 ,如图:  导

    2024年02月05日
    浏览(50)
  • 井字棋--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

    井字棋是一种在3 * 3格子上进行的连珠游戏,又称井字游戏。井字棋的游戏有两名玩家,其中一个玩家画圈,另一个玩家画叉,轮流在3 * 3格子上画上自己的符号,最先在横向、纵向、或斜线方向连成一条线的人为胜利方。如图1所示为画圈的一方为胜利者。   图1 井字棋 本实

    2024年02月04日
    浏览(51)
  • 刮刮乐--课后程序(Python程序开发案例教程-黑马程序员编著-第4章-课后作业)

    刮刮乐的玩法多种多样,彩民只要刮去刮刮乐上的银色油墨即可查看是否中奖。每张刮刮乐都有多个兑奖区,每个兑奖区对应着不同的获奖信息,包括“一等奖”、“二等奖”、“三等奖”和“谢谢惠顾”。假设现在有一张刮刮乐,该卡片上面共有8个刮奖区,每个刮奖区对应

    2024年02月06日
    浏览(84)
  • 手机通讯录--课后程序(Python程序开发案例教程-黑马程序员编著-第5章-课后作业)

    通讯录是记录了联系人姓名和联系方式的名录,手机通讯录是最常见的通讯录之一,人们可以在通讯录中通过姓名查看相关联系人的联系方式、邮箱、地址等信息,也可以在其中新增联系人,或修改、删除联系人信息。下面是一个常见通讯录的功能菜单,如图1所示。   图1

    2024年02月01日
    浏览(53)
  • 逢七拍手游戏--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)

    逢7拍手游戏的规则是:从1开始顺序数数,数到有7或者包含7的倍数的时候拍手。本实例要求编写程序,模拟实现逢七拍手游戏,输出100以内需要拍手的数字。 掌握for循环与range()函数的使用 掌握字符串中find()方法的使用 判断一个数字是否与7相关,可分为两种情况: 1.是否为

    2024年02月06日
    浏览(66)
  • 银行管理系统--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

    从早期的钱庄到现如今的银行,金融行业在不断地变革;随着科技的发展、计算机的普及,计算机技术在金融行业得到了广泛的应用。银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列的功能的管理系统,该系统中各功能的介绍如下。 开户功

    2024年02月04日
    浏览(47)
  • 中文数字对照表--课后程序(Python程序开发案例教程-黑马程序员编著-第4章-课后作业)

    阿拉伯数字因其具有简单易写、方便使用的特点成为了最流行的数字书写方式,但在使用阿拉伯数字计数时,可以对某些数字不漏痕迹的修改成其它数字,例如,将数字“1”修改为数字“7”,将数字“3”修改为数字“8”。为了避免引起不必要的麻烦,可以使用中文大写数字

    2024年02月05日
    浏览(73)
  • 学生管理系统-课后程序(JAVA基础案例教程-黑马程序员编著-第六章-课后作业)

    【案例6-2】 学生管理系统 【案例介绍】 1.任务描述 在一所学校中,对学生人员流动的管理是很麻烦的,本案例要求编写一个学生管理系统,实现对学生信息的添加、删除、修改和查询功能。每个功能的具体要求如下: 系统的首页:用于显示系统所有的操作,并根据用户在控

    2024年02月03日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包