APP下载

基于Unity3D引擎的游戏设计与开发

2021-05-19胡静胡欣宇

电子元器件与信息技术 2021年2期
关键词:编辑器怪物工厂

胡静,胡欣宇

(1.山西农业大学软件学院,山西 太谷 030801;2.山西财经大学,管理科学与工程学院,山西 太原 030006)

0 引言

近年来随着计算机物理硬件的提升以及社会经济的进步,游戏技术也得到了空前的发展。无论是游戏引擎还是玩法,都得到了长足的进步。Unity是一款由Unity科技公司所设计的可跨平台的2D与3D游戏引擎,其支持开发Windows等电脑平台、任天堂Switch等主机平台以及 Android等移动设备的各种游戏,以及基于WebGL技术的网页平台以及TVOS等多媒体平台。塔防是指通过在地图上建造各种各样的炮塔来阻止游戏中的敌人抵达指定位置的实时战略计算机游戏,此类游戏的目标是生存若干时间或尽可能生存下去。玩家一般有生命值,生命值以敌人数量为基准,如果敌人在到达指定地点之前没有被消灭,玩家就会减少生命。随着怪物波次的增加和炮塔属性的逐渐提升,怪物的数量、属性以及各种特殊能力也会提升[1-4]。

目前国内外许多专家在Unity平台研发了多种游戏,如伍传敏等人基于Unity3D完成了第一人称射击游戏的设计与开发[5]。张典华等人基于Unity3D实现了多平台兼容的三维空战游戏[6]。刘晋钢等人则研究了Unity3D与Kinect整合数据技术在体感游戏中的应用价值[7]。

本文通过C++设计并实现了一款基于Unity3D引擎的TowerDefence游戏,实现了怪物AI设置,攻击检测算法的设计以及游戏特效和渲染管道等关键技术。游戏运行流畅,画面精良,操作简单,体验丰富,上线后收获大量好评。

1 游戏设计

1.1 塔防游戏设计策略

本文的塔防游戏玩法设计遵循以下原则:(1)玩家放置的障碍物可以在障碍物摧毁基地之前伤害或杀死敌方攻击者。(2)修复障碍物的能力。(3)升级障碍物的能力。(4)能够修复障碍物的升级。(5)用于购买升级和维修的某种货币(可以是时间,游戏内货币或经验值,例如通过击败攻击单位而获得的货币)。(6)能够一次穿越多条路径的敌人。(7)每波通常有固定数量和类型的敌人。(8)许多现代的塔防游戏都从实时游戏发展到回合游戏,其中存在不同的阶段,例如构建,防御,修复和庆祝。许多游戏(例如Flash Element Tower Defence)的敌人都经过“迷宫”,使玩家能够战略性地放置“塔”以获得最佳效果。但是,某些类型的游戏类型迫使用户从自己的“塔”中创建“迷宫”,例如Desktop Tower Defense。该类型的某些版本是这两种类型的混合形式,其预设路径可以通过放置塔来进行某种程度的修改,或者可以通过放置路径来进行修改,或者可以通过放置路径来进行更改。通常,一项必不可少的策略是“惊人”,这是创建长而曲折的塔楼(或“迷宫”)以延长敌人经过防御所必须经过的距离的策略。有时可以通过在一侧设置出口然后在另一侧设置出口以使敌人来回移动直到被击败之间交替进行“杂耍”。一些游戏还允许玩家修改塔楼使用的攻击策略,以便以更诱人的合理价格进行防御[8]。

本游戏的开发环境是基于Unity 2017.1.0f3 (64-bit)版本,使用LitJSON技术处理JSON字符串之间的转换,结合DOTween技术进行实现。

1.2 系统设计

本游戏系统设计如图1所示,主要包含五个模块:工厂管理模块、游戏管理模块、UI模块、场景管理模块、游戏逻辑模块。

工厂管理模块:用于管理各种资源工厂以及游戏物体工厂。

游戏管理模块:用于管理各种管理者。

UI模块:用于控制所有UI相关组件,包括UI面板、UI按钮、UI滑动等。

游戏逻辑模块:用于处理各种游戏逻辑如塔的攻击等。

场景管理模块:用于管理各种场景的转换、加载以及退出。

图1 系统模块图

2 关键技术实现

2.1 对象资源池化管理

以物体工厂为例,本游戏系统的资源管控方法基于游戏物体工厂管理UI、UI面板与游戏物体的激活与失活[9-14]。游戏物体工厂拥有一个工厂基类BaseFactory,实现接口IBaseFactory并在该基类中使用对象池技术,使子弹、怪物、塔在生成时不必反复创建和销毁对象,只需要从对象池中取出与放回对象便可节省系统资源。对象池流程如图2所示。

游戏物体工厂拥有一个枚举类型FactoryType,用于区分不同种类的游戏物体工厂。游戏物体工厂拥有三个工厂类GameFactory、UIFactory和UIPanelFactory继承至工厂基类,它们之间的区别是修改了在对象池获取资源时的资源路径[15]。

2.2 怪物AI设置

怪物生成:由于怪物的种类、属性都不完全一致,因此怪物的生成采用责任链模式与建造者模式。该责任链模式有两个节点:Level与Round,其中Level控制Round。

责任链模式中由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上传递,直到链上的某一个对象决定处理此请求,发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。责任链模式设计如图3所示。

图3 责任链模式设计图

2.3 攻击检测算法

塔防游戏中的攻击检测主要是围绕塔展开的,塔遇到以下三种情况会发生攻击:(1)怪物进入攻击范围;(2)怪物停留在攻击范围;(3)怪物离开攻击范围。当怪物进入攻击范围时,有集火目标但是没有找到集火目标,判断找到游戏物体的Tag,当找到的是物品且是集火目标,锁定当前第一个进入检测区域的物品为攻击目标。当找到的是怪物,判断该怪物是不是集火目标。当怪物是集火目标时,锁定当前第一个进入检测区域的怪物为攻击目标。当怪物不是集火目标时,锁定当前第一个进入检测区域的怪物为攻击目标。当前没有集火目标且当前没有攻击目标,锁定当前第一个进入检测区域的怪物为攻击目标。怪物停留攻击范围的判断方法与怪物进入攻击范围的判断方法一致。当怪物离开攻击范围时,判断怪物是不是塔的攻击目标,如果是,则将塔设置为无集火目标、无攻击目标状态。攻击检测算法流程图如图4所示。

图4 塔攻击检测算法流程图

2.4 特效和渲染管道

游戏中的图像特效是基于Shader算法编程实现的渲染管线完成的。Shader是一种着色器,主要负责将输入的网格(Mesh)通过编程的方式按照用户需求进行着色和贴图,然后渲染输出。在Unity3D中,Shader可以分为表明着色器、固定功能着色器和顶点/片段着色器三种[16],Shader编程是计算机图形学的重要部分,其主要是通过针对GPU的渲染管线(也即GPU绘图流程,包括顶点绘制、面绘制、光栅处理、像素着色等过程)的具体操作变更来实现的。也就是说,用户可以通过在GPU渲染管线的某个或者多个过程中注入自己编辑的程序来实现想要的图形特效效果。

具体的一个Shader程序要做的内容如下:第一步,从内存中读取图形对象的数据(顶点等),并通过三角形网格对其进行近似,然后将每个对象以其自身的方向和大小放入局部坐标系中,再通过应用几何变换将所有对象组合到一个全局坐标系中。第二步,处理摄影机视角,即以虚拟摄像机为世界空间的原点的坐标系统处理。由于相机看不到背面,因此会剔除所有背面多边形。第三步,照明步骤。光源是在游戏世界空间中定义的简单对象,是颜色,强度,方向,焦点和位置的组合,然后执行剔除步骤,在视锥体内部(相对于外部)的对象被保留在场景中(视其完全被剔除),而在视锥内部和外部之间的对象被部分剔除。最终,渲染场景。光栅化将这些像素转换为形成一系列三角形的屏幕坐标,应该对其进行检查和着色。

接下来介绍本文设计的消融算法,消融是光影渐变消失的一种特效,而消融算法从某种程度上可以理解为一种插值,实际上就是通过构造噪声图来实现颜色侵蚀过渡的效果,然后逐渐增加透明度从而实现渐变消失。通常是应用于火焰和消失特效。下面给出本游戏系统中使用的消融特效算法:

其原理是通过点积的形式,操作frag处的像素颜色值与一个float3的值,然后得到消融RGB权重,该权重越小则表示其像素越快消失。而消失速率_Time.x每帧自增1/8s,discard是消除像素。

3 游戏测试

本游戏的测试主要是围绕游戏性能(游戏平衡性、游戏顺畅度等维度)、游戏压力测试、游戏功能测试等方面展开。打开游戏后其怪物界面如图5所示。

图5 怪物界面显示

接下来转入游戏关卡,地图和怪物正常加载,图6是奖励系统测试图。

图6 奖励系统测试图

本游戏提供了地图编辑器。当Unity编辑器处于Tool模式时可以正常使用地图编辑器工具读取关卡列表,编辑怪物种类数量,恢复地图编辑器默认状态,清除怪物路点,保存当前关卡数据文件。地图编辑器如图7所示。

图7 地图编辑器

4 结论

本文针对基于Unity3D引擎技术设计和实现了一款塔防游戏。游戏基于工厂模式设计并实现了对象资源的池化管理,提出了基于责任链的怪物AI,对于攻击检测算法也提供了有效的解决方案。针对游戏特效,本文以消融为例介绍了本游戏的特效算法,可以有效的提供良好的渲染效果。

猜你喜欢

编辑器怪物工厂
你距离微信创作达人还有多远?
失踪的怪物等
车辆段收发车运行图编辑器的设计与实现
为什么工厂的烟囱都很高?
Women in the Workplace, Fighting Spam, Money in the Museum, and the Mood for Food
基于VLIW目标机的ELF二进制编辑器设计与实现
离散制造MES在照明工厂的实施与应用
曾被误认为怪物的伞
植物工厂