基于Unity3D战争模拟策略游戏的设计与实现.doc

上传人:封****n 文档编号:96763681 上传时间:2024-03-19 格式:DOC 页数:52 大小:5.26MB
返回 下载 相关 举报
基于Unity3D战争模拟策略游戏的设计与实现.doc_第1页
第1页 / 共52页
基于Unity3D战争模拟策略游戏的设计与实现.doc_第2页
第2页 / 共52页
点击查看更多>>
资源描述

《基于Unity3D战争模拟策略游戏的设计与实现.doc》由会员分享,可在线阅读,更多相关《基于Unity3D战争模拟策略游戏的设计与实现.doc(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、本科毕业设计(论文) 基于Unity3D战争模拟策略游戏的设计与实现Design and Implementation of War Simulation Strategy Game Based on Unity3D 院 (系)计算机系专 业软件工程班 级七班学 号16210120724学生姓名杨中华指导教师吴瑞然提交日期2020年4月13日内容摘要互联网时代中,科技产物正是最被人们所关注和喜爱的,科技的飞跃发展让曾经天马行空的幻想事物一点点地挤进了人们的快节奏的生活。忙碌严肃的生活需要放松和娱乐,因此促进了娱乐类事业的发展,而电子游戏作为科技结合娱乐的产物,以难以置信的速度风靡了全世界,而能

2、够得到科技发展反馈的电子游戏,在硬件水平提升的加持下,在画面上、流畅性以及可玩性上仍在不断地提升。与当前主流的注重操作与考验反应速度的刺激型游戏不同,慢节奏的策略类游戏对更多的游戏受众群体更为友好。本论文将基于Unity3D游戏开发引擎,结合刺激型战斗类游戏的趣味性以及策略型益智游戏的休闲性,开发即时战争模拟策略型游戏。多单位型游戏对比普通游戏需要更大的计算量,在单个单位的逻辑中细微的漏洞在数量的加持下也很容易成为无法处理的累赘,因此也考验着开发者的逻辑能力。本文记录了探索过程中涉及到的各领域的原理以及遇到的难点及其解决方案,希望能给到后来的开发者提供借鉴与参考。关键词:Unity3D 3D视

3、角 战争模拟 趣味 策略AbstractIn the Internet era, the products of science and technology are the ones that people pay the most attention to and love. The repid development of science and technolgy haspromoted the once unrestrained fantasies gradually being squeezedinto peoples fast-paced life.The busy and se

4、rious life needs relaxationsand entertainments, in consequence, itpromoted the development of the entertainment business.At the same time,video games,as a product of science and technology combined with entertainment, swept the world with incredible speed. For it can get feedback from technological

5、developments, the video games are still improving in graphics, fluency, and playability under the support of hardware level improvement.In contrast to the current mainstream of stimulating games that focus on operation and test reaction speed, slow-paced strategy games are more friendly to more game

6、 audiences.This paper will develop real-time war simulation strategy games based on Unity3D game development engine, combining the fun of stimulating combat games and the leisure of strategy puzzle games.Multi-unit games require more computation than normal games, enven asmall bug in the logic of a

7、single unit can easily become an unmanageable burden with the abundantof the number,therefore, the process of development alsotrialsthe logic of developers.In the hope of providing consults and references for future developers, this paperwillkeep a record of the principles of various fields involved

8、 in the process of exploration and the difficulties encountered and their solutions.Keywords:Unity3D 3D View Simulation of the War Funny Strategy目 录第一章绪论11.1概括11.2选题的意义和目的11.3国内外的发展及现状11.4设计思路3第二章游戏开发工具介绍42.1游戏引擎42.1.1Unity3D游戏开发引擎42.1.2A*PathFinding组件42.1.3物理引擎52.1.4粒子效果系统52.2C#62.3VS62.4Audacity62

9、.5VLC62.6GIMP7第三章游戏设计83.1目标和任务83.2功能需求分析83.3性能需求分析83.4数据需求分析93.5总体设计93.5.1游戏功能图103.5.2游戏流程图113.5.3E-R图12第四章游戏素材134.1模型获取134.2动画获取164.3粒子效果获取164.4布置场景和预制体16第五章游戏设计175.1搭建场景175.1.1场景设计175.1.2场景制作175.2士兵脚本195.2.1士兵基本属性基类195.2.2AStarPathfinding插件实现寻路实现原理与使用195.2.3肉盾战士215.2.4战士寻路函数215.2.5战士攻击函数225.2.6弓箭兵

10、寻路函数245.2.7弓箭兵攻击函数245.2.8弓箭运动脚本265.3建筑物脚本265.3.1普通建筑基类265.3.2防御塔类275.3.3炮弹逻辑275.4法术支援285.4.1陨石法术药水脚本285.4.2爆炸粒子效果295.5摄像机脚本305.5.1摄像机旋转305.5.2摄像机运动315.5.3鼠标滚轮与正交摄像机与透视摄像机交互325.6UI设计335.6.1士兵血条335.6.2防御塔血条345.6.3士兵数量栏与摧毁度评级345.6.4其他游戏界面355.7添加音效375.8其他优化385.9游戏包导出41第六章游戏测试426.1试玩体验426.2数值调整426.3玩家体验优

11、化改进设想42第七章总结44参考文献45致谢46广东东软学院本科毕业设计(论文)第一章 绪论1.1 概括伴随着三次工业革命,人类在探索的道路上获得了前所未有的发展,时至今日,科技依然在飞速发展着。于20世纪四十至五十年代启动的第三次工业革命,人类在电子计算机微电技术领域上取得了开拓性的突破,这一突破孕育了为电子游戏诞生的温床。再随着时代齿轮的推进,机械精度的不断上升,更快更小芯片的产生,更低成本的生产技术出现,高科技产品现在已经普及化,不再是上流社会的奢侈品。电子设备的普及让电子游戏的风波卷席了全世界,五花八门的游戏横空出世,受到了人们的喜爱和追捧,闲暇时间一起玩电子游戏已经成为了当代的一种流

12、行的娱乐消遣方式。1.2 选题的意义和目的游戏开发技术愈来愈成熟,市面上已经有了许许多多完善的游戏开发引擎。而在鼓励开源,技术分享的时代里,门槛更低的开发引擎往往更容易受到追捧。在这样的环境下,Unity3D向全世界的初级游戏开发者提供了免费精简的开发平台,呼吁更多热爱游戏的人加入到游戏开发行业中来。随着时间的推移,Unity3D的高容纳性使得其受欢迎程度已力压曾经的主流开发引擎虚幻,成为世界用户数量最为庞大的游戏开发引擎。富有想象力与创造了的开发者前辈们,结合着自己的想法与技术在电子游戏的发展史上划上色彩斑斓一笔又一笔。如今技术日愈成熟,硬件设备基础不断提升,使得在游戏开发过程中能够在功能实

13、现后仍留有余力去保证精美的画面,从而获得视觉上的冲击力提升。而曾经称霸了电子游戏领域的多单位型游戏碍于性能方面的缺憾,锋芒逐渐消散,如今有着更成熟的开发技术以及性能更优的硬件条件。为了让在游戏中分析战场局势、率领军队战斗的雄伟设想得到更好的传承,以及在开发过程中依靠多单位行动带来的性能制约磨练自身的逻辑整理能力,本设计将基于Unity3D游戏开发引擎完成一款模拟战争的策略型游戏,以在踏足新的过程中不断探索获得积累。1.3 国内外的发展及现状新兴的商业娱乐产物电子游戏,自从诞生以来便受到人们的关注并迅速地发展着,历时18年,电子游戏就成为了世界上科技水平较为发达的国家的电子娱乐工业基石。直到美国

14、电子游戏业发生了雅达利震荡,电子游戏市场遭到世界性的重创,全世界都对电视电子游戏失去信心,在这之后的两年,北美地区游戏市场上再也没有具有划时代意义的电子游戏出现,电子游戏的发展遇到了最大的瓶颈,直到1985年日本公司任天堂打破僵局使得游戏事业得以重生,电子游戏产业一跃成为可以与当时最受欢迎的电影业竞争获利最高的娱乐产业。直至今日,电子游戏产业一直在飞跃发展,受到先进的开发引擎兼完善的游戏交易平台加持,在娱乐产业中以不可阻挡的势头占据着领军地位。国外拥有着最高开发预算和推广级别的电子游戏,在游戏开发中伴随着高额的经济风险,大量的开发成本的投入让国外游戏理所当然地拥有着最高的研发水准。无论是玩法上

15、地创新还是视觉上的震撼体验都能让玩家惊叹,下至剧情及配音,无一不体现超高的开发水准。在各领域的游戏制作上都遥遥领先,出名的游戏研发厂商有“游戏界航空母舰“之称的EA、任天堂、索尼娱乐、育碧等。游戏引擎方面,位于游戏引擎之首的虚幻引擎(Unreal)5年前在开放世界游戏领域上产出了惊世之作GTA5,以丰富巧妙的规则设定还原了一个虚拟的现实城市;Gamebryo、Creation引擎,创造了运动模拟类的大作极品飞车NBA等,将赛车篮球等运动体验真实的还原到了游戏中;起源引擎(Source)则是创造了MOBA类竞技游戏玩法的顶尖作品Dota2;创建了世界上数一数二的Havock物理引擎的IW Eng

16、ine引擎,其优秀的物理引擎甚至用于好莱坞电影制作,作品使命召唤也是无比优秀的作品。自主研发的游戏引擎也孕育了不少风靡世界的作品:暴雪的守望先锋和Riot的英雄联盟。“国外的游戏越做越真,国内的鲲越吞越大”,这句在网络上令人啼笑皆非的玩笑话无法概括国内所有的游戏产业环境,但是在一定程度上体现了玩家群体对国内的游戏开发技术的蔑视与讥讽。但是事实并不是这样,当前国产的网络研发引擎主要为自行研发。首先开发了魔域、征服、投名状Online等优秀游戏作品的C3、S3游戏引擎就是网龙公司的自主研发的;其次产出了天骄3的 OverMax游戏引擎也是由国内自主研发的杰作;最后是完美时空公司自主研发的游戏引擎A

17、ngelica,代表作品完美世界,以上的作品都是优秀且受玩家追捧的,可以看出国内游戏发开企业在游戏开发的核心技术方面已经具备了强大的能力,但在产品研发的方面的创新思想较为薄弱,一味效仿,追随其后,后续产出的作品同质化强。腾讯公司出自Unty3D引擎的MOBA类手游王者荣耀,在2018年以19.3亿美元的的年收入登上全球收入第一手机游戏的宝座,更是在2019年免费游戏年收入排行榜上,以一亿的年收入差距压制了网游巨头英雄联盟,同期挤入了前十的游戏还有出自虚幻4引擎的手机游戏和平精英, 亦出于是经营模式的不同,国内虽拥有制作优秀游戏的水平,但是在以盈利为主要目的游戏产业里,国内的游戏厂商更倾向于避开

18、高额的经济风险降低开发成本,着重于获得用户后的运营管理,依靠着巨大的玩家基数和优秀的运营模式获得巨额利润,在经营上取得巨大的成功,从而作品本身缺乏新鲜感与冲击力。1.4 设计思路本设计计划基于Astar寻路算法,以观察战略形式决定士兵落点及进攻方向的操作方式,在士兵部署后通过Astar寻路算法自动寻找距离最近的攻击目标进行寻路及攻击。制定多个士兵状态互相协调的AI系统,完成防御建筑与士兵之间的包围盒互相检测与自动攻击,制作不同的兵种AI与防御建筑类型来提高可玩性,初步设想兵种分为普通战士、拥有高额生命值的兽人族佣兵、拥有在远程攻击能力的射手或法师;防御建筑类型分为单体攻击的弓箭发射塔及范围伤害

19、的炮塔。在士兵部署后玩家可以通过使用通关后获得的辅助魔法辅助场上的士兵进行作战。每一关根据持有的金币雇佣不用费用和属性的兵种进行战斗。让玩家在观察进攻地形的同时思考优势兵种以及进攻思路从而获得战斗奖励,在战斗中让防御类建筑概率掉了辅助魔法药水,增加战斗的多样性和未知性,从而增添游戏的趣味性。在场景中使用火焰、雷电、爆炸等粒子效果增加游戏的视觉冲击力。第二章 游戏开发工具介绍2.1 游戏引擎游戏引擎是将游戏开发过程中常用的模块组建在一起的工具,能够减少游戏开发中花在基础部分建设的时间,通常包括物理引擎、音效、脚本引擎、渲染引擎、动画系统、碰撞检测系统几个部分,是当下游戏研发过程中必备的重要工具。

20、优秀的游戏开发引擎往往可以更好地孕育优秀的游戏。2.1.1 Unity3D游戏开发引擎Unity3D的logo由三个互相连接着的箭头组成,正如Unity这个名字一样寓意着团结。Unity公司在游戏开发成本高昂的背景下,发布了功能强大的免费独立版Unity2.6,且依靠着对iOS和Wii(任天堂电视游戏主机)平台的支持的在众多游戏引擎中脱颖而出。本设计使用的版本为Unity2019.2.19。Unity3D游戏开发引擎(以下简称U3D)是世界上用户量最多的游戏开发引擎,拥有适合新手学习的免费个人版和深度开发的专业版,引擎中集成了一系列用于游戏开发的模块化工具,凭借着强大的跨平台特性在顶尖游戏开发

21、引擎里占据了一席之地,时至今日,U3D所支持的研发平台已超过30个,强大的跨平台特性意味着使用该引擎将能够大量减少开发过程中用于解决平台差异的时间。U3D在集合多种开发工具的同时拥有着个性化的人机交互界面,具备着视觉化编辑(Scene视图)和预览动态游戏的特性(Game视图),动态监测资源占用状况的性能分析器(Profiler),同时拥有可以在游戏运行图中实时修改参数的属性编辑器(Inspector视图)。有了跨平台及用户基数大的基础,使得U3D在资源的获取以及导入上也尤为方便,U3D几乎能够支持所有的主流三维格式,且能够将贴图材质自动转换为能与相关应用程序协调工作的U3D格式,U3D还拥有着

22、官方的资源商店AssetStore,用户能够在AssetStore上发布或下载导入各种需要的资源。在脚本编译上,U3D中的MonoDeveloper编译环境支持本设计使用的C#语言,此外还支持Boo、JavaScript。2.1.2 A*PathFinding组件 本设计中引入了AssetStore中的AstarPathFinding Project(A*寻路插件),用于辅助游戏中的寻路逻辑。该插件中定义了三种网格类型:第一种是可实现精确的移动,高速度且占用内存最小的Navmeshes(导航网络),Navmeshes是基于三角形构建的导航网络,每个三角形都制定了AI可以行走的区域,因为导航网格

23、可以构建出带有很少三角形的大区域的缘故,使得Navmeshes适合在在包含的开放区域少的游戏里使用;第二种是能够快速更新、具有更高灵活性的Grid Graphs(网格图),Grid Graphs通过将节点像网格一样排列的模式来构建网格图,每一个节点都被放置在场景中并且在网格坐标处采样收集信息,这样的规则结构让Grid Graphs能够更快速地更新,适合需要频繁更新地图建筑物状态地游戏,常用于TD类游戏和RTS类游戏;第三种是灵活性最高且能够实现自定义的Point Graphs(点图),能够从向其抛出的任何点列表中构造点图。本设计采用的网格类型为Grid Graphs。AstarPathFind

24、ing组件可以同时支持大量的代理寻路,能够管理巨大的游戏世界。同时项目中含有丰富实用的API接口,帮助开发者实现一些常用的功能,如在网格图中添加建筑物生成障碍物、在导航网格中生成随机点等功能,还有最重要的该插件支持发行到U3D支持的任何平台。2.1.3 物理引擎3D游戏在体验上本质区别于2D游戏的关键是物体的物理真实互动效果,U3D在原有的PhysX物理引擎外,在去年还加入了Havok物理引擎,两款物理引擎的加持使U3D能够非常出色地模拟物理效果,但是需要注意的是,Physx物理引擎使用的摩擦模型是针对性能和稳定性的模拟,摩擦力计算在两个面接触的时候会被计算成现实物理学的两倍,需要调整摩擦系数

25、才能还原更真实的结果。许多优秀的游戏大作及电影都会使用物理引擎,在U3D中可以给游戏物体添加Rigidbody组件来赋予物体物理效果。相似的组件还有Character Controllers、Collider等,开发者可以调节组件中的参数来实现预期的物理效果。任何一个游戏的设计都需要其物体特性的合理性,这样才显得真实可信。2.1.4 粒子效果系统现实世界中的水流、烟雾、火焰、浮云、星辰、光线、爆炸等抽象的视觉效果,这些抽象的视觉效果很难用传统的渲染技术达到很高的真实感,而粒子系统则是模拟这些特定的模糊现象的计算机图形学技术, 通过粒子的模糊性和制定的特定运动规律和边界参数描述粒子,使得粒子系统

26、能够帮助开发者在游戏世界中制造现实中的模糊事物。粒子系统的核心为用于控制共享时间轴的Particle System,场景中可以拥有多个粒子系统,并且每一个粒子系统都有自己单独的时间轴,发射后通过Particle Painter对粒子进行可视化显示,粒子可以被赋予逐渐透明化的贴图材质和粒子渲染参数来达到模糊的视觉效果。粒子系统与物理引擎互相辅助可以还原出以假乱真的游戏世界,给玩家带来震撼的视觉体验。2.2 C# C#是微软公司发布的高级程序设计语言,拥有面向对象的特性,与Java有着相似的编译成中间代码再运行的流程和编辑语法,和Java有很大的相似之处。C#并不是跨平台语言,只有运行于.NET

27、Core平台(微软官方的开源计算机软件框架)上时才能实现跨平台,本设计的C#语言运行于.NET Framework4.7之上,而能够在U3D中使用C#编辑脚本的原因是在U3D中Mono对C#语言进行了重新实现,使得U3D能够使用C#语言来进行开发。而选择C#作为开发语言的原因是C#比起需要频繁拆装箱操作的UnityScript速度更快,U3D的C#语言的开发文档也是最完善的,在遇到问题的时候更容易解决。2.3 VSVS全称Mircrosoft Visual Studio,是在编程行业内非常常用的一套开发环境,包括了开发一个软件所需要的绝大部分基本工具,编辑的代码程序能够在微软支持的所有平台运行

28、,本设计中采用的VS版本为Visual Studio2017,.NET版本为.NET Framework 4.7。2.4 AudacityAudacity是一款流行于Linux系统的的免费跨平台音频处理软件,具有小体积、开源、操作简单、功能丰富等特点,本设计中将使用 Audacity裁剪制作游戏内需要用到的音频资源, 使用的版本为Audacity2.3.2。2.5 VLCVLC是一款开源的跨平台多媒体免费软件,这款软件支持众多的音频与视频解码器,能够对音频或视频文件进行格式转换,同时还有体积小巧的特点,本设计中将使用VLC将视频素材.flv文件转换成U3D使用的的.ogg格式音频文件供Auda

29、city裁剪使用,使用版本为VLC-3.0.6。2.6 GIMPGIMP全称GNU Image Manipilation Program,是一款免费开源的跨平台图像处理软件。不得不说的是,这些开源免费的软件通常直接就把软件的功能精简后作为软件的名称,GIMP拥有不逊于图像处理巨头Photoshop的功能的同时,拥有比Photoshop更简洁的界面,外加上软件体积小及免费开源的特点,GIMP在Linux系统下深受欢迎,拥有Linux系统的Photoshop称号,本设计将使用GIMP裁剪修改UI图片的素材,使用版本为GIMP 2.10.12。第三章 游戏设计3.1 目标和任务撒本设计将完成一款缓解

30、生活中快节奏状态的休闲即时战略游戏,用于调整工作生活中的不良情绪,同时在闲暇时间感受游戏的带来的快感,体验用领袖的玩家视角调遣战士进行攻击的感觉,从而达到在游戏后心旷神怡的良好状态的目的。亦能在游戏中锻炼到玩家的、判断能力和逻辑思维能力和对环境的观察能力,发挥策略型游戏的良性功能。3.2 功能需求分析能够获取鼠标点击信息的按钮以及在游戏场景中再次点击后能够在鼠标指针处生成对应兵种的士兵。生成的士兵能够自动寻找距离最近的敌方目标绕开障碍物进行寻路。敌方建筑能够被士兵攻击并破坏消除。士兵破坏首要目标后能够自动寻找下一个攻击目标并自动寻路。士兵需要能够被防御型建筑物攻击造成伤害并消除。拥有远程攻击能

31、力的士兵需要能够隔着城墙攻击墙内的建筑物。防御型建筑需要选中进入范围的士兵进行攻击。防御型建筑在消灭当年攻击目标前不能将火力转向其他目标。需要有选定防御建筑为攻击目标的兵种。需要有范围攻击的防御建筑。攻击目标消灭后能够自动选择下一个目标,直到范围内没有目标为止。带有生命值的游戏物体在受到伤害时候需要能够显示血条。血条需要以不同的颜色来动态地反映游戏物体的生命状况。构建金币系统,玩家通过使用拥有的金币雇佣士兵,进行游戏获得金币。构建根据破坏程度来对游戏结果进行评分的评分系统。声音开关选项按钮、暂停按钮、认输按钮和重新开始按钮。需要有开始界面、兵力储备界面、加载界面、结束界面。3.3 性能需求分析

32、士兵生成按钮点击后响应时间在0.2秒以内。士兵寻路AI响应时间在0.2秒以内,寻路过程中除非目标丢失不得停顿 。士兵在抵达攻击范围处在0.2秒内需要做出攻击。士兵目标丢失后停顿时间在0.5秒内需要做出寻找新目标行为。防御塔在目标进入范围的响应时间在0.2秒内。防御塔丢失当前目标后重新选择攻击目标的响应时间在0.2秒内。在场景中存在50个或以上AI同时自动行动时候保持流畅。在场景中连续使用10个以上法术召唤大量陨石时需保存流畅。3.4 数据需求分析建筑物在游戏中拥有最高的生命值。单体攻击型建筑在游戏中拥有最高的攻击距离。单体攻击建筑攻击力数值需要高于范围攻击建筑的攻击力数值。肉盾战士在士兵中拥有

33、最高的生命值体现肉盾价值。肉盾战士只能拥有最低的移动速度。远程士兵只能拥有较少的最大生命值和攻击力。远程士兵的攻击距离应小于任何防御型建筑物的攻击距离。3.5 总体设计3.5.1 游戏功能图游戏内的对象大致分为三种:士兵、防御塔和法术药水,士兵功能包括选择目标、寻路移动、攻击和死亡;防御塔功能包括选择攻击和受损;法术药水功能包括碰撞伤害和粒子效果,整个游戏的大体功能图如下。图3-1 游戏功能图 3.5.2 游戏流程图玩家在进入游戏后在士兵购买页面购买士兵进入游戏场景,在场景中点击士兵选择按钮部署士兵,士兵AI开始行动,AI全部阵亡则游戏失败,摧毁所有目标则游戏胜利,整个运作过程如下。图3-2

34、游戏流程图 3.5.3 E-R图E-R图中展示了士兵实体、法术药水实体及陨石实体的基本属性及与建筑物实体之间的联系,士兵实体中包含了两个特殊实体弓箭兵和肉盾战士,分别拥有远程攻击距离和优先攻击防御建筑的特性,图示如下。图3-3 E-R图第四章 游戏素材4.1 模型获取在中下载的人物模型和贴图:士兵、弓箭兵、肉盾战士。图4-1 肉盾战士图4-2弓箭兵图4-3 士兵给人物模型配置模型贴图。图4-4 贴图配置在Asset Store中下载的模型资源:lowpoly medieeval buildings资源包,包含房屋模型、弓箭塔模型、炮塔模型。图4-5 资源包Floor materials pac

35、k资源包,包含地板材质贴图。Yughues Free Ground Materials资源包,包含草皮地板材质贴图。Skybox Series Free资源包,包含天空盒子材质贴图。Dream Forest Tree资源包,包含树木贴图、草丛贴图。Rocky Meadow Asset资源包,包含石头模型与贴图。 图4-6资源包免费的中世纪武器资源包,包含弓箭模型与贴图。Potion,Coin And Box资源包,包含法术药瓶、宝箱模型与贴图。Fire & Spell Effect资源包,包含陨石模型与贴图。图4-7 资源包4.2 动画获取在中下载普通骨骼的动作素材包,分段裁剪出角色的基本行为

36、动画:步行、跑步、闲置、攻击、死亡、欢呼。4.3 粒子效果获取使用Fire & Spell Effect资源包中内汉的爆炸粒子效果及火焰粒子效果。4.4 布置场景和预制体将下载的模型资源导入到游戏目录下,配置贴图测试完毕后打包成预制体供游戏逻辑使用。第五章 游戏设计5.1 搭建场景5.1.1 场景设计游戏中包含两种场景:兵力准备阶段的雇佣士兵场景1(游戏准备阶段界面)和下落士兵的游戏进行场景2。场景1将在Game视窗中向玩家展示兵种的外观及其属性面板以及价格,在展示的兵种下方放置购买按钮,当按钮被点击时、玩家能够在场景2种使用该兵种的数量增加1,同时扣除兵种价格对应的金币。场景2为游戏场景,包

37、含以下模块:供士兵移动寻路导航的战斗地面(以下称导航地形)。安置树木、草丛、石头等周边环境游戏对象的边缘缓冲地面(以下称环境地形)布置外景环境的天空盒子。敌方建筑与城墙。放置于Game视图底部的玩家剩余可使用士兵/物品的UI面板。能够自由移动转向且能够切换2D/3D(正交/透视)视图模式的摄像机。5.1.2 场景制作场景1制作思路:使用GIMP裁剪购买界面UI图片至包含三个透明窗口,将摄像机模式调整为Othographic(以下称为正交)模式,将三种兵种放置于对应的透明窗口之后,设置三种兵种的默认动画为闲置,这样在玩家在此界面中就可以观察到兵种动态的活动画面。在兵种的购买按钮上链接上兵种购买的

38、函数,将兵种数量及对应种类存入一个数据在各个场景种互相连通的脚本中并在加载游戏场景时将兵种数量数据传递出去,具体实现逻辑见5.6.4其他界面。场景2制作:在测试各模块功能的时候均使用最基本的Plane平面来模拟导航地形,而在正式的合成各模块的场景中,使用U3D的地面建造系统Terrain来搭建地形,直接右键Hierarchy面板中的空白部分创建3D Object Terrain。在Inspector视窗中选择Terrain组件中的Terrain Settings按钮处设置地形的大小限制,设置Terrain Width及Terrain Length为160,设置此组件的Layer为Ground。

39、再创建环境地形,设置Terrain Width及Terrain Length为180,调整导航地形位置Transform组件的Position属性至环境地形的中央。通过Window下的Rendering打开Lighting Settings窗口,将准备好的天空盒子素材拖入Environment下的Skybox Material中,在场景中完成主要地面及外景的搭建,在Terrain地形外圈使用Paint Details组件与Paint Trees组件铺设草坪与植株模型贴图完成周边环境的搭建。图5-1 游戏主地面整体图5-2 地形边缘不可移动区域植被5.2 士兵脚本5.2.1 士兵基本属性基类士兵

40、基类脚本ArmyController:为所有士兵类型定义了受到伤害的函数,在不同类型兵种受到伤害时均调用此函数完成士兵生命值的衰减。图5-3 士兵基类脚本5.2.2 AStarPathfinding插件实现寻路实现原理与使用A*寻路算法是一种基于静态位置的高效搜索算法,使用A*寻路算法来搜索路径一般有两个条件:第一是场景有静态路网,即地图中的地理属性是设计好的静态属性;第二个是已知出发点和目标点,A*寻路算法的结果是通向目标点的最短路径,采用启发式搜索的方式一步步地判断出发点邻近方格到达目标点及出发点的成本,选择成本最低的方格作为移动方向,在此方格中再次判断临近方格到达目标点及出发点的成本选处

41、下一个最低成本的方格作为移动方向,直到到达目标点。贪婪且高效的搜寻方式使得A*寻路算法成为了游戏开发最常用的寻路算法,没有之一。通过阅读A*Pathfinding Project的官方文档及资源包中自带的示例场景中演示的各种环境下的寻路脚本,了解到该资源包实现A*寻路的方法,开发者可以在场景中挂载Astar Path组件(如图5-4所示)进而在导航地形上生成不同种类的导航网格,在Graphs下定义及修改网格的大小及位置,同时可以在Collision testing下的Obstacle Layer Mask中定义不可以作为移动区域的障碍物层。在需要寻路的游戏物体上挂载Seeker组件及AI Pa

42、th组件(如图5-5所示),Seeker组件将计算出挂载物体的位置到传入IAstarAI接口的目标点的路径,AI Path组件则定义了寻路物体的基本属性:半径、高度、速度、转向速度等基本属性,并使挂载物体遵循Seeker组件计算的路径移动,本设计在这个基础上编写运动逻辑脚本构建各个兵种AI,实现不同攻击距离的兵种的差别寻路。图5-4 AtraPath组件下的网格类导航网格的生成与配置图5-5 寻路游戏对象上挂载的AI Path组件与Seeker组件配置5.2.3 肉盾战士肉盾战士在逻辑上除优先选择防御塔作为优先攻击目标寻路外其余部分与普通士兵基本相同,参考以下的战士逻辑,肉盾战士在本文中不做描

43、述。5.2.4 战士寻路函数如直接选择建筑物作为寻路目标点,所有以此建筑物为攻击目标的士兵都会朝建筑物中心坐标进行移动,士兵寻路过程中将出现互相阻挡的状况。且建筑物的模型中心偏移时,将出现目标点固定以至于士兵会饶到建筑后方的情况,为解决此问题,这里使用指向建筑物的射线检测与建筑物包围盒碰撞处获取碰撞信息将碰撞位置作为士兵的寻路目标点。图5-6 士兵寻路函数Seek5.2.5 战士攻击函数士兵的攻击逻辑分为三部分:第一部分为遍历所有建筑对象,通过存入列表并获取距离进行长度排列得出最近的建筑物作为攻击目标触发寻路函数;第二部分为士兵到达寻路目标点后检测建筑物的存活状态,满足攻击条件则播放攻击动画。

44、第三部分为士兵触发攻击动画后,在动画状态机控制脚本里检测攻击动画播放进度,到达挥刀落下处时触发伤害函数。图5-7 遍历建筑物选择攻击目标图5-8 检测是否满足攻击条件图5-9 动画途中触发伤害函数5.2.6 弓箭兵寻路函数弓箭兵区别于普通士兵的地方在于弓箭兵需要能够隔着城墙对建筑物进行攻击,从而需要不一样的寻路函数,通过发射检测城墙层碰撞的射线以及不检测城墙层碰撞的射线获取两个碰撞信息,在两个碰撞点距离大于弓箭兵攻击距离时候,将选择不检测城墙层的碰撞点为寻路目标点,反之判定能够在城墙外攻击到该建筑,选择检测城墙层的射线碰撞点为寻路目标点,由于此处使用的距离并非为建筑与城墙的垂直距离,因此只能大

45、致地判断,并不是绝对准确的结果。图5-10 建筑物在墙内墙外的判断逻辑5.2.7 弓箭兵攻击函数弓箭兵类在基础属性上额外增加了用于检测攻击对象的攻击范围包围盒Range(如图5-13所示),实现了攻击范围包围盒Range中开放的IArcherRange接口中的RangeColliderHander方法,实现在寻路过程中当有攻击对象进入Range包围盒时将改变弓箭兵的状态为攻击状态的功能,Range包围盒上的脚本ArcherRange:开放了IArcherRange接口提供RangeColliderHander方法,并在包围盒检测到物体进入时将碰撞信息传递出去(此处Range包围盒在物理碰撞上设

46、置了仅与建筑物层发生碰撞)并将自身的激活状态改为false,以避免同时碰撞两个物体的情况出现。,根据模型动画相对位置定义了弓箭的发射位置ShootPoint(如图5-11所示)。图5-11 ShootPoint位置图5-12 实现接口函数图5-13 Range攻击范围包围盒5.2.8 弓箭运动脚本弓箭游戏对象由ArcherAttackSMB中实例化后从ArcherController脚本中获取了攻击目标,弓箭发射脚本ArrowShoot将完成弓箭朝攻击目标移动、与攻击目标接触后触发建筑物伤害函数后或者目标丢失后并销毁自身的功能,因建筑物为静态游戏对象,所以弓箭使用MoveTowards()函数

47、移动。图5-14 弓箭发射脚本逻辑5.3 建筑物脚本5.3.1 普通建筑基类建筑物基类脚本定义了生命值、健康状态等变量和基本的触发伤害函数、获取声明状态函数、获取血量比例函数。在生命值小于0后摧毁建筑物游戏对象的同时使用AstarPath.active.UpdateGraphs()函数更新建筑物占地区域的导航网格信息使该位置变回空地。图5-15 建筑物被摧毁后更新导航地形5.3.2 防御塔类防御塔控制脚本将进入防御塔检测包围盒士兵游戏对象存入待攻击列表中,并将离开包围盒范围的游戏对象从待攻击列表里删除。定义了一个用于比较的巨大参数,遍历待攻击的列表,计算每个元素与防御塔的距离并比较获得距离最近的

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 期刊短文 > 信息管理

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁