当前位置: 首页 > news >正文

【Unity】Game Framework框架学习使用

前言

之前用过一段时间的Game Framework框架后来有那么一段时间都做定制小软件,框架就没再怎么使用了。

现在要做大型项目了,感觉还是用框架好一些。于是又把Game Framework拾起来了。

这篇文章主要是讲Game Framework这个框架是怎么用的,比较多的一些使用方式,原理讲解没有哈。

写的不好大佬勿喷哈,随着后面的使用越来越熟练肯定理解也会越来越深刻的。

我是跟着猫仙人的FlappyBird制作流程上手了一遍,算是熟悉了一下用法,下面主要介绍各个文件夹的用法和代码的写入情况。

以下是需要的资料,包含源码,FlappyBird资源以及GDT模板
链接: https://pan.baidu.com/s/1Z6zfJV8OP8kh_vc6PzYgyA?pwd=ztkg 提取码: ztkg 

文件夹介绍:

GameFramework导入之后的文件夹目录如上图。

同时会在菜单栏生成GameFramework,但是目前项目来看只有打包用的上。o(╥﹏╥)o

这里其他文件夹目录使用到了猫仙人说到的GDT(基于UGF的游戏开发模板),相当于把用到的文件夹挨个创建了一遍

这个GDT目录我会放链接在后面哈。

其中用到的文件夹最多的几个我列举一下:

DataTables(配置表文件夹):

配置表文件夹,从Excel到exe文件的转换,里面给到了固定格式的Excel,直接在Excel中填写对应内容就行,最后保存的时候,保存为制表符格式(.txt类型的文件)

保存之后因为格式问题,需要在另存为那里文件格式修改为UTF-8,这样Unity才能够识别

Entities(游戏物体预设体):

这个项目里面的Entities文件夹,主要放的是需要操作的游戏物体的预设体。

把制作好的预设体放进去,使用的时候就可以直接使用脚本调用,尽量脚本和预设体名称一致,后面会讲脚本的创建和使用。

UIForms(游戏界面预设体):

这个文件夹下面放的都是UI界面的预设体,为了方便调用,同样的尽量脚本和预设体名称一致。

Animation(动画):

动画文件夹,这个就不做多说了。

Configs(配置文件夹):

这个里面放的都是一些配置文件,前期不需要管那么多,后期使用到AssetBundle打包之后,会在这里生成一个AssetBundle的配置文件。

其他常用文件夹:

其他的一些常用文件夹就不多说了,都是一些资源文件夹

 Scene放置的是常用的场景

场景这块要额外说一下,我们添加场景到BuildSetting的时候,千万要吧GameFramework这个场景放到第一位上。如下图:

比方说音乐,里面放的是场景音乐。

 声音音效

 图片

 精灵图片

 UI所使用的音效

代码:

代码文件夹的层级如下,接下来会介绍几个比较重要的:

UIFormId(游戏UI界面):

UIFormId是进行游戏UI界面配置的,以序号的形式进行修改添加。

同样的UI文件夹下的Customs是放置UI界面的逻辑功能,一般是直接挂载在对应预设体上。

Entity(游戏物体):

其次就是Entity这个文件夹,用到的比较多

其中包含两个文件夹,EntityData文件夹下放置游戏物体的数据脚本,包含数据以及初始化

EntityLogic文件夹放置游戏物体的实体脚本,包含功能逻辑代码

Event(事件):

还有一个比较重要的文件夹,就是Event事件脚本,游戏中所有的行为都包含事件,这里只需要在这里面创建一个事件脚本,在其他脚本中就能直接使用。

事件创建:

比方说小鸟死亡事件,我们就需要新创建一个小鸟死亡事件脚本在Event文件夹下。

然后该脚本需要继承GameEventArgs类,然后实现基类的方法。

其中包含了一个字段,并且包含了要给clear方法。

我们使用的时候需要先派发事件,然后对应的类会订阅事件和取消订阅事件,如下图则是派发事件,用到的是GameEntry.Event.Fire方法,参数为一个实体,一个是事件对象池,代表我们有一个事件创建了。

订阅事件:

上面是子弹脚本中,监听小鸟死亡事件。

这里,所有的事件都是需要通过GameEntry.Event.Subscribe(),这个方法进行订阅的。

它包含了两个参数,一个参数是需要监听的事件的ID,一般会在派发事件的时候初始化。第二个参数则是需要绑定的方法,当监听的事件出现变化的时候,就会执行第二个方法。

取消订阅事件:

Procedure/Customs(流程):

流程是GameFramework运行游戏的基本机制,每个场景都可以是一个流程,所以这里我们创建了两个流程脚本,这里面主要放置一些场景中的逻辑和初始化。

大致用到的就这些地方,看着脚本内容挺多的,但实际上需要我们写的不是很多,毕竟是框架,很多功能已经集成好了,我们只需要学习使用写一下就行。

写代码需要注意的点:

其中写代码需要注意的点比较多,毕竟是框架,已经规范好了自己的写法,如果不会的话很头疼从哪里开始。 

根据FlappyBird项目练手的情况来看,大部分都是已经写好的内容,其中几点需要注意:

1、命名空间修改

所有需要写的类,都必须放到一个命名空间下,如果改名的话,尽量重命名,这样,很多框架里面的代码才能够起到效用。

同时,改完命名空间之后,也有一部分内容需要修改

代码里面的名称也需要修改一下。

2、场景主脚本(流程脚本):

这里在GameFramework框架中,主要是以流程为核心进行控制的,所以我们想要进行游戏的开发,也需要通过流程来进行控制。

比方说FlappyBird项目中有两个场景,Menu场景和Main场景。那么就创建两个类,分别代表Menu和Main。但是需要这两个类去继承ProcedureBase,代表是加入了GameFramework的流程中。

当继承了ProcedureBase之后,在场景中的Procedure的面板上,就会多出来我们的两个脚本,代表已经加入了流程

3、游戏物体

我们的游戏物体需要添加到Entity下的 Entity Groups中,上面的几个参数分别是对生成的实例进行管理的参数,这个我没有太搞明白为什么要添加进去。后面需要研究一下。

当我们为游戏物体创建脚本的时候,需要一一对应的创建游戏物体的数据脚本

这里是规定了写代码的规范,实体和数据必须分离。

实体需要继承Entity类,Entity类包含如下可重写的方法,基本上我们能用到的生命周期和常用方法基本都涵盖了

实体数据必须要继承EntityData类,继承EntityData类必须要实现一个构造函数,同时包含了两个字段,方便后期我们修改。

其中,游戏物体的脚本写完之后,一定不要忘记在EntityExtension脚本中添加上显示游戏物体实体的方法,脚本路径和大致代码写法如下:

设置静态公开的一个显示游戏物体小鸟的方法,前一个参数是实体组件,后面一个参数则是实体数据。

框架里面写好了一个类,就是为了显示实体,已经封装好了方法,并且在下面TODO那里给我们写好了显示实体的封装示例,让我们直接照抄就行

4、游戏物体逻辑常用类和方法

显示游戏物体:

如上图,就是我们设置好的显示各种游戏物体的显示的方法。

GameEntry.Entity.ShowBullet(new BulletData(GameEntry.Entity.GenerateSerialId(), 4,CachedTransform.position + CachedTransform.right, 6));

用法就是直接show对应的游戏物体,然后在里面直接new一个对应的游戏物体,并把物体的构造函数里面的参数填进去就行了。

隐藏游戏物体:

GameEntry.Entity.HideEntity(this);

比方说这一句,就是直接隐藏自身,

他的参数里面可以直接放置游戏物体。

播放音乐/音效:

根据设置的编号直接播放对应的音效

这里也可以通过外设的音乐ID进行设置播放的音乐。

场景切换设置:

首先找到ProcedureChangeScene这个脚本,然后在TODO这里进行填写

这里case后面的编号对应我们在BuildSetting里面添加的场景编号。

使用方式:

切换场景的时候,我们可以用方法的参数中的procedureOwner,这个参数代表的是我们所有的流程存储的对象,也是一个有限状态机,直接把要切换的场景名称打到最后即可。

存储游戏运行数据:

GameEntry类里有一个组件,是为了进行数据的存取,如下图:

使用方法挺简单的,我们使用GetOrAddNode方法,进行添加节点,并且在后面使用setdata给其增加数据,这样一个代表着Score分数的数据就保存好了。

使用数据的话也有对应的方法

在DataNode中有一个GetNode方法,只需要把对用节点的名称输入进去,就能获得对应节点内存储的数据,但类型要对应的上才能获取。

版本执行方式:

找到如上脚本,打开之后可以直接找到TODO的地方,这里是选择根据游戏类型进行的执行方式。

因为是单机游戏,所以不需要进行版本信息检查,根据打包好的内容直接加载就行。

后话:

 下面的链接就是猫仙人的FlappyBird项目,使用了GameFramework框架,跟着练习一边是最好的,边练习边思考提升很快:

https://blog.csdn.net/qq_32821435/category_7753219.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=7753219&sharerefer=PC&sharesource=CSDN_6954&sharefrom=from_link

相关文章:

【Unity】Game Framework框架学习使用

前言 之前用过一段时间的Game Framework框架,后来有那么一段时间都做定制小软件,框架就没再怎么使用了。 现在要做大型项目了,感觉还是用框架好一些。于是又把Game Framework拾起来了。 这篇文章主要是讲Game Framework这个框架是怎么用的…...

Linux(CentOS 7) yum一键安装mysql8

1、通过yum安装 (1)下载mysql 在Linux找个地方输入以下命令 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm (2)安装mysql yum 仓库配置文件 [rootVM-8-15-centos ~]# sudo rpm -Uvh mysql80-c…...

Kafka 快速入门(一)

1.1安装部署 1.1.1 集群规划 bigdata01bigdata02bigdata03zookeeperzookeeperzookeeperkafkakafkakafka 1.1.2 集群部署 官方下载地址:http://kafka.apache.org/downloads.html 检查三台虚拟机的zk是否启动:zkServer.sh start 默认启动方式 1)解压…...

丹摩征文活动 | SD3+ComfyUI的图像部署实践

一、前言 作为Stability AI 推出的一款革命性的文本转图像开源模型,Stable Diffusion 3(简称SD3)在图像质量、文本内容生成、理解复杂指令以及资源利用效率方面,都有着不俗的表现。 SD3的Medium版本,拥有20亿参数&am…...

H.265流媒体播放器EasyPlayer.js网页web无插件播放器:如何优化加载速度

在当今的网络环境中,用户对于视频播放体验的要求越来越高,尤其是对于视频加载速度的期待。EasyPlayer.js网页web无插件播放器作为一款专为现代Web环境设计的流媒体播放器,它在优化加载速度方面采取了多种措施,以确保用户能够享受到…...

【Linux】进程状态的优先级

大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦 本文由:残念ing原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客,欢迎各…...

react中的组件传参

在React中,组件之间的数据传递是构建用户界面的关键部分。根据不同的需求和场景,有多种方式可以在React中传递参数,以下是对这些方式的详细说明: 一、通过props传递参数 这是React中最基本和最常用的数据传递方式。父组件通过属…...

HTML5:网页开发的新纪元

文章目录 前言一、HTML5技术概述二、主要特点及优势1. 多媒体支持2. 图形绘制3. 离线存储4. 表单控件增强5. 响应式设计 三、应用场景1. 游戏开发2. 在线教育3. 电子商务 四、面临的挑战结语 前言 在互联网技术快速发展的今天,H5(HTML5的简称&#xff0…...

CKA认证 | Day2 K8s内部监控与日志

第三章 Kubernetes监控与日志 1、查看集群资源状态 在 Kubernetes 集群中,查看集群资源状态和组件状态是非常重要的操作。以下是一些常用的命令和解释,帮助你更好地管理和监控 Kubernetes 集群。 1.1 查看master组件状态 Kubernetes 的 Master 组件包…...

电信网关配置管理系统 upload_channels.php 文件上传致RCE漏洞复现

0x01 产品简介 中国电信集团有限公司(英文名称“China Telecom”、简称“中国电信”)成立于2000年9月,是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员实现对网关设备的远…...

ubuntu更改max_map_count

在Ubuntu系统中,max_map_count是一个内核参数,用于限制每个进程可以拥有的内存段的数量。对于Elasticsearch等需要大量内存映射的应用,可能需要增加这个值。 执行以下步骤来更改max_map_count的值: 打开终端。 输入以下命令以编…...

《NPU、CPU、GPU 算力定义和计算方式》

一、引言 在人工智能时代,算力成为了推动技术发展的关键因素之一。不同类型的处理器,如中央处理器(CPU)、图形处理器(GPU)和神经网络处理器(NPU),在算力方面有着各自的特…...

初级数据结构——顺序表

目录 前言一、定义与特点二、类型三、基本操作四、应用场景五、优缺点六、元素插入和删除动态图解插入删除 七、代码模板八、使用顺序表的经典例题1.求奇数的乘积代码题解 2.数值统计代码题解 九、总结结语 前言 顺序表示最基础的数据结构之一,它也是我们学习开始学…...

游戏引擎学习第五天

这节貌似没讲什么 视频参考:https://www.bilibili.com/video/BV1Gmm2Y5EwE/ uint8 *A somewhere in memory; uint8 *B somewhere in memory;//BEFORE WE GOT TO HERE int Y *B; // whatever was actually there before the 5 *A 5; int X *B; // 5 //Obviously! Y and …...

智能社区服务小程序+ssm

智能社区服务小程序 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了智能社区服务小程序的开发全过程。通过分析智能社区服务小程序管理的不足,创建了一个计算机管理智能社区服务小程序的方案。文…...

glide性能优化实战

glide性能优化实战 前言 项目使用glide加载图片之前也只是会基本api,这次项目有非常多的图片需要展示,而且设备是一个android12的版本,但是性能不太理想,分给APP的资源不太多,所以需要优化现有图片加载逻辑,读者可以…...

Python 环境搭建和安装(保姆级教程)

本章节我们将向大家介绍如何在本地搭建Python开发环境。 Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等…...

Java并发编程(二):同步机制与多线程是否矛盾

同步机制与多线程是否矛盾 0 纠正对异步和多选误解1 概述2 为什么要引入同步机制3 为什么多线程依然有意义3 总结 大家好,我是欧阳方超,可以关注我的公众号“欧阳方超”,后续内容将在公众号首发。 0 纠正对异步和多选误解 行文之前先纠正一下…...

golang分布式缓存项目 Day2 单机并发缓存

注:该项目原作者:https://geektutu.com/post/geecache-day1.html。本文旨在记录本人做该项目时的一些疑惑解答以及部分的测试样例以便于本人复习。 支持并发读写 接下来我们使用 sync.Mutex 封装 LRU 的几个方法,使之支持并发的读写。在这之…...

一个百度、必应搜索引擎图片获取下载的工具包

前言:前段时间需要一大批图片,跑去百度搜图下载,发现特别麻烦,于是用了一天时间写了一个工具库,方便后续使用,这里分享给大家 imagecapture 是一个用 Go 语言编写的库,旨在从百度和必应等搜索引…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂&#xff…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何,是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试,是可以跑通文章里面的代码。训练速度也是很快的。 注意…...