GameFrameWork框架(Unity3D)使用笔记(一)Entry

【GameFramework框架】一、框架介绍 这是GameFramework框架教程的第一篇,但是博主不准备直接就讲GameFramework框架。【GameFramework框架】二、GameFramework框架介绍了。框架(Framework)通常被理解为一种基础要素的集合,它们用于承载系统的必要功能。约束性:框架定义了解决特定问题的边界,并将相关的软件组件约束在这个范围内,以保持框架的内聚性和解决问题的专注性。支撑性:框架本身不直接解决问题,而是提供一个基础的支撑结构,使得在其上构建的解决方案更为灵活和高效。 阅读详情
AI摘要

本文详细介绍如何使用GameFramework框架创建Unity游戏项目,从项目搭建到框架引入,再到游戏入口的设置,为读者提供了一个完整的实践指南。

目录

目录

前言: 

一、创建项目,引入框架

二、游戏入口


前言: 

        很久以前就已经听说过这个框架了(Game Framework | 基于 Unity 引擎的游戏框架),看过官方的文档和一丢丢教程(就硬不更呗),也看过很多 视频教程、博客等,但大多数都只停留在代码分析,很少有详细的上手实践教学。于是经常会这样,看完后发现自己看的时候好像理解了,但是上手用的时候却一片茫然。

        所以我决定以实践促学,上手用GameFrameWork框架实现一个简单的较为完整的项目,并且把这个过程给记录下来。

        本次实践的主要内容是将框架应用到我们团队之前做的一个游戏《汝影》中去(Unity版本:2021.3.1f1c1)。整个过程的主要参照的是官方的案例《StarForce》(GitHub - EllanJiang/StarForce: This is a demo made with Game Framework.)中间遇到的问题我都会通过阅读源码、查询各种文档和教程等方法解决。由于个人能力有限,有错误敬请指出。

那么,游戏开始!


一、创建项目,引入框架

        这部分内容很简单,官网和各种教程中都有详细的方案。这里简单记录一下。

        首先在官网下载最新的框架插件: 

 创建项目,创建文件夹GameMain用来装游戏内容然后将下载的框架拖进来:

至此游戏框架的安装就好了:

 运行Example场景测试:

没有问题:


二、游戏入口

框架安装好后,就是创建游戏入口GameEntry(学的StarForce的做法)。

它的作用实际上是存储管理所有的框架模块(包括内置的和自定义的)组件的引用,方便全局调用使用。(实际上框架内部有一个GameEntry和GameFrameworkEntry,个人感觉这里自己创建的GameEntry是在框架和游戏主体之间的一步解耦)。

创建Scripts文件夹:

在其中创建Base文件夹:

在其中分别创建GameEntry,GameEntry.Builtin,GameEntry.Custom三个脚本,分别管理GameEntry类的三个部分(字面识意):

三个脚本的代码如下:

//GameEntry.cs
using UnityEngine;
using UnityGameFramework.Runtime;

namespace ShadowU
{
    public partial class GameEntry : MonoBehaviour
    {
        private void Start()
        {
            InitBuiltinComponents();
            InitCustomComponents();
        }
    }
}


//GameEntry.Builtin.cs
using UnityEngine;
using UnityGameFramework.Runtime;

namespace ShadowU
{
    /// <summary>
    /// 内置模块
    /// </summary>
    public partial class GameEntry : MonoBehaviour
    {
        /// <summary>
        /// 获取游戏基础组件。
        /// </summary>
        public static BaseComponent Base
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取配置组件。
        /// </summary>
        public static ConfigComponent Config
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取数据结点组件。
        /// </summary>
        public static DataNodeComponent DataNode
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取数据表组件。
        /// </summary>
        public static DataTableComponent DataTable
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取调试组件。
        /// </summary>
        public static DebuggerComponent Debugger
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取下载组件。
        /// </summary>
        public static DownloadComponent Download
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取实体组件。
        /// </summary>
        public static EntityComponent Entity
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取事件组件。
        /// </summary>
        public static EventComponent Event
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取文件系统组件。
        /// </summary>
        public static FileSystemComponent FileSystem
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取有限状态机组件。
        /// </summary>
        public static FsmComponent Fsm
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取本地化组件。
        /// </summary>
        public static LocalizationComponent Localization
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取网络组件。
        /// </summary>
        public static NetworkComponent Network
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取对象池组件。
        /// </summary>
        public static ObjectPoolComponent ObjectPool
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取流程组件。
        /// </summary>
        public static ProcedureComponent Procedure
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取资源组件。
        /// </summary>
        public static ResourceComponent Resource
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取场景组件。
        /// </summary>
        public static SceneComponent Scene
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取配置组件。
        /// </summary>
        public static SettingComponent Setting
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取声音组件。
        /// </summary>
        public static SoundComponent Sound
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取界面组件。
        /// </summary>
        public static UIComponent UI
        {
            get;
            private set;
        }

        /// <summary>
        /// 获取网络组件。
        /// </summary>
        public static WebRequestComponent WebRequest
        {
            get;
            private set;
        }

        private static void InitBuiltinComponents()
        {
            Base = UnityGameFramework.Runtime.GameEntry.GetComponent<BaseComponent>();
            Config = UnityGameFramework.Runtime.GameEntry.GetComponent<ConfigComponent>();
            DataNode = UnityGameFramework.Runtime.GameEntry.GetComponent<DataNodeComponent>();
            DataTable = UnityGameFramework.Runtime.GameEntry.GetComponent<DataTableComponent>();
            Debugger = UnityGameFramework.Runtime.GameEntry.GetComponent<DebuggerComponent>();
            Download = UnityGameFramework.Runtime.GameEntry.GetComponent<DownloadComponent>();
            Entity = UnityGameFramework.Runtime.GameEntry.GetComponent<EntityComponent>();
            Event = UnityGameFramework.Runtime.GameEntry.GetComponent<EventComponent>();
            FileSystem = UnityGameFramework.Runtime.GameEntry.GetComponent<FileSystemComponent>();
            Fsm = UnityGameFramework.Runtime.GameEntry.GetComponent<FsmComponent>();
            Localization = UnityGameFramework.Runtime.GameEntry.GetComponent<LocalizationComponent>();
            Network = UnityGameFramework.Runtime.GameEntry.GetComponent<NetworkComponent>();
            ObjectPool = UnityGameFramework.Runtime.GameEntry.GetComponent<ObjectPoolComponent>();
            Procedure = UnityGameFramework.Runtime.GameEntry.GetComponent<ProcedureComponent>();
            Resource = UnityGameFramework.Runtime.GameEntry.GetComponent<ResourceComponent>();
            Scene = UnityGameFramework.Runtime.GameEntry.GetComponent<SceneComponent>();
            Setting = UnityGameFramework.Runtime.GameEntry.GetComponent<SettingComponent>();
            Sound = UnityGameFramework.Runtime.GameEntry.GetComponent<SoundComponent>();
            UI = UnityGameFramework.Runtime.GameEntry.GetComponent<UIComponent>();
            WebRequest = UnityGameFramework.Runtime.GameEntry.GetComponent<WebRequestComponent>();
        }
    }
}



//GameEntry.Custom.cs
using UnityEngine;
using UnityGameFramework.Runtime;

namespace ShadowU
{
    /// <summary>
    /// 用户自定义模块
    /// </summary>
    public partial class GameEntry : MonoBehaviour
    {
        private void InitCustomComponents()
        {

        }
    }
}

(Builtin的部分的代码完全可以copy因为基本上都是死的,然后Custom里面的自己对照着扩展就行)

然后创建场景文件夹和创建ShadowULauncher场景 作为启动场景,并且添加空物体FrameWork并将GameEntry挂在上面,同时将GameFrameWork预制体设为其子物体:

至此,基本准备已经完毕,下面开始创建流程。

 

【Unity3D框架】GameFramework框架完全教程《全网最全》-专栏文章目录 最近准备学习框架,了解到GameFramework框架是国产Unity3D框架,准备学习一下,但是奈何全网关于这个框架的教程实在太少。为了让自己学习方便一些,也为了让后来者乘凉。将框架以自己的理解整理目录,并且补全教程。觉得教程有帮助别忘了一键三连哦。 阅读详情

相关推荐

GameFramework教程✨一、本专栏概述及注意事项

大家好,我是SKODE。 小提示:选中左侧目录,可快速找到所需内容 本系列博客地址:传送门

星河造梦坊 7756

GameFramework框架

ellan做事风格非常低调,属于实干派,几乎没有宣传过框架,但是多年持续维护更新,框架实际是提炼于知名的商业项目。虽然框架文档十分匮乏,新人上手相对困难,但是GF依然靠着过硬的代码质量吸引开发者使用和学习。每个模块的xxxManager都会实现对应的IxxxManager接口,UGF只会直接引用接口,不会直接引用Manager。如果需要调用依赖于引擎实现的接口,可以定义对应的IHelper接口并在UGF层实现接口,GF层只管调用不管具体实现。对常用模块封装,规范开发过程,保证产品质量,内置19个模块。

—巨人绿 4507

Unity 游戏框架之GameFramework和ET对比

Unity 框架 GF 和 ET 哪个更好用,各自的优点,缺点是什么? 随着Unity的不断发展,现在出现了很多比较牛逼的 开源 框架,其中,我觉得 最厉害的是 Game Framework 和 ET 这2个框架。 ET:https://github.com/egametang/ET GameFramework:https://github.com/EllanJiang/UnityGameFramework

TxNet 4万+

【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)

【Unity 3D】GameFramework、QFramework框架简介及应用实战(超详细 附源码)

showswoller的博客 1万+

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

【GameFramework框架内置模块】1、全局配置(Config)【GameFramework框架内置模块】2、数据节点(Data Node)【GameFramework框架内置模块】3、数据表(Data Table)【GameFramework框架内置模块】4、调试器(Debugger)【GameFramework框架内置模块】5、下载(Download)【GameFramework框架内置模块】6、实体(Entity)【GameFramework框架内置模块】7、事件(Event)

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 5643

【GameFramework框架内置模块】3、数据表(Data Table)

DataTable数据表是一个表的数据集合,可以理解为DataRow的字典集合比如。DataTable数据表是数据集合的访问查询类,主要操作有数据的增删改查方法(虽然框架提供了删除的接口,但是一般是不需要进行修改或者删除的,读取就好了)。框架推荐我们使用DataTable数据表来设置初始数据,比如玩家初始生命值、初始蓝量、初始防御力等,下面就来看一下如何使用吧。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 3243

GameFramework---框架简介与下载(一)

@TOC# 系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例

南宫铭的博客 4393

【GameFramework框架内置模块】1、全局配置(Config)

这是GameFramework框架内置模块的第一篇,全局配置Config,讲解这些模块的时候会尽量的涉及介绍、为什么使用、如何使用、代码分析这几块,让大家可以知其然,也知其所以然。全局配置表,存储了一些游戏中使用的全局的参数配置,比如玩家的初始速度、游戏初始音量等。全局配置表的结构跟DataTable结构类似,也是列行+键值对,只是没有ID这一列,因为全局配置也不需要用ID去查询, 是直接使用key值进行查询。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 5885

【Unity】Game Framework框架学习使用

这篇文章主要是自己学习GameFramework的时候的一些使用心得

好吃的和好看的都需要用实力来争取 4665

GameFramework教程✨三、流程

大家好,我是SKODE。 小提示:选中左侧目录,可快速找到所需内容 本系列博客地址:传送门 E大该章链接:传送门 一、什么是流程 贯穿游戏运行时整个生命周期的有限状态机。通过流程,将不同的游戏状态进行解耦将是一个非常好的习惯。对于网络游戏,你可能需要如检查资源流程、更新资源流程、检查服务器列表流程、选择服务器流程、登录服务器流程、创建角色流程等流程,而对于单机游戏,你可能需要在游戏选择菜单流程和游戏实际玩法流程之间做切换。如果想增加流程,只要派生自 ProcedureBase 类并实现..

星河造梦坊 6126

【GameFramework框架】二、GameFramework框架介绍

Game Framework框架是由E大(Ellan Jiang)开源的一款基于Unity的通用游戏框架。Game Framework框架提供了游戏开发中常用的框架基础模块,将基础模型进行了封装,在资源管理和资源更新方面比较完善,可以大大加大开发进程,加快开发速度,并且还在在此此处上保证产品质量。实在是代码开发、框架学习、编程进阶、居家旅行哦不对,是提升自己的最佳实践。Game Framework框架。

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 5848

GameFramework源码学习(一)

Unity的GameFramework框架的源码学习.

terruig的博客 3534

手把手教你用STM32的SPI驱动MCP2517FD实现CAN FD通信(附完整代码)

本文详细介绍了如何使用STM32通过SPI驱动MCP2517FD实现CAN FD通信,涵盖硬件连接、SPI驱动编写、寄存器配置及数据收发实战。提供完整代码示例和常见问题排查指南,帮助开发者快速构建高可靠性的CAN FD通信系统,适用于汽车电子和工业控制等领域。

weixin_30607029的博客 674

Unity技术-GameFramework文档系列(一)-简介和初步使用

我一路种下了蘑菇,只为让你知道回家的路。 往期文章分享 点击跳转=>保姆式Cocos合成大西瓜案例 点击跳转=>养不起真猫,就用代码吸猫-Unity粒子实现画猫咪 点击跳转=>Unity粒子特效系列-龙卷风预制体做好了,unitypackage包直接用! 点击跳转=>姐姐喊我解锁套娃新技能:FairyGUI在Unity中实现List嵌套List/立体画廊等,玩出花儿来 点击跳转=>Unity新手必备5款宝藏插件–价值上千元白嫖最新版 点击跳转=>爆肝万字C#基础入.

空名先生 7250

FreeRTOS-Plus-CLI使用笔记

FreeRTOS-Plus-CLI使用笔记 一、简介 详细介绍可参考FreeRTOS-Plus-CLI官网地址入口 FreeRTOS+CLI(Command Line Interface, 命令行接口)提供了一种简单、小型、可扩展且RAM高效的方法,使FreeRTOS应用程序能够处理命令行输入。添加一条指令的步骤如下: 提供一个实现命令功能的函数 将命令映射到该功能函数 注册命令 运行命令解释器 命令行调试接口对于排查分析出现的问题提供了很好的接口,可以通过查看传感器信息判断传感器是否正常,可以查看内置

ApexYuan 6964

构建自己的 Qt 插件系统

Qt 本身提供了插件相关的技术,但并没有提供一个通用的插件框架!倘若要开发一个较大的 GUI 应用程序,并希望使其可扩展,那么拥有这样一个插件框架无疑会带来很大的好处。

青春不老,奋斗不止! 2万+

GameFrameWork框架(Unity3D)使用笔记(八) 实现场景加载进度条

游戏在转换场景的时候,需要花费时间来加载相关的资源。而这个过程往往因为游戏场景的规模和复杂度以及玩家电脑配置的原因花费一小段时间(虽然这个项目里用不到)。目前大多数游戏在转换关卡这种时候都会有个加载界面,显示加载进度。这样玩家可以对啥时候能加载好有个心理预估(判断要不要因为加载太久浪费时间不如卸载游戏(开个玩笑))。那本篇的任务就是探究如何在UGF框架下实现加载场景的进度条功能。

HowToPause的博客 4699

AgentScope 2.0 扩展开发完全指南:从中间件到模型适配器的深度实践

本文系统讲解 AgentScope 2.0 框架的五大扩展机制,涵盖中间件系统的洋葱模型与钩子设计、ChatModelBase 基类与多供应商适配器开发、工作空间(本地/Docker/E2B)的抽象接口与生命周期管理、凭据工厂与 MCP 协议集成、以及工具协议与存储后端扩展。文中提供完整的架构图、代码示例与故障排查指南,帮助开发者快速掌握 AgentScope 的插件化扩展体系。

program哲学 295

GameFramework食用指南

GameFramework使用指南;

小紫苏的博客 2200

YOLOv8的特征蒸馏代码应用讲解(CWD/MGD/mimic/在线蒸馏/逻辑蒸馏)

基于YOLOv8的逻辑蒸馏、特征蒸馏、在线蒸馏等方法代码介绍。

qq_41920323的博客 2582

第11.4节 混合储能系统能量管理

混合储能系统(HESS)的能量管理策略采用分层架构实现多时间尺度优化:调度层(小时级)进行经济优化,协调层(秒级)基于频率分解分配功率,执行层(毫秒级)实现快速跟踪。深度强化学习(DRL)方法通过定义状态空间、动作空间和多目标奖励函数,能有效处理系统不确定性和多目标优化问题。HESS性能评估需综合技术指标(如调节性能Kp值、设备寿命指标)和经济指标(净现值NPV、平准化储能成本LCOS),并遵循"建模-仿真-实验"的闭环流程。

技术工作者 245

GameFramework框架的使用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2iq3WxOX-1680437919888)(/assets/GameFramework-config.png)]一般是这样划分的,上层逻辑使用 unity 层模块组件。一般建议使用unity层模块组件来使用模块功能。新加的unity模块组件直接使用底层模块功能。有时候也想直接使用底层模块功能。

qmladm的博客 389

YOLOv8【第七章:损失函数篇·第1节】一文搞定,IoU系列损失函数!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1197

【Unity框架知识】流行的游戏框架

【低水平竞争】框架认知

hanyangcsdn的博客 1782

高级用法:LangChain 安全防护(Guardrails)

在调用开始时校验请求,可做关键词过滤、身份校验、限流等。= "human":return {}],# 使用],= "human":return {}],

Long_像风一样自由 316

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

探索游戏开发新框架:`GameFramework`

探索游戏开发新框架:GameFramework 去发现同类优质开源项目:https://gitcode.com/ 项目简介 是一个开源的游戏开发框架,由C#编写,专为跨平台的游戏开发而设计。它提供了一整套完整的游戏开发工具链和组件,包括但不限于网络通信、资源管理、事件系统、任务调度等核心功能,旨在简化游戏开发过程,提高开发效率。 技术分析 模块化设计:GameFramework采用模块化的结...

gitblog_00097的博客 572

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

下一篇: 游戏开发者的操作系统课设的正确打开方式(Unity3D)
咖啡咖_CoffCa
博客等级 码龄6年 116粉丝 58原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咖啡咖_CoffCa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值