首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

【GameFramework框架】四、GameFramework框架内置模块

  • 25-03-03 16:41
  • 4573
  • 10595
blog.csdn.net

推荐阅读

  • CSDN主页
  • GitHub开源地址
  • Unity3D插件分享
  • 简书地址

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新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之UGUIUGUIUnity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
Unity3D之读取数据文件读取使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
Unity3D之数据集合数据集合数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
Unity3D之VR/AR(虚拟仿真)开发虚拟仿真总结博主工作常见的虚拟仿真需求进行案例讲解。
Unity3D之插件插件主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
Unity3D之日常开发日常记录主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
Unity3D之日常BUG日常记录记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。
Unity爱好者社区
微信公众号
分享Unity相关的技术文章、工具资源等。
注:本文转载自blog.csdn.net的恬静的小魔龙的文章"https://blog.csdn.net/q764424567/article/details/136028809"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top