基于Unity3D的移动塔防游戏设计与实现

2019-03-14 07:17胡杭
现代计算机 2019年4期
关键词:关卡魔法导弹

胡杭

(温州大学数理与电子信息工程学院,温州 325035)

0 引言

近年来,随着移动设备的不断发展,手机端游戏越来越受到大家的青睐。App Annie数据显示,移动游戏市场2018年在全球的规模达到了700亿美元,增长速度达到26%。

Unity3D游戏引擎是一款全球领先的专业游戏开发引擎,在游戏开发领域占有着极大的比重,具有简单易上手、功能丰富等特点。Unity3D引擎中集成了大量的开发工具,利用这些工具可以大幅度缩短开发周期[1]。另外,Unity3D具有跨平台开发的优点,开发人员只需要一次开发,就可以将项目部署到多个平台,包括Windows、iOS和Android这些主流的平台,大大缩短了游戏开发周期[2]。

塔防游戏作为一款经典游戏,被许多玩家所喜爱。塔防游戏中面对敌军的入侵,玩家可以建造一系列的防守道具来抵御入侵,最终取得游戏的胜利。目前游戏市场上有诸多塔防类游戏,例如植物大战僵尸、皇家守卫军等。这几款游戏在可玩性和策略性上占有着很大的优势,也深受广大玩家所喜爱。但由于许多这类游戏是基于2D平台进行开发的,因此在游戏画质,游戏代入感方面并不是很出色。

本文针对2D塔防游戏存在的一些局限性问题,使用3D引擎进行设计和开发。在保证可玩性与策略性的基础上,使用3D模型代替2D模型,增加视野控制功能,优化游戏画质,增强游戏的趣味性。

1 游戏模块设计

塔防游戏功能模块划分如图1所示。

图1 游戏总体模块结构图

加载模块:加载模块主要实现加载界面,游戏场景加载时的一个过渡效果,能够显示当前场景的加载进度,实现异步交互,提供给玩家一个反馈,能够增强玩家的游戏体验。

商城模块:增加商城模块可以增加游戏的策略性。商城用于购买各种游戏道具,购买道具需要一定量的钻石,钻石可从游戏中获取,也可以通过充值操作进行充值。购买的道具可在游戏中进行使用,不同的道具有不同的效果,对于游戏的局势可以产生一定的影响。

升级模块:增加升级模块是另一种增强游戏策略性的方式。升级模块可以进行各类炮塔的升级,每种炮塔的升级都能对炮塔的属性进行一定的加持,玩家可以定制自己的升级策略。升级需要消耗一定数量的星星,星星的获得是视游戏通关的情况而定,例如每次关卡完美通关可获得3个星星。升级模块可以促使玩家通过不断提升关卡等级来解锁新的升级策略。

道具模块:道具模块主要用于商城购买道具的施放。商城模块主要注重购买,而道具模块注重道具施放。例如,万箭齐发道具可以向指定区域发射大量弓箭,造成物理伤害;龙卷风道具可以在指定区域形成龙卷风,造成范围魔法伤害。

魔法模块:为了使游戏更具特色,增加了魔法模块。例如,治疗魔法可以恢复1点生命值;减速魔法可以使指定区域敌人行进速度降低一段时间。魔法不消耗物品,但是具有冷却时间,只有冷却时间完成之后,魔法才可以使用。因此,如何有效地运用魔法,需要从游戏整体策略上进行规划与设计。

玩家进入游戏主界面后,会呈现出已经解锁的关卡,玩家可以通过不断地通关当前关卡来解锁下一个关卡。在关卡选择界面,玩家可以进入商城和升级模块,商城模块可以进行道具的购买,升级模块可以指定相应的升级策略。每一次战斗都需要建立不同的炮塔防线来阻止敌军的进攻。可以通过加速按钮加速游戏的进程,通过暂停按钮暂停游戏进程。每当战斗胜利,便会得到一定的游戏奖励。

2 游戏实现

2.1 Unity 3D游戏引擎

Unity3D引擎具有诸多模块,这里列举了一些使用比较频繁的功能模块。

后来,摄影家办了展览,她在圈中就小有名气了。涂当偶尔也给她拍几张发在微博上,但一直是半红不黑的,直到那天陈小北找到她。陈小北把她的照片放到了某知名网站上,并想方设法做成头条新闻。一夜之间,她红了,三炒两炒,有一些名不见经传的牌子或网店找她代言。于是,街头巷尾的婆婆妈妈也知道了,只除了她那个从不上网的爸爸叶之容。

碰撞器模块:碰撞器是游戏开发中至关重要的一个组件,它不断检测着物体之间的碰撞,并调用相应的回调函数。开发者可以在Unity脚本中重写这些回调函数来对碰撞做出相关的策略。碰撞的实质其实是碰撞盒的碰撞。在Unity引擎中,为开发者提供了多种碰撞器,常见的有盒型碰撞器(Box Collider)、球型碰撞器(Sphere Collider)、胶囊型碰撞器(Capsule Collider)和网格碰撞器(Mesh Collider)[3]。其中,前三者可以处理模型较为简单的物体,碰撞器能够较好地包裹在模型的周围形成碰撞盒,这样检测碰撞而消耗的性能也会较小;但是对于一些比较复杂的模型或者对碰撞盒的精确度有着较高的要求的情况下,就可以使用网格碰撞器。

Unity Shader:Unity 提供了许多内置的 Shader,其中,Unity标准着色器(Standard Shader)集成了非常强大而全面的功能。我们可以通过设置十种常用的贴图(反射率贴图、法线贴图等)来渲染模型;我们可以设置渲染模式为Opaque(不透明)、Cutout(镂空)、Fade(隐现)和Transparent(透明)来呈现不同的模型效果。另外,我们可以通过调节参数面板上的相关参数来改变模型的平滑度和金属度。

动画系统:Unity的动画系统由以下几部分构成:Avatar(骨骼模型)、Animation(动画片段)、Animator(动画组件)、Animator Controller(动画控制器)。图2为一个人形的骨骼模型,图3为该模型的骨骼节点映射情况,Unity可以通过Avatar检视面板来调节骨骼模型的各个节点的映射。骨骼动画不会改变对象的位置、旋转和缩放等内容,但会在帧间对其内部组成进行移动或变形[4]。

图2 骨骼模型

图3 骨骼映射

2.2 建立3D模型

3D游戏开发过程中,3D建模是必不可少的步骤。玩家首先会通过模型去观察整个游戏世界,进而去体验游戏的其他内容。优秀的游戏模型能够带来游戏画面的直观感受,增加游戏的吸引力。诸如3Ds MAX、Maya、Rhino等软件都能实现快速建模。通过采集模型,利用3Ds MAX软件进行模型细节调整,能过完成游戏开发的初期建模工作。

2.3 实现与优化

MVC(Model-View-Controller)框架主要运用于软件的分层开发,合理利用MVC框架能够达到很好的解耦效果。MVC框架在软件开发中能够对软件的可靠性、规范性和可扩展性起到极大的促进作用[5]。在游戏开发中,Model进行游戏数据的读出和写入,View层进行UI视图层的控制,Controller层进行游戏核心逻辑的控制,并且对Model层和View层起到了一定调控作用。

如何平衡游戏画质和游戏性能两个方面一直以来是本文研究的重点。本文总结了如下几点优化措施:

(1)使用对象池实现对象的预加载以及回收。游戏对象在创建过程中需要消耗大量的资源,导致设备卡顿。使用对象池能够对游戏对象进行重复利用,减少资源的消耗,提高游戏性能。

(2)在保证图像质量的前提下对图像进行压缩,并减少冗余资源和重复资源。这样做的好处是能够减少安装包的体积,降低内存要求。

(3)使用静态贴图烘焙代替动态灯光效果。动态灯光效果所消耗的性能非常巨大,一般适用于动态的物体。对于静态游戏资源,采用静态贴图烘焙能够有效减少渲染所消耗的性能。

(4)为常用的物体添加Tag或Layer,而不是每次都使用Find查找。在开发中经常涉及到游戏对象的查找,遍历查找所消耗的CPU资源是比较多的,通过添加Tag或Layer的方式查找能够减小CPU的压力。

2.4 导弹追踪算法

图4 导弹追踪示意图

如图4所示,假设导弹的位置为(x1,y1,z1),目标的位置为(x2,y2,z2),连接导弹和目标的坐标,得到一条线段,线段和导弹初始发射方向所构成的夹角a就是要旋转的角度,即在导弹飞向目标的过程中,角a不断趋向于0。假设d为初始位置导弹和目标的距离,s为飞行过程中某一时刻导弹和目标的距离,a为线段和导弹初始发射方向所构成的夹角,则某一时刻线段和导弹方向所构成的夹角angle可以表示为s/d*a。因此,在导弹不断飞行的过程中,角度逐渐的缩小,当距离为0时,导弹的正前方就是目标。算法实现核心思想如下:

(1)获取目标的位置坐标;

(2)获取导弹发射方向与目标位置连线的夹角;

(3)计算本帧内导弹移动的距离以及需要偏移的角度,并对导弹角度进行调整;

(4)循环步骤(3)直至导弹到达目标位置。

3 实验结果

图5为关卡模块实现的效果图,通过选择不同的关卡来进行挑战,并解锁后续的关卡。关卡上的星星表示当前关卡的评级。在该界面可以点击商店按钮进入商店,点击建造按钮进入升级界面。图6为道具商店界面,可以根据自身的金币购买所需的道具,增强战斗力。

图5 游戏关卡选择界面

图6 道具商店界面

图7为游戏战斗画面,玩家可以通过建造不同的炮塔来防御敌人的入侵,杀死敌人能够获得金币,金币可用来建造升级炮塔。当消灭所有的敌人时,就获得胜利,游戏胜利画面如图8所示。

图7 游戏战斗画面

图8 游戏胜利画面

4 结语

本文介绍了一个移动塔防游戏的设计和实现过程。本游戏使用3Ds MAX进行游戏建模,使用碰撞系统来进行碰撞检测,使用动画系统进行动画控制,使用Unity Shader进行渲染,使用MVC框架进行更好地代码维护。并且,运用游戏优化手段来平衡画质和性能,使用恰当的算法来实现游戏逻辑。本文对塔防3D游戏设计与实现进行了详尽的阐述,完成了3D休闲类游戏的设计与开发。

猜你喜欢
关卡魔法导弹
松软魔法
本期主题
——五月,是诗的样子!
瞄准未来战争的小型导弹
导弹燃料知多少
疯狂冒险岛
魔法笔
神奇的魔法
正在发射的岸舰导弹
时空穿梭