推荐阅读
大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
一、前言
【GameFramework框架】系列教程目录:
http://iyenn.com/rec/1695644.html
【GameFramework框架】内置模块系列教程目录:
【GameFramework框架内置模块】1、全局配置(Config)
【GameFramework框架内置模块】2、数据节点(Data Node)
【GameFramework框架内置模块】3、数据表(Data Table)
【GameFramework框架内置模块】4、调试器(Debugger)
【GameFramework框架内置模块】5、下载(Download)
【GameFramework框架内置模块】6、实体(Entity)
【GameFramework框架内置模块】7、事件(Event)
【GameFramework框架内置模块】8、文件系统(File System)
【GameFramework框架内置模块】9、有限状态机(FSM)
【GameFramework框架内置模块】10、本地化(Localization)
【GameFramework框架内置模块】11、网络(Network)
【GameFramework框架内置模块】12、对象池(Object Pool)
【GameFramework框架内置模块】13、流程(Procedure)
【GameFramework框架内置模块】14、资源(Resource)
【GameFramework框架内置模块】15、场景(Scene)
【GameFramework框架内置模块】16、配置(Setting)
【GameFramework框架内置模块】17、声音(Sound)
【GameFramework框架内置模块】18、界面(UI)
【GameFramework框架内置模块】19、Web请求(Web Request)
二、GameFramework框架内置组件介绍
2-1、内置组件介绍
1.基础和工县(Base)
— 关于日志、引用池、工具集的文档。2.全局配置(Config)
— 存储一些全局的只读的游戏配置,如玩家初始速度、游戏初始音量等。3.数据结点(Data Node)
— 将任意类型的数据以树状结构的形式进行保存,用于管理游戏运行时的各种数据。4.数据表(Data Table)
— 可以将游戏教据以表格(如MicrosoftExcel)的形式进行配置后,使用此模块使用这些数据表。数据表的格式是可以自定义的。5.调试器(Debugger)
— 当游戏在Unity镜辑器中运行或者以Development方式发布运行时,将出现调试器窗口,便于查看运行时日志、调试信息等。用户还可以方便地将自己的功能注册到调试器窗口上并使用。6.下载(Download)
— 提供下载文件的功能,支持断点续传,并可指定允许几个下载器进行同时下载。更新资源时会主动调用此模块。7.实体(Entity)
— 我们将游戏场景中,动态创建的一切物体定义为实体。此模块提供管理实体和实体组的功能,如显示隐藏实体、挂接实体(如挂接武器、坐骑,或者抓起另—个实体)等。实体使用结束后可以不立刻销毁,从而等待下一次重新使用。8.事件(Event)
— 游戏泼辑监听、抛出事件的机制。Game Framework中的很多模块在完成操作后都会抛出内置事件,监听这些事件将大大解除游戏逻辑之间的耦合。用户也可以定义自己的游戏逻辑事件。9.文件系统(File System)
— 虚拟文件系统使用类似磁盘的概念对零散文件进行集中管理,优化资源加载时产生的内存分配,甚至可以对资源进行局部片段加载,这些都将极大提升资源加载时的性能。10.有限状态机(FSM)
— 提供创建、使用和销毁有限状态机的功能,一些适用于有限状态机机制的游戏逻辑,使用此模块将是一个不错的选择11.本地化(Localization)
— 提供本地化功能,也就是我们平时所说的多语言。Game Framework在本地化方面,不但支持文本的本地化,还支持任意资源的本地化,比如游戏中释放烟花特效也可以做出几个多国语言的版本,使得中文版里是"新年好"字样的特效,而英文版里是"Happy New Year"字样的特效。12.网络(Network)
— 提供使用Socket长连接的功能,当前我们支持TCP协议,同时兼容IPv4和IPv6两个版本。用户可以同时建立多个连接与多个服务器同时进行通邂信,比如除了连接常规的游戏服务器,还可以连接语音聊天服务器。如果想接入ProtoBuf之类的协议库,只要派生自Packet类并实现自己的消息包类即可使用。13.对象池(Object Pool)
— 提供对象缓存池的功能,避免频繁地创建和销毁各种游戏欢对象,提高游戏性能。除了Game Framework自身使用了对象池,用户还可以很方便地创建和管理自己的对象池。14.流程(Procedure)
— 是贯穿游戏运行时整个生命周期的有限状态机。通过流程,将不同的游戏状态进行解耦将是一个非常好的习惯。对于网络游戏,你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程,而对于单机游戏,你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。如果想增加流程,只要派生自ProcedureBase类并实现自己的流程类即可使用。15.资源(Resource)
— 为了保证玩家的体验,我们不推荐再使用同步的方式加载资源,由于Game Framework自身使用了一套完整的异步加载资源体系,因此只提供了异步加载资源的接口。不论简单的数据表、本地化字典,还是复杂的实体、场景、界面,我们都将使用异步加载。同时,Game Framework 提供了默认的内存管理策略(当然,你也可以定义自己的内存管理策略)。多数情况下,在使用GameObject的过程中,你甚至可以不需要自行进行Instantiate或者是Destroy操作。16.场景(Scene)
— 提供场景管理的功能,可以同时加载多个场景,也可以随时卸载任何一个场景,从而很容易地实现场景的分部加载。17.游戏配置(Setting)
— 以键值对的形式存储玩家数据,对UnityEngine.PlayerPrefs进行封装,也可以将这些数据直接存储在磁盘上。18.声音(Sound)
— 提供管理声音和声音组的功能,用户可以自定义一个声音的音量、是2D声音还是3D声音,甚至是直接绑定到某个实体上跟随实体移动。19.界面(UI)
— 提供管理界面和界面组的功能,如显示隐藏界面、激活界面、改变界面层级等。不论是Unity 内置的 uUGUI还是其它类型的UI插件(如NGUI),只要派生自UIFormLogic类并实现自己的界面类即可使用。界面使用结束后可以不立刻销毁,从而等待下一次重新使用。20.Web请求(Web Request)
— 提供使用短连接的功能,可以用Get或者Post方法向服务器发送请求并获取响应数据,可指定允许几个Web请求器进行同时请求。
2-2、模块使用总结
我们以贯穿始终的模块流程 (Procedure) 来分析每个模块的使用:
流程 (Procedure)
:
ProcedureLaunch配置游戏基础信息
用到了Base基础组件
判断资源加载模式和语言:
if (GameEntry.Base.EditorResourceMode && GameEntry.Base.EditorLanguage != Language.Unspecified)
{
// 编辑器资源模式直接使用 Inspector 上设置的语言
return;
}
- 1
- 2
- 3
- 4
- 5
用到了Localization本地化组件
设置本地化语言:
GameEntry.Localization.Language = language;
- 1
用到了Setting配置组件
获取持久化数据:
GameEntry.Setting.HasSetting(Constant.Setting.Language)
- 1
用到了Sound声音组件
设置声音:
GameEntry.Sound.Mute("Music", GameEntry.Setting.GetBool(Constant.Setting.MusicMuted, false));
- 1
用到了调试器(Debugger)
打印调试信息:
Log.Info("Init current variant complete.");
- 1
ProcedureCheckVersion版本检测流程
用到了FSM有限状态机
:
OnInit(IFsm<IProcedureManager> procedureOwner)
- 1
用到了Event事件模块
:
GameEntry.Event.Subscribe(WebRequestSuccessEventArgs.EventId, OnWebRequestSuccess);
- 1
用到了WebRequest
请求版本信息:
GameEntry.WebRequest.AddWebRequest(Utility.Text.Format(GameEntry.BuiltinData.BuildInfo.CheckVersionUrl, GetPlatformPath()), this);
- 1
使用了UI界面模块
打开UI界面:
GameEntry.UI.OpenDialog();
- 1
使用了Resource资源模块
设置资源下载地址:
GameEntry.Resource.UpdatePrefixUri = Utility.Path.GetRegularPath(m_VersionInfo.UpdatePrefixUri);
- 1
ProcedureChangeScene切换场景流程
用到了Entity实体组件
加载对象:
GameEntry.Entity.HideAllLoadedEntities();
- 1
用到了DataTable数据表组件
获取配置数据:
IDataTable<DRScene> dtScene = GameEntry.DataTable.GetDataTable<DRScene>();
- 1
而生成的对象存在ObjectPool对象池
中进行管理:
m_HPBarItemObjectPool = GameEntry.ObjectPool.CreateSingleSpawnObjectPool<HPBarItemObject>("HPBarItem", m_InstancePoolCapacity);
- 1
ProcedureMain游戏流程
用到了Config配置组件
获取初始数据:
procedureOwner.SetData<VarInt32>("NextSceneId", GameEntry.Config.GetInt("Scene.Menu"));
- 1
Network网络组件
主要用于网络游戏,在示例项目StarForce
中没有用到。
FileSystem组件
看似也没有用到,实际上在资源打包和读取的时候都用到了这个模块。
至此,所有的模块都讲完了。
2-3、全局静态类获取内置组件
(1)获取组件
在GameFramework中,获取一个内置组件的代码是这样的:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityGameFramework.Runtime;
public class Test01 : MonoBehaviour
{
void Start()
{
DebuggerComponent debug = UnityGameFramework.Runtime.GameEntry.GetComponent<DebuggerComponent>();
debug.enabled = true;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
使用Unity运行时环境,可以方便的获取到GF框架中想要的组件。
(2)使用全局静态访问的属性来获取组件
将GF的的19个内置组件注册一下,封装成能够全局静态访问的属性。
GameEntry.cs:GameEntry类的主题部分。
GameEntry.Custom.cs:用于注册自定义的组件和自定义的调试器。
GameEntry.Builtin.cs:注册GF框架的组件。
这里使用了C# 的partical class
修饰符,标记一个类是分部类,将框架组件加载和自定义组件放到分部类里面进行,分部到其他代码文件中,增加可读性:
InitBuiltinComponents注册GF框架组件:
InitCustomComponents注册自定义的组件:
然后,改造一下开始场景的结构,给GF框架增加一个父节点,加上GameEntry脚本组件,也增加一个Custom节点,用来存放自定义的组件,然后都可以通过GameEntry这一个对象来获取组件:
至此,就可以方便地访问Game Framework组件了,获取组件可以使用更加简洁的GameEntry.Module.Function
这种形式了:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityGameFramework.Runtime;
namespace StarForce
{
public class Test01 : MonoBehaviour
{
void Start()
{
//DebuggerComponent debug = UnityGameFramework.Runtime.GameEntry.GetComponent();
//debug.enabled = true;
GameEntry.Debugger.enabled = false;
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
接下来将分别介绍GameFramework框架的19个模块,如何使用,如何配置等等。
三、后记
如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多Unity干货文章。
你的点赞就是对博主的支持,有问题记得留言:
博主主页有联系方式。
博主还有跟多宝藏文章等待你的发掘哦:
专栏 | 方向 | 简介 |
---|---|---|
Unity3D开发小游戏 | 小游戏开发教程 | 分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。 |
Unity3D从入门到进阶 | 入门 | 从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。 |
Unity3D之UGUI | UGUI | Unity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。 |
Unity3D之读取数据 | 文件读取 | 使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。 |
Unity3D之数据集合 | 数据集合 | 数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。 |
Unity3D之VR/AR(虚拟仿真)开发 | 虚拟仿真 | 总结博主工作常见的虚拟仿真需求进行案例讲解。 |
Unity3D之插件 | 插件 | 主要分享在Unity开发中用到的一些插件使用方法,插件介绍等 |
Unity3D之日常开发 | 日常记录 | 主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等 |
Unity3D之日常BUG | 日常记录 | 记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。 |



评论记录:
回复评论: