毕业论文-基于安卓系统的自选数量的手机赛车游戏_第1页
毕业论文-基于安卓系统的自选数量的手机赛车游戏_第2页
毕业论文-基于安卓系统的自选数量的手机赛车游戏_第3页
毕业论文-基于安卓系统的自选数量的手机赛车游戏_第4页
毕业论文-基于安卓系统的自选数量的手机赛车游戏_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业论文(设计)论文(设计)题目:基于安卓系统的自选数量的手机赛车游戏姓名学号学院山东大学软件学院专业数字媒体技术年级指导教师2016年5月18日基于安卓系统的自选数量的手机赛车游戏摘要随着手机不断发展,手机游戏已经成为人们日常生活中的一部分中.手机赛车游戏是一种竞速类手机游戏,其操作简单、画面逼真、音效刺激等优点吸引了无数赛车迷。本课题设计开发一个基于安卓系统的自选数量的手机赛车游戏。在分析赛车游戏目前行业背景和需求的基础上,对赛车游戏进行规划设计并用功能模块图详细表示了实现的具体功能,特别添加了可自选数量的游戏功能。本论文在需求分析的基础上,设计游戏的具体架构。利用Unity3D等软件具体实现这些需求,添加音效和部分玩家可自行修改的功能以保障游戏的多样性和可玩性。本游戏最终在安卓模拟器上进行测试和维护并最终应用到手机上。游戏整体运行状况良好,游戏过程中没有出现卡顿、闪退的现象,游戏功能能正确实现,总体效果令人满意。关键词:赛车游戏、安卓、Unity3DABSTRACTWiththecontinuousdevelopmentofmobilephone,mobilephonegamehasbecomeapartofpeople’sdailylife.Mobileracinggameisaracingmobilegamecategory.Ithasattractednumerousracingfanssincesimpleoperation,vividimagesandstimulatingsound.ThistopicisbasedonthechoiceofthenumberofAndroidsystemmobileracinggame.Basedontheanalysisofthecurrentbackgroundandrequirementsoftheracinggameindustry,thispaperdesignstheracinggameandusesthefunctionblockdiagramtoshowthespecificfunction.Inordertodistinguishthedesignofotherstudents,itaddsafunctiontochoosethenumberofplayers.Onthebasisofthedemandanalysis,itdesignsthespecificstructureofthegame.ThispaperusesUnity3Dandothersoftwaretoachievetheserequirements,itaddssoundefftectandsomeotherfunctionswhichplayerscanmodifytoprotectthediversityandplayofthegame.ThisgameisfinallytestedandmaintainedontheAndroidsimulatorandeventuallyappliedtotheAndroidphone.Thistopicmainlyinspectsstudents’abilitytodiscoverthequestion,analysisthequestionandsolvethequestionandimprovesstudents’practicalability.Welldesignedracinggamecanbeputintothemarket.ProblemsencounteredinthesubjectcanbehelpfulforpeopletolearnUnity3D.Keywords:racinggame,Android,Unity3D第1章绪论1.1手机赛车游戏简介随着手机不断发展,手机早已经不是当初仅仅用来收发短信、拨打电话的通讯工具,越来越多的手机游戏出现在人们视野中,手机游戏也逐渐成为人们日常生活中休闲娱乐的一种方式。手机游戏的出现极大地促进了移动终端的娱乐服务的发展,这也同时带动了手机产业的快速发展。近年来,随着移动网络2G、3G、4G以及手机性能不断提升,特别是智能手机的出现,手机游戏的发展呈快速增长的趋势,目前手机游戏产业已经成为游戏产业不可缺少的组成部分。手机游戏特点是其他游戏类型难以比拟的:庞大的用户人数——据统计全球使用手机的用户已经超过10亿人,并且这个数字每年都在不断增加,如此庞大的潜在手机游戏用户正是手机游戏不断发展的动力;手机的便携性和移动性——相比于电脑、游戏机等游戏设备,手机方便携带移动,这位人们消磨时间提供了很好的机会;支持网络——随着不断发展,手机游戏支持网络连接,越来越多的手机游戏支持联网对战,人们可以和好友进行游戏对决,这也促进了手机游戏的发展。自从汽车出现,人们就想到利用汽车进行比赛,赛车也就在这种情况下应运而生。不同于普通汽车,赛车更快、动力更强、赛车相互碰撞,这些都极大地刺激了人们的视觉体验。从赛车运动出现以来,赛车运动就一直吸引了无数人的视线。甚至还有许多赛车题材的电影:《速度与激情》系列、《的士速递》系列、《非常人贩》系列等。自从手机游戏的出现,游戏开发商就试图开发手机赛车游戏,让玩家可以在手机上体验真实赛车运动的快感。早期的赛车游戏在现在看来是非常幼稚的,游戏开发商受技术限制不能设计出逼真的画面,游戏更像是一些像素堆积起来的图形,同时赛车的碰撞、漂移特效受技术的限制也不能完美的表现出来,当然这带来的是玩家的游戏体验不尽如人意,后来,手机不断手机换代,手机处理能力不断增强、内存不断增大,特别是智能手机的出现,手机逐渐演变成掌上迷你电脑,这也为复杂真实的手机赛车游戏提供了发展的契机。此时,手机赛车游戏画面逼真,音效带感,赛车的漂移、碰撞特效真实,玩家能确实体验到飙车的快感。由于手机赛车游戏操作简单、画面逼真、音效独特、每局游戏耗时少,玩家不需要太多的操作和时间就能体验真实飙车的快感,因此手机赛车游戏吸引了无数赛车迷,如今手机赛车游戏已成为手机游戏行业一个重要组成部分。1.2国内外研究背景赛车游戏主要是在比赛环境下进行的,目前赛车游戏在游戏产业占有很大比重享有盛誉,爱好竞速的赛车迷都对赛车游戏着迷,他们以体验速度为乐趣,这类游戏的目的只有一个——更快。赛车游戏的操作极其简单,玩家只需要控制赛车前后左右移动、漂移、加速即可,技术性方面不是特别强,每局游戏时间也较短一般只有几分钟。由于赛车游戏操作简单,再加上逼真的画面、独特的音效,一直备受玩家们的追捧。最早的赛车游戏可以追溯到1984年,Konami开发了一款模拟赛车游戏——《公路战士》,这是最早的赛车游戏之一。玩家通过左右移动躲过赛道上的障碍物并且要在规定时间内到达终点。当时的游戏画面粗糙、音效一般并且都是单机游戏并不提供玩家联网对战的功能。随着手机技术的发展以及开发商技术的提高,赛车模型越来越逼真,游戏场景越来越逼真,游戏音效也稳步提高,游戏中的漂移特效也为游戏增色不少。说到赛车游戏,就不得不提两款赛车游戏巨头:《极品飞车》、《狂野飙车》。《极品飞车》是由美国艺电游戏公司出品研发的一款赛车游戏,第一款发行于1994年,这是该系列游戏的处女座,从1994年到2012年一共出品了13代17个作品。该款游戏试图在快速赛车游戏和逼真场景之间找到平衡点。《极品赛车》的出现彻底改变了过去粗糙的赛车游戏的格局,其他赛车游戏开发商为了与其抗衡,便不断提高游戏品质增加游戏体验,也正是在这一时期,赛车游戏有了长足的进步,毫不夸张的说,《极品飞车》是赛车游戏史上的一座里程碑。《极品飞车》起初实在电脑端运行,后来随着该游戏不断发展壮大,开发商把它移植到各种游戏平台,现在PS3、X360、GBA、PSP、3DS、手机各个游戏终端都能见到《极品飞车》,其火热程度可见一斑。图1-1是《极品飞车》游戏画面。图1-1极品飞车《狂野飙车》Gameloft开发的一款赛车游戏,于2004年发布第一代作品《狂野飙车GT》。作为手机赛车游戏的后起之秀,狂野飙车极大地吸收了其他优秀赛车游戏的特点并加以融合并添加自己独特的元素。狂野飙车在游戏中添加了部分夸张的功能很好地增加了游戏的乐趣。2013年8月,《狂野飙车》发布了最新的版本狂野飙车8,该款游戏加入了数百辆顶级赛车以及数十条充满异国风情的赛道,这些都为游戏增色不少。玩家可以完成基础赛道累计金币购买高级赛车解锁更高难度的赛道,同时游戏每周还有杯赛供玩家们相互切磋。游戏有竞速、漂移、碰撞、淘汰、对决、传染等不同比赛模式供玩家们选择。游戏中玩家可控制赛车进行加速、漂移、撞击、飞跃、水平螺旋、桶滚等操作。丰富的赛车和地图多样的玩法让《狂野飙车》在赛车游戏行业站稳脚跟,如今已经和《极品飞车》成为赛车游戏界的两大龙头。图1-2是《狂野飙车》游戏画面。图1-2狂野飙车《极品飞车》和《狂野飙车》都追求逼真的画面、极致的音效,极大地刺激了玩家的感官,真实还原了飙车的刺激。但在追求真实的同时带来的却是游戏安装包过大以及手机系统配置要求过高等缺点,这也是不可避免的问题。复杂的场景设计、逼真的赛车、众多的游戏动画和特效必然导致游戏内容增多安装包变大同时对手机配置的要求也更高。这让许多手机配置较低的玩家望而却步。2013年国产赛车游戏《天天飞车》由国内巨头腾讯制作发行,定位于3D写实闪避类赛车手游。游戏牺牲掉了真实的画面感,压缩了包体大小,减少了配置要求,同时还加入了简单的互动元素,玩家可以与好友互比积分,而且其操作非常简单,只需要左右闪避,上下跳跃,弱化了赛车游戏操作的刺激体验。同时,弱联网的《天天飞车》缺乏真实的联网竞技互动,并且其操作形式更像是跑酷游戏的变形,而非寻求速度、激情的赛车游戏。图1-3是《天天飞车》游戏画面图1-3天天飞车1.3解决的问题基于安卓的手机赛车游戏是在安卓平台上运行的自选数量的赛车类游戏,该课题要求设计一款玩家控制赛车和电脑赛车进行竞赛比赛并且玩家能选择比赛人数的能在安卓平台上运行的手机游戏。在需求方面,根据市面上流行的赛车游戏分析用户需要的游戏功能,包括游戏设计时自带的功能和玩家可自行修改的功能。主要需要解决这些游戏性能问题:赛车前后左右的运动控制、赛车漂移、相机平滑跟随赛车移动、电脑赛车自动完成赛道、系统计时等,此外还要解决以下玩家使用问题:用户名记录、选择赛车赛道、选择游戏人数、退出游戏等玩家可以选择的功能。在设计方面,基于真实赛车的运动特性和物理原理,真实模拟现实中赛车的运动,必须满足玩家对赛车游戏的基本要求。可以给游戏添加适当的夸大功能,但太过科幻的功能是不可取的。游戏设计时赛车模型应当造型适当比例合适不能太过浮夸,赛车的运动特性要符合真实,赛车要具备前后左右运动以及漂移加速减速等操作,此外还要给赛车添加漂移时的轮印以及车尾气等特效。此外,还要设计计时系统,系统以此来判断游戏的胜负。在实现方面,根据之前分析的需求,具体实现设计内容,尽量保证符合现实不违反物理原理。重点解决赛车的运行问题、电脑赛车运行问题以及系统判定胜负的问题。通过查看相关视频、教程、资料逐步完成游戏的开发,最终对游戏进行性能测试修改相关数据。1.4论文研究内容本课题主要实现基于安卓系统的自选数量的手机赛车游戏,具体需要实现以下操作:前进、后退、转向、漂移(减速)、加速。此外还必须设计电脑赛车来和玩家赛车进行竞赛,并且系统还能判断赛车之间、赛车和障碍物之间的碰撞、胜负判定等。另外,还要给赛车添加漂移时的轮印特效以及车尾气特效,给游戏添加适当的背景音乐。这些都是本课题需要着重解决的问题。本课题利用unity3D游戏引擎进行游戏的初期开发,最终在安卓游戏平台上进行测试、运行、修改参数等。本文首先介绍了手机赛车游戏以及目前国内外赛车游戏行业的情况,详细分析了该课题的需求以及该游戏可提供的游戏功能,然后介绍了完成该课题的游戏开发平台Unity3D和Android,重点分析了设计游戏过程中使用的几个关键技术,随后阐述了游戏的设计方法和设计原则以及游戏的总体框架和概念模型。在概念模型的基础上,逐步实现之前各个功能,其中重点实现赛车的运行、碰撞、计时功能。设计完成的游戏导入到AndroidSDK中,在安卓模拟器上模拟游戏在安卓系统中的运行情况,不断调试修改游戏参数直至达到满意效果。1.5论文结构本文将按照以下结构安排:编写绪论,对本课题研究内容进行阐述。简单介绍了手机赛车游戏,国内外目前在手机赛车游戏方面的研究状况,实现本课题需要解决的问题,以及对实现本课题的工具进行简介。对本课题进行需求分析。主要描述了手机赛车游戏的背景、根据目前市场上流行的手机赛车游戏具体分析玩家对手机赛车游戏的基本要求,并分析一些可添加的可选功能。具体进行系统设计,规划如何实现第二章提出的需求。对具体的游戏系统进行详细的规划设计。本章介绍了开发游戏使用的平台、游戏中的关键技术、设计方法和原则以及游戏的概念模型。第四章讲述根据第二、三章的要求实现的系统。按照第三章的对手机赛车游戏系统的详细设计利用unity3D具体实现手机赛车游戏。第五章对已完成的手机赛车游戏在安卓模拟器上进行性能测试,对不满足设计要求的方面进行改进。最后是对此次课题研究的总结。

第2章需求分析2.1手机赛车游戏概述为了设计一款合格、耐玩的手机游戏,耐玩性是头等问题,为此必须注意许多方面的问题。手机赛车游戏为了能吸引更多人,画面不能太过粗糙,同时必须添加一些富有激情的音乐和富有冲击力的画面,充分刺激玩家的视觉、听觉体验。手机赛车游戏必须符合日常的物理规律,太过逆天的功能,如“飞天”、“潜水”只会适得其反影响玩家的体验。该款手机赛车游戏和市场上的赛车游戏一样,操作不能太过复杂,简单的操作和刺激的感官体验才是该类型游戏所追求的。游戏的关卡难度一定要循序渐进,让新手可以多练习低难度的关卡提高自身水平,然后再去挑战更高难度的关卡。玩家也可以依据自身水平选择合适的难度进行游戏。每局游戏游戏时间不能太长,手游不同于端游,过长的游戏时间会让玩家产生厌倦情绪。必要时,还可以设计保存当局游戏的功能。为了保持耐玩性,可以设计多辆赛车和多条跑道。玩家可以自由选择使用的赛车和进行比赛的赛道以及游戏人数。

2.2手机赛车游戏需要解决的问题如何设计一辆逼真的赛车是首当其冲的问题,越是真实的赛车越能吸引玩家的视线。逼真的赛车能让玩家有身临其境的感觉,同时玩家也能在虚拟游戏中体验驾驶高级赛车的感觉。因此,这是本课题设计方面的重点。赛车跑道的设计也是不可忽视的问题。设计良好、逼真的跑道能满足玩家的游戏体验。设计完赛车后便要对赛车设计按键控制,如何实现用按键控制赛车,达到转向、漂移(减速)、加速的目的是需要解决的,同时还要判断赛车碰撞。此外,赛车运动时的尾气以及漂移车痕能增加玩家的游戏体验。为了达到比赛的目的,需要设计一些电脑赛车和玩家赛车进行竞速,如何设计不需玩家控制可自动跑完赛道的赛车也是需要解决的问题。为了判定游戏的胜负,需要设计计时系统,用来正确计算赛车从起点开始到通过终点的时间,以此为基准来判断各辆赛车的名次。游戏系统的设计也有不小难度,具体需要解决一下几个主要问题:赛车之间以及赛车和障碍物之间的碰撞判定、赛车移动的正反向判定、最终的胜负判定等。最后是游戏界面的设计,需要设计合理美观的游戏界面,指引玩家进行操作2.3手机赛车游戏可实现的功能根据上一节提出的问题,该手机赛车游戏可实现以下这些功能:输入用户名功能:用户输入用户名,系统自动记录,当用户再次打开游戏是会显示上次输入的用户名,节省用户时间。赛车运动功能:为了完成赛道,设计的赛车必须能进行前进、后退、左右转向等基本操作。相机跟随功能:设计相机能平滑跟随在赛车后移动,保证玩家视角能正常完成比赛。选择功能:玩家能根据自身水平选择使用的赛车和比赛的跑道,以及进行比赛的赛车数量。碰撞功能:系统能判断赛车之间以及赛车与障碍物、赛道边缘之间的碰撞以此来模拟真实赛车运动。特效功能:给赛车添加运动尾气特效和漂移痕迹特效,是游戏更加真实,增加玩家的游戏体验。电脑赛车自动运行功能:给电脑赛车添加脚本使其能根据赛道环境自动完成赛道,从而达到和玩家比赛的目的。计时功能:为了能区分名次需要系统能计算赛车从开始到结束用时,根据用时来区分名次。帮助功能:玩家如对游戏有疑问可以去“帮助”选项中查找相关内容。以上功能可表示为图2-1所示。游戏游戏帮助功能计时功能电脑赛车功能特效功能用户名功能赛车运动功能相机跟随功能选择功能碰撞功能帮助功能计时功能电脑赛车功能特效功能用户名功能赛车运动功能相机跟随功能选择功能碰撞功能图2-1游戏系统功能在该赛车游戏中玩家可以使用的功能有:输入用户名功能、开始游戏功能、退出游戏功能、选择赛车赛道功能、对赛车进行前后左右控制功能、赛车漂移功能、返回功能、帮助功能。这些功能可表示为图2-2所示。玩家玩家帮助功能返回功能漂移功能赛车控制功能选择功能退出游戏功能开始游戏功能用户名功能帮助功能返回功能漂移功能赛车控制功能选择功能退出游戏功能开始游戏功能用户名功能图2-2玩家可使用功能2.4本章小结本章主要介绍了有关手机赛车游戏的描述,其次给出了本课题需要解决的具体设计问题以及游戏中系统带有的功能和玩家可以使用的功能,为以后开发游戏打下了坚实的基础。

第3章系统设计3.1开发平台基于安卓系统的自选数量的手机赛车游戏开发平台是Unity3D4.6,模拟运行测试平台是AndroidSDK。3.1.1Unity3DUnity3D是由UnityTechnologies公司开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。Unity允许用户开发2D、3D的游戏。Unity类似于Director,Blendergameengine,Virtools或TorqueGameBuilder等利用交互的图型化开发环境为首要方式的软件,其编辑器运行在Windows或MacOSX下,可发布游戏至Windows、Mac、Wii、iPhone和Android平台。也可以利用Unitywebplayer插件发布网页游戏,支持Mac和Windows系统的网页浏览。Unity3D是目前使用最广泛的游戏开发引擎,据统计,大部分的游戏开发者都是用Unity3D引擎开发制作。使用Unity3D进行游戏开发的优势是开发周期短,因为Unity3D简单容易上手、功能强大,有编程基础的只需要一两个月就能入门。Unity3D另一大优势是跨平台性,用Unity3D开发的游戏可以发布至Window、Mac、Android等平台上并且能完美运行,这也是众多游戏开发商选择Unity3D作为游戏开发引擎的原因。Unity3D主要支持C#、JavaScript、Boo等语言。本课题选择C#语言进行游戏开发。C#特点是严谨、安全、容易调试、容易读、原生面向对象也很强大,而且非常容易学。编写的代码越多,C#的优势就越明显。

3.1.2AndroidAndroid是Google公司开发的基于Linux平台的、开源的、主要支持手机的操作系统。2008年9月Google公司发布了第一款安卓系统Android1.1,由于当时技术不成熟,发布的系统只能支持基本操作,目前最先进的版本是Android5.1,新系统更加稳定,同时支持多张SIM卡,也加强了设备保护。相比于其他手机系统,Android有其独到的优势:开放性——Android平台允许任何移动产商加入到安卓联盟中,强大的开放性有利于前期增加人气吸引优秀开发商的加入,这也是为什么Android平台能在短几年中成为手机平台巨头,此外,显著的开发性增加了开发商之间的竞争,手机用户能体验到丰富的软件资源。不受运营商的限制——过去,手机的使用往往受到运营商的限制,如加入网络、使用某些功能等都很大程度上受到运营商的限制,自从iPhone、Android这些手机平台出现,用户使用手机已摆脱了运营商的限制,连接网络使用功能早已不是运营商能限制的。开发商不受限制——Android平台对开发商没用限制,它提供了一个开放、自由、灵活的环境,没有了条条框框的限制各种奇思妙想都在应用中出现,丰富的软件可供手机用户体验,然而这同时也让暴力、色情、血腥等不良因素涌入到应用软件中。开源性——Android平台许多系统的源代码都是对外开放的,用户可以自由查看使用这些代码,新手可以查阅代码学习,专业人士可在源代码的基础上进行二次开发。硬件选择丰富——由于Android的开放性,开发商会推出各种各样、功能独特的软件,但这却完全不会影响数据同步甚至软件的兼容性,软件的转移是很方便没多大风险的。AndroidSDK即AndroidSoftwareDevelopmentKit,安卓软件开发工具,它是被开发商用来在Windows、Linux、Mac平台上开发特定的软件包、软件框架、硬件平台、操作系统的安卓软件开发工具。该工具集不仅包括了Android模拟器和用于Eclipse的Android开发工具插件(ADT),而且包括了各种用于测试、打包和在模拟器上安装应用的工具。AndroidSDK是以Java语言为主,因此在安装AndroidSDK之前需要安装JDK。安装完成AndroidSDK之后有SDKManager和AVDManager2个应用程序可使用。SDKManager主要是用来下载用户需要的Android版本,AVDManager则是用来创建Android模拟器,让用户在电脑上模拟软件在安卓手机上的使用和运行效果。3.2关键技术3.2.1WheelColliderWheelollider(车轮碰撞器)是Unity3D自带的功能强大的组件。它是一个特殊的地面车轮碰撞器。它是一个具有自动进行碰撞检测功能、车轮物理引擎和轮胎摩擦模型。在设计赛车运动时,可以给WheelCollider一个力就能实现它进行物理滚动的效果,同时,可以用代码得到WheelCollider的转动速度,这为计算显示赛车速度打下了基础。通过给赛车模型的四个车轮添加WheelCollider组件可以驱动赛车的运动。图3-1是WheelCollider插件的属性图。图3-1WheelCollider属性设计游戏时主要用到的是前三个属性:Mass、Radius、SuspensionDistance。Mass属性是车轮质量选项,这里采用默认选项1kg。Radius属性是指WheelCollider的半径,这里必须修改参数使得WheelCollider的半径和赛车模型的半径一致,这样才能根据WheelCollider的速度得到赛车的真实速度。SuspensionDistance是悬挂距离指的是车轮悬挂伸缩的最大距离,通过调试参数,使赛车运行通过凹凸路面时车辆有上下调整的缓冲效果,否则车辆会显得僵硬不真实。通过修改以上三个属性就能实现赛车的运动、悬挂功能,这是本课题设计中最重要的技术。3.2.2CarWayPoint顾名思义,CarWayPoint插件是专门用来做赛车游戏的插件。这款插件功能强大,可以实现如圈数判断、复位操作、反向判断、计算赛道长度等功能。本课题使用该款插件主要是用来解决电脑赛车的自动运行问题。CarWayPoint插件优势明显:设置路标点、可扩展性强、Xml储存路标点数据、可视化编辑、多平台支持、自动对齐路面、支持单圈和多圈编辑、支持路径读取和数据读取两种方式等。使用该款插件可以节省开发时间减少开发工作量,同时也为实现电脑赛车自动运行打下基础。电脑不是玩家不能根据赛道情况临时决定如何控制赛车的运动,必须给电脑提供路标来指引赛车的运动。通过在赛道上设置相互连接的路标,赛车运动到一个路标用函数计算出下一个应该到达的路标,如此赛车就能实现自动运行的功能。3.2.3NGUINGUI,即Next-GenUIkit,是用C#语言编写的Unity3D插件,它提供了强大的UI系统,是游戏开发过程中用来实现界面设计的重要工具。程序员可以很容易地扩充和调节现有功能,这为游戏开发带来了方便,意味着用户可以用更少的时间更少的代码来实现更多的功能。NGUI使用时不需要编辑复杂的代码,它自带的许多按钮已经能实现普通游戏开发的所有要求,通过对按钮设置事件就能控制界面操作。NGUI提供了许多辅助脚本如修改按钮颜色、大小、拖拽物体、添加图片和音乐等,这都为设计游戏界面节省了大量时间。为了游戏的稳定,本课题采用之前的版本NGUI3.6.8。NGUI功能强大,开发过程中,只使用了PrefabToolbar工具,如图3-2所示。图3-2PrefabToolbar设计过程中只需要选用Background和Button按钮即可设计出美观简洁的游戏界面。通过在Background属性中添加text文本和texture纹理即可实现游戏界面上的文字和图片。3.3设计方法和原则由于本课题是设计赛车游戏,因此游戏必须符合常识,科幻的赛车操作如飞天、潜水等只会让玩家感到空虚,无法真正体验到赛车漂移的快感。所以,本课题设计的首要原则就是符合现实。游戏里所有的赛车运动都必须在现实中有迹可循,只需给赛车添加前进、后退、转向、漂移、加速、减速等基本操作即可。为了设计可玩性高的赛车游戏,游戏画面、赛车模型、赛道模型不能太过粗糙,赛车的模型必须美观合理符合人们的现实认知,不能是那种由方块堆积出来的玩具车。此外,赛道可以增加不同的路况如急弯、悬崖、跳板、隧道等增加游戏的趣味。游戏画面应该做到尽量美观简洁,太粗糙的画面或者太凌乱的画面都会影响玩家的游戏体验。适当的特效可以增加游戏的趣味。《极品飞车》和《狂野飙车》都为赛车加速、漂移添加了酷炫的特效,这为它们的成功提供了不少帮助。本课题给赛车添加了漂移时的车痕特效以及赛车运动时的尾气特效,以此来满足玩家的游戏体验。每局游戏时间应当合理控制,一般在几分钟为最佳。游戏仅仅是供玩家消遣娱乐的手段,太长的游戏时间只会适得其反,反而会让玩家产生厌倦情绪。因此,在游戏设计阶段必须充分考虑该因素,对赛车的速度,赛道的长度进行控制,从而控制游戏时间。电脑赛车以之前介绍的CarWayPoint插件来进行控制,实现控制时必须参照玩家赛车的游戏参数,必须能实现电脑赛车和玩家的对战,不能出现一边倒的局面,玩家赛车的速度和电脑赛车的速度要保持同一数量级的水平,必要时电脑赛车性能可以比玩家赛车优越,这可以激发玩家通过操作技巧来击败电脑赛车。如之前所述,《极品飞车》和《狂野飙车》在追求极致画面和酷炫特效的同时,不可避免的带来了游戏安装包过大和手机系统配置要求过高的缺点。本课题在开发时受电脑配置限制以及为了确保游戏包容量不大,牺牲了部分画质以及特效,以此保证游戏的流畅运行。以上这些原则在游戏设计过程中都必须充分考虑,只有符合这些设计原则的设计出来的游戏才是用户友好、游戏体验良好的游戏。3.4游戏概念模型游戏的概念模型如图3-3所示图3-3游戏概念模型上面的是该款手机赛车游戏的概念模型图。首先,当玩家打开游戏时系统会加载游戏资源,随后出现主菜单界面。主菜单界面对面有3个选项:用户名输入按钮、游戏简介按钮以及退出游戏按钮。点击游戏简介按钮进入游戏简介界面,这里主要简单介绍游戏的内容、操作以及问题反馈的联系方式等。点击退出游戏按钮会退出游戏。点击用户名输入按钮会进行用户名输入界面,该界面有一个文本框用于让玩家输入用户名,系统会自动记录上一次输入的用户名,输入完成点击确定按钮会进入选择界面。选择界面有多个选项,其中之一是用来进行游戏设置,该设置可以修改游戏过程中的音量。选择界面其余按钮是用来区分不同赛车以及不同赛道的,选择其中一个按钮就会进入对应的赛车和赛道进行游戏。当游戏完成后会进入一个完成界面,可以显示玩家的名次、时间等内容。完成界面有一个返回按钮,点击可以返回到选择界面重新选择继续游戏。3.5游戏总体结构游戏的总体结构如图3-4所示。数据模块特效模块声音模块画面模块系统数据模块特效模块声音模块画面模块系统控制调度模块逻辑运算模块控制调度模块逻辑运算模块图3-4游戏总体结构各部分功能模块介绍如下:(1)画面模块该模块主要负责绘制游戏的可视化界面,包括:菜单界面、简介界面、用户名界面、选择界面、设置界面、游戏界面、完成界面等。这些界面都是用Unity3D的NGUI插件绘制完成,通过搜集合适图片和添加button按钮即可实现游戏可视化界面的绘制。(2)声音模块该模块主要负责游戏进行过程中的声音播放功能,包括:游戏背景音乐、赛车加速引擎声音、赛车漂移声音等。通过给赛车添加AudioSource插件即可给赛车添加以上音乐。(3)特效模块该模块主要负责赛车加速的尾气烟雾特效和赛车漂移的轮印特效。在设计赛车时给赛车添加尾气烟雾效果以及轮印效果并通过代码控制这些效果的开启和关闭即可实现赛车运动产生尾气、赛车漂移出现轮印等效果。(4)数据模块该模块主要负责记录游戏过程中产生的数据,包括:用户名、游戏完成时间、游戏最佳时间。当玩家输入一个用户名时,系统会自动记录该数据,玩家下次进入游戏时系统会自动显示该用户名节省玩家输入用户名的时间。当玩家完成赛道时,系统会记录玩家完成赛道的时间并和最佳时间进行比较,较小者会被重新记录为游戏最佳时间,而另一个数据会被删除。(5)逻辑运算模块该模块主要负责控制游戏的进行,具体功能:利用手机的重力感应正确的对赛车进行转向操作、根据玩家对屏幕的触碰决定游戏界面的跳转、保证电脑赛车能根据赛道情况正确的完成赛道等。(6)控制调度模块该模块是游戏的核心模块,它将其他几个模块连接起来成为一个整体,起到控制调度的作用。该模块主要负责协调各模块的正确运行,为游戏正确运行提供了保障。3.6本章小结本章主要介绍了有关游戏的开发平台Unity3D和AndroidSDK的描述,其次介绍了游戏设计过程中使用的关键技术、设计方法和手机原则,然后描述了游戏的概念模型以及游戏总体结构,为实际设计游戏提供了理论基础。

第4章系统实现4.1赛车属性实现本课题使用的赛车都是从网上找到的赛车模型,通过对模型的修改和优化来满足游戏的需求。图4-1是修改使用的赛车模型。图4-1赛车模型4.1.1赛车碰撞优化该赛车模型过于精细,直接使用该模型进行碰撞检测,会太过复杂。因此,使用Collider-Bottom和Collider—Top2个模型来近似代表赛车模型,用这个简化模型来代替赛车模型进行碰撞检测会实现系统的优化。图4-2是Collider-Bottom和Collider—Top模型。图4-2简化赛车模型为了实现碰撞检测需要给Collider-Bottom和Collider-Top两个个部分添加MeshCollider组件并勾选Convex以及SmoothSphereCollider选项,这样,用于碰撞检测的赛车模型得到了简化,系统判定更加简单。4.1.2赛车渲染优化阴影是影响渲染效果以及渲染时间的一个重要因素,把细节部分的阴影渲染关闭能优化系统。赛车的内部、赛车的玻璃以及车轮内部的刹车板不需要产生阴影,所以把这些赛车部件的MeshRender组件中的CastShadows(导致阴影)选项关闭。同时,赛车的内部、赛车的玻璃不需要接受阴影,甚至车轮这种细节部分的阴影也可以选择不接收,因此把这些部件的MeshRender组件中的ReceiveShadows(接收阴影)选项关闭。图4-3是MeshRender组件。图4-3MeshRender4.1.3车底阴影实现车底部由于车的原因会显得比较暗,所以需要给它添加阴影。在Car物体下创建一个名为shadow的子物体。给shadow添加一个Projector组件,在Material属性中选择已经制作好的车底部阴影贴图,并且设置IgnoreLayers是除了路面的所有层,这样就能保证阴影只会投影在路面上。图4-4是Projector组件。图4-4Projector为了控制shadow的位置和旋转,创建一个CarShadow脚本,具体实现代码如下:usingUnityEngine;usingSystem.Collections;publicclassCarShadow:MonoBehaviour{ voidStart(){ } voidUpdate(){ this.transform.position=transform.parent.position+Vector3.up*5; this.transform.localEulerAngles=newVector3(90,0,0); }}该代码设置了阴影的位置始终与车的位置保持一致,只是在Y轴上相差5个单位,无论车如何旋转,投影器始终在X轴上旋转90度,即始终保证向地面投影。通过这段代码就实现了车阴影的实现。4.1.4车轮悬挂效果车轮和车体之间的位置不是固定不变的,它们之间有弹簧连接,随着路况的起伏,弹簧会压缩,车轮和车体之间的距离也在不断改变。因此,需要保证车轮和WheelCollider的伸缩情况保持一致,具体代码如下: RaycastHithit; if(Physics.Raycast(collider.transform.position,Vector3.down,outhit,collider.radius+collider.suspensionDistance)){ transform.position=hit.point+Vector3.up*collider.radius; }else{ transform.position=collider.transform.position-collider.transform.up*collider.suspensionDistance; }同时修改WheelCollider组件中的SuspensionSpring中的Spring参数暂时为5000,后期调试运行时在进行修改。4.2赛车运动实现赛车的运动必须由WheelCollider来控制实现,创建四个和四个车轮位置匹配的WheelCollider来代替车轮进行赛车的控制,并且WheelCollider的Radius半径必须和车轮半径一致,这样才能根据WheelCollider转速计算得到赛车的速度。由于赛车是个真实物体,因此需要给它赋予一个重量,在Car下添加一个RigidBody组件,设置Mass(质量)为1500kg,图4-5是RigidBody组件。图4-5RigidBody这里先采用在电脑端按键控制,最后再修改为手机端的重力感应控制,在Car物体下添加一个Driving脚本,用来控制赛车的运动,具体包括了赛车的前后运动、转向、漂移、漂移时的烟雾特效、车运动的尾气、音乐的播放等,这是赛车运动的核心代码。voidSkid(){//漂移 if(currentSpeed>40&&Mathf.Abs(flWheelCollider.steerAngle)>5){ boolisGround=false; WheelHithit; if(flWheelCollider.GetGroundHit(outhit)){ isGround=true; leftEmitter.emit=true; if(lastFLSkidPos.x!=0&&lastFLSkidPos.y!=0&&lastFLSkidPos.z!=0){ Vector3pos=hit.point; pos.y+=0.05f; Quaternionrotation=Quaternion.LookRotation(hit.point-lastFLSkidPos); GameObject.Instantiate(skidMark,pos,rotation); } lastFLSkidPos=hit.point; }else{ lastFLSkidPos=Vector3.zero; leftEmitter.emit=false; } if(frWheelCollider.GetGroundHit(outhit)){ isGround=true; rightEmitter.emit=true; if(lastFRSkidPos.x!=0&&lastFRSkidPos.y!=0&&lastFRSkidPos.z!=0){ Vector3pos=hit.point; pos.y+=0.05f; Quaternionrotation=Quaternion.LookRotation(hit.point-lastFRSkidPos); GameObject.Instantiate(skidMark,pos,rotation); } lastFRSkidPos=hit.point; }else{ lastFRSkidPos=Vector3.zero; rightEmitter.emit=false; } if(skidAudio.isPlaying==false&&isGround==true){ skidAudio.Play(); } elseif(skidAudio.isPlaying&&isGround==false){ skidAudio.Stop(); } }else{ if(skidAudio.isPlaying){ skidAudio.Stop(); } leftEmitter.emit=false; rightEmitter.emit=false; } }}4.2.1得到赛车速度Update函数定义了赛车的运动,currentSpeed用来表示赛车的当前速度,它通过下面公式得出:currentSpeed=flWheelCollider.rpm*(flWheelCollider.radius*2*Mathf.PI)*60/1000;flWheelCollider.rpm指WheelCollider每分钟的转速用它乘其周长得到每分钟转动的长度,再讲该数值换算为千米每小时就得到赛车的速度。4.2.2刹车定义刹车的定义是当currentSpeed为正即赛车正在向前运动而此时给赛车一个向后运动的力或者当currentSpeed为负即赛车正在向后运动而此时给赛车一个向前运动的力,当这两种情况发生时就判断赛车进行刹车操作。brakeTorque参数是WheelCollider中用来表示刹车的参数,当刹车判断成立后,把预先定义好的刹车数值赋值给赛车。这里预先定义了刹车数值为100,后期测试时会对该数值进行测试修改。4.2.3运动定义motorTorque是用来表示赛车运动的数值,这里预先定义了运动数值为40,赛车运动时规定了赛车最大速度为140,最小速度为-30即倒车速度,当currentSpeed介于这两个数值时,能把该数值赋值给赛车进行运动,否则规定赛车自身的motorTorque参数为0,这样就限制了赛车速度的范围,当然后期测试时可以对速度修改。4.2.4旋转定义steerAngel用来表示赛车的转向,预先定义了数值为10,数值越大赛车的转动幅度就越大,当按键输入左右时,赛车就是根据输入的长短来对赛车转向幅度进行控制。4.2.5重心设置赛车的重心需要设置在赛车底部,如果不设置重心,赛车旋转时很容易造成侧翻,通过创建一个centerOfMass的对象,并把它的位置信息赋值给赛车重心即可。

4.2.6车轮模型转动的实现实现该方法需要使用两个函数RotateWheel和SteerWheel,其中RotateWheel实现四个车轮的前后转动,SteerWheel实现前面两个车轮转向时的左右转动。RotateWheel函数根据WheelCollider每分钟的转速rpm计算出模型每秒钟应该转动的角度,然后对四个模型进行Rotate操作就能实现车轮转动。SteerWheel函数首先得到当前WheelCollider的转向,然后将该转向赋值给WheelModel进行Y轴方向上的转动就能实现趁乱转向。由于同时对WheelModel进行RotateWheel和SteerWheel操作,渲染时车轮会出现模糊显示不完全,因此,RotateWheel的转动对向修改为刹车板DiscBrake,这样游戏运行时车轮显示就不会出现问题。具体实现代码如下: voidRotateWheel(){//控制车轮前后转动 flDiscBrake.Rotate(flWheelCollider.rpm*6*Time.deltaTime*Vector3.right);frDiscBrake.Rotate(frWheelCollider.rpm*6*Time.deltaTime*Vector3.right);rlWheelModel.Rotate(rlWheelCollider.rpm*6*Time.deltaTime*Vector3.right);rrWheelModel.Rotate(rrWheelCollider.rpm*6*Time.deltaTime*Vector3.right); } voidSteerWheel(){//控制车轮左右转向 Vector3localEulerAngles=flWheelModel.localEulerAngles; localEulerAngles.y=flWheelCollider.steerAngle; flWheelModel.localEulerAngles=localEulerAngles; frWheelModel.localEulerAngles=localEulerAngles; }4.3摄像机实现4.3.1摄像机平滑设置赛车运动时需要有摄像机平滑地跟随在赛车后面,确保玩家游戏时能得到足够多的赛道情况,具体是代码如下: Vector3targetForward=target.forward; targetForward.y=0; Vector3currentForward=transform.forward; currentForward.y=0; Vector3forward=Vector3.Lerp(currentForward.normalized,targetForward.normalized,smoothSpeed*Time.deltaTime); Vector3targetPos=target.position+Vector3.up*height-forward*distance; this.transform.position=targetPos; transform.LookAt(target);摄像机的位置是固定的,它在X轴方向上和赛车保持一致,Y轴方向上在赛车后面7个单位,Z轴方向上在赛车上面3.5个单位,唯一需要控制的就是摄像机的旋转。该代码首先得到赛车的位置信息然后将该信息Y轴上减少7个单位,Z轴上增加3.5个单位得到摄像机的位置,这就保证了摄像机始终和赛车保持相对的位置。但采用这种方式是不够的,摄像机的运动会显得僵硬,当赛车转向时,摄像机应该能看到赛车的侧面,但目前只能看到赛车的尾部。所以,要对摄像机进行平滑跟随。smoothSpeed参数用来表示摄像机平滑跟随的速度,这里设置为1,数值越大则摄像机跟随越快,后期测试时可以进行调试。具体实现方法是使用差值运算算法,它得到摄像机当前的旋转角度、赛车当前的旋转角度以及差值时间,规定在差值时间内摄像机从当前角度旋转到赛车的角度,这样就实现了摄像机的平滑跟随。4.3.2摄像机切换玩家可以通过“V”键来选择游戏视角,分别是第一人称视角和第三人称视角,第三人称视角是上面定义的摄像机视角,第一人称视角是玩家直接驾驶赛车的视角,切换代码如下: if(Input.GetKeyDown(KeyCode.V)){ if(isFirstView){ mainCamera.SetActive(true); firstViewCamera.SetActive(false); isFirstView=false; }else{ mainCamera.SetActive(false); firstViewCamera.SetActive(true); isFirstView=true; } }

4.4游戏音效实现4.4.1赛车引擎声音引擎声音的控制在Driving代码中的EngineSound函数中实现。引擎的声音播放速度应该随着速度的增大而增大,并且由于换挡,引擎的速度应该出现锯齿状上下波动。EngineSound函数创建了一个6元素的int数组,元素分别为0,30,60,90,120,140,代表了赛车速度,在任意两个相邻元素之间赛车引擎声音播放速度逐渐增大,在每个元素出引擎声音播放速度变为最小,这就实现了模拟赛车加速换挡时引擎声音的效果。具体实现代码如下:voidEngineSound(){ intindex=0; for(inti=0;i<speedArray.Length-2;i++){ if(currentSpeed>=speedArray[i]){ index=i; } } intminSpeed=speedArray[index]; intmaxSpeed=speedArray[index+1]; carEngineAudio.pitch=0.1f+(currentSpeed-minSpeed)/(maxSpeed-minSpeed)*0.8f; }

4.4.2赛车漂移声音漂移声音的控制在Driving代码中的Skid函数中实现。当赛车漂移判断成立时,如果漂移声音没有播放就把声音播放,当赛车漂移判断不成立时,如果漂移使用正在播放就把声音关闭。4.4.3赛车碰撞声音当赛车碰撞到赛道边缘时,就会发出碰撞声音,具体代码如下: voidOnCollisionEnter(Collisioncollision){ if(collision.collider.tag=="Wall"){ crashSound.Play(); } }4.5UI界面实现本部分主要包括显示赛车的速度、速度仪表盘、游戏开始倒计时、游戏总计时。最终实现如图4-6所示。左上角显示赛车的速度、中间是游戏开始时的倒计时,倒计时结束后隐藏,右上角用来记录游戏总时间。图4-6UI界面4.5.1赛车速度显示和速度仪表盘显示赛车速度显示和速度仪表盘的具体实现代码如下: currentSpeed=flWheelCollider.rpm*(flWheelCollider.radius*2*Mathf.PI)*60/1000; currentSpeed=Mathf.Round(currentSpeed); label.text=currentSpeed.ToString(); if(currentSpeed<=0){ currentSpeed=0; } floatnewZRotation=zRotation-currentSpeed*(270/140f); pointContainer.eulerAngles=newVector3(0,0,newZRotation); currentSpeed按照之前的方法得到,通过Mathf.Round方法四舍五入,再将数值转化为字符串赋值给文本即可在UI界面显示赛车的速度。当速度小于0时,显示赛车的速度为0。开始时把速度指针指向0,按照速度仪表盘上0-140之间的角度计算出对应的速度应该旋转的角度,最后指针旋转该角度就能实现速度仪表盘的显示。4.5.2游戏倒计时显示游戏倒计时是从5开始倒数,倒数过程中玩家无法控制赛车的运动,当倒计时结束后玩家才能开始游戏。首先设置数字5,每隔1s递减1,每个数字存在1s,数字0存在0.1s,这些数字都被转化为字符串类型在UI界面上显示,具体实现代码如下: IEnumeratorCount(){ timeCount.text=startCount.ToString(); while(startCount>0){ yieldreturnnewWaitForSeconds(1f); startCount--; timeCount.text=startCount.ToString(); } yieldreturnnewWaitForSeconds(0.1f);4.5.3游戏总时间显示游戏总时间显示是用来记录赛车从开始到结束一共使用的时间,其中还会显示历史记录,如果本次游戏时间比历史记录慢,那么上面显示本次游戏时间,下面显示历史记录,如果本次游戏时间比历史纪录快,那么历史纪录就会被更新为本次游戏时间。具体实现代码如下:floatnowTotalTime=timeCount.totalTime; floatoldTotalTime=999; if(PlayerPrefs.HasKey("bestTime")){ oldTotalTime=PlayerPrefs.GetFloat("bestTime"); } timeCount.label.text="本次时间:"+nowTotalTime+"s\n"+"个人记录:"+oldTotalTime+"s\n"; if(nowTotalTime<oldTotalTime){ oldTotalTime=nowTotalTime; } PlayerPrefs.SetFloat("bestTime",oldTotalTime);

4.5.4游戏界面设计实现制作游戏界面使用NGUI3.6.8插件,使用PrefabToolBar插件中的Background和Botton两个选项即可实现简单的界面开发。图4-7是游戏开始的界面。图4-7游戏开始界面Background主要用作设计界面背景,把网上找到的图片添加进去即可设计出背景。Botton按钮是用来出发点击事件的,当点击Button按钮时会根据代码跳转到相应的场景。具体流程是:打开“File—BuildSetting”把设计好的不同场景按顺序添加进去,右侧会标示出每个场景的层数,如图4-8所示。图4-8游戏场景分层随后就能使用按钮跳转到相应层,具体代码如下,其中n是想要跳转的层n。 publicvoidOnButtonSureClick(){ Application.LoadLevel(n); }

4.6游戏特效实现4.6.1车尾气实现直接采用已经做好的烟雾粒子系统,将其添加到赛车模型下,摆放在两边排气口的位置,这样尾气的位置已经固定好只需要控制尾气的显示和关闭即可。尾气的开启关闭在Driving代码中的Skid函数中实现,它规定了当赛车的速度超过40km/h并且车轮的转动超过5个单位并且赛车接触地面时,系统就判断赛车目前处于漂移状态,此时尾气粒子系统开启,否则就关闭,这样就实现了漂移是尾气的特效。4.6.2车尾灯实现当赛车正在倒车时,车尾灯应当亮起起到警示作用。首先创建两个light物体作为车尾灯,将其放在车尾灯的位置。车尾灯的开关控制在Driving代码中的ControlLight中实现,它规定了当赛车的倒车速度达到3km/h时,车尾灯就会亮起,否则,车尾灯就会关闭。实现代码如下所示 voidControlLight(){ if(currentSpeed<-3){ leftLight.SetActive(true); rightLight.SetActive(true); }else{ leftLight.SetActive(false); rightLight.SetActive(false); } }

4.6.3漂移车痕特效创建一个Quad物体,材质设置为网上查找的合适的车痕,修改Quad的大小、位置信息保证它在车轮顶部并且它的宽度和车轮宽度相一致。车痕Z轴的位置不需要和路面保持一致,最好是车痕位置比路面位置高一点,这样渲染出来的车痕才是清晰完整的。一开始,车痕不需要实例化,当赛车漂移判断成立时,车痕开始实例化,车痕的长度不能太短,否则产生的车痕不连续。车痕会依据上一个车痕的旋转角度来保证车痕的平滑产生。4.7游戏结束实现创建一个名为Finish的物体,添加BoxCollider组件设置为Trigger。BoxCollider必须足够大能够覆盖赛车通过终点时的所有可能的位置,以免覆盖范围不足导致游戏无法结束。当赛车碰撞到BoxCollider时,系统就会判定游戏结束。4.8电脑赛车实现电脑赛车的实现主要通过CarWayPoint插件完成,通过在赛道上标示连续、互相连接的点就能控制赛车自动完成赛道。当电脑赛车运动到某个点时,系统会计算出赛车下个应该移动到的点,然后赛车移动到该点并重复以上操作直至赛车通过终点。

4.9移植到安卓平台实现4.9.1脚本优化Driving代码定义了许多public对象,在前面添加“[HideInInspector]”可以简化代码赋值操作,通过Driving代码最后的InitProperty函数使用Find操作就可找到对象所对应的各个部件。这样,其他赛车模型就能直接使用Driving代码而无需重新绑定对象。4.9.2赛车控制方式转变电脑上游戏控制采用按键方式,而手机端采用重力感应控制。重力感应需要水平方向的一个力以及左右的一个倾斜角度,因此只需要在Driving代码中添加下面几段:privatefloatvertical=1;privatefloathorizontal=0;horizontal=Input.acceleration.x;然后再用vertical替换代码中所有的Input.GetAxis(“Vertical”),这样就能实现游戏转变为重力感应控制。4.9.3转变平台场景优化将场景由电脑平台转变为安卓平台后,场景渲染会出现问题,最主要问题还是安卓平台和电脑平台的LightMaping不能通用,此外安卓平台和电脑平台对阳光的敏感度不一样。修改措施是,把LightMaping去除,然后修改Light中的亮度属性,直至得到合适的光照效果。

4.9.4游戏发布将所有绘制好的场景添加到BuildSetting中,然后修改PlayerSettings选项中的OtherSettings,如图4-9所示。图4-9OtherSettings修改MinimumAPILevel为Android4.2版本以及InstallLocation改为Automatic。修改完成后就可以点击Build发布成APK。4.10本章小结本章主要介绍了有关赛车游戏的具体实现,给出了各开发阶段的实现方法。首先给出了赛车属性的实现,然后实现赛车的运动、游戏音效、游戏特效、UI界面设计等问题,最后将游戏导出为APK文件为后续测试使用。

第5章系统测试和总结5.1系统测试打开AVDManager创建一个Android4.2版本的模拟器,将第4章导出的APK文件导入后就能模拟游戏在手机终端上的运行效果。首先是对游戏的设置测试,经过多次测试后,游戏选择横屏演示,游戏分辨率选择854*480,这是安卓手机的一般分辨率。其次是游戏内部各参数的测试,多次测试后,赛车的motorTorque设置为40最佳,摄像机的平滑速度SmoothSpeed设置为2,其余参数就采用游戏开发过程中默认的参数。结果后期测试,游戏整体运行状况良好,游戏过程中没有出现卡顿、闪退的现象,游戏功能能正确实现,总体效果令人满意。5.2本文总结本文的主要内容是基于安卓系统的自选数量的手机赛车游戏的研究与实现,提出一种实现玩家控制赛车运行以及实现赛车自动完成赛道的算法,并给出了在安卓模拟器上游戏运行状况的实验结果。此方法运用了改进的CarWayPoint插件,充分考虑了赛车自身属性以及赛道情况,并且进行了在安卓模拟器上模拟游戏运行的测试。本文的实验测试环境是在AndroidSDK上运行测试的,提高了游戏体验和游戏流畅运行,具有一定的参考价值。本文研究的主要工作有:本文对玩家的需求分析进行了基础的总结和分析,根据这些设计游戏具体的功能,具有较好的效果。本文在设计电脑赛车时,提出了用CarWayPoint插件标识赛道路段,同时指引电脑赛车正确完成赛道。5.3下一步的研究工作在本文已有的研究成果的基础上,还要从一下几个方向做进一步的研究:本文对赛车的漂移控制只是一种简易算法,如何设计出更加合理、人性化的漂移功能是下一步需要解决的。本文中的赛车无法实现漂移后的加速功能,这影响了玩家的游戏体验,所以下一步需要设计能实现漂移后加速的功能来增加游戏乐趣。本文中的赛车都是玩家根据需要自己选择的,并没有赚金币买好车的过程,这在短时间内可能会让玩家直接体验高档车的乐趣,但当玩家全部体验完后,玩家很容易厌倦游戏,所以下一步需要设计游戏的金币机制,部分高档赛车需要玩家使用金币购买,这样可以保证游戏的可玩性。同样的,游戏中的部分赛道也可以设置为需要玩家用某种方式来解锁。谢辞本课题能够顺利完成,首先要感谢我的毕业设计导师张彩明。在毕业设计期间,张老师一直给予了我很大的帮助。从选题、分析、设计、实现、检测各个阶段,张老师都给予了我悉心指导。张老师求真务实、认真严谨的作风是我今后学习的榜样。其次,我还要感谢李雪梅老师。在编写论文的阶段,李老师一直对我的论文详细修改,不断指出我的不足和问题,让我能按时、正确完成论文。四年的大学生活马上就要结束,回忆过去四年,有失败,有泪水,但也有成功,有喜悦。通过这次毕业设计,我学到了课堂上没有的知识,感受到了之前从未接触过的理念,不断的修改调试最终完成了毕业设计。相信这次毕业设计的经历会对我以后的人生有很大帮助。最后,我要再次感谢对我毕设期间给予帮助的老师、同学以及被我引用的文献作者。参考文献[1]张利国,代闻,龚海平Android移动开发案例详解北京:人民邮电出版社2009[2]LaurenDarcey,ShaneConderAndroidWirelessApplicationDevelopmentAddison-WesleyProfessional2009[3]胡绍民游戏设计概论北京:清华大学出版社2008[4]郭宏志Android应用开发详解北京:电子工业出版社2010[5]韩超,梁泉Android系统原理及开发要点详解北京:电子工业出版社2010[6]路朝龙Unity3D游戏开发从入门到精通北京:中国铁道出版社2013[7](英)WillGoldstone著,张检阅译Unity3.x游戏开发经典教程2013[8]杨文志GoogleAndroid程序设计指南北京:电子工业出版社2009[9]余志龙GoogleAndroidSDK开发范例大全北京:人民邮电出版社2009[10](美)席尔瓦著,王恒等译精通Android游戏开发北京:人民游戏出版社2011[11]吴亚峰Android核心技术与实例详解北京:电子工业出版社2003[12]李佐彬等Android开发入门与实战体验北京:机械工业出版社2011[13]靳岩,姚尚朗GoogleAndroid开发入门与实战北京:人民邮电出版社2009[14]张波,高朝勤,杨越译著GoogleAndroid基础教程北京:人民邮电出版社2009[15](美)罗杰等著,李耀亮译Android应用开发北京:人民邮电出版社2010[16](美)布金,西曼著OReillyTaiwan公司译游戏开发中的人工智能南京:东南大学出版社2006附录1论文原文iDome:ImmersivegamingwiththeUnitygameengineWrittenby

PaulBourkeProceedingsoftheComputerGames&AlliedTechnology09(CGAT09),ResearchPublishingServices,ISBN:978-981-08-3165-3,pp265-272.

PresentedatComputerGames&AlliedTechnology09,Singapore,May12,2009

AbstractInmanygames,notablyfirstpersonshooters,theplayerinhabitsa3Dvirtualworldsimilartotheuserexperienceinavirtualrealityapplicationortrainingsimulator.Itisgenerallyacceptedthatinsuchenvironmentsthereisaheightenedsenseofimmersionandengagement

[1]

iftheplayerissurroundedbythevirtualimagery,thatis,thevirtualworldoccupiestheirentirevisualfield.HowevertraditionalrealtimegraphicsAPIsonlys

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论