




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
电电 子子 科科 技技 大大 学学 2011 级本科毕业设计(论文)任务书级本科毕业设计(论文)任务书 拟题单位拟题单位 审题人(签名)审题人(签名)_ 题目及副标题题目及副标题 基于 andriod/ios 平台赛车游戏的设计与实现 题目来源题目来源: 1.工程技术工程技术 2.理论研究理论研究 3.实验设计实验设计 4.其它其它 (选择其中一种)(选择其中一种) 主要任务:主要任务: (1) 学习和了解 unity3d 的基础内容和使用方法; (2) 设计游戏的核心玩法并分析其实现的可行性; (3) 使用 unity3d 进行游戏的开发; (4) 将成品游戏项目打包成 apk 及 ipa 文件 预期成果或目标:预期成果或目标: (1) 熟悉 unity3d 的界面及基本使用方法; (2) 使用 unity3d 成功开发出具有较强可玩性的赛车游戏 成果形式:硬件、硬件软件、软件、纯论文(选择其中一种)成果形式:硬件、硬件软件、软件、纯论文(选择其中一种) 2014 年 10 月 30 日 基于基于 andriod/iosandriod/ios 平台赛车游戏的设计平台赛车游戏的设计 与实现与实现 摘要:近几年智能机的流行,导致手游市场空前火爆。优良的手机游戏不见能 给人们的生活带来乐趣,也能给开发者带来可观的经济效益。游戏引擎是游戏 的核心,选择一款兼容性好、高效、容易使用的游戏引擎,能大大降低游戏开 发的成本。本系统结合 android/ios 平台,利用 unity3d 游戏开发引擎,开发 出一款赛车游戏,本游戏对硬件有广泛的支持,使用更加规范且易用的 c#语言 进行开发。在本文中也会提到开发过程中出现的各种难题,希望可以对使用 unity3d 开发的工作人员提供一些参考。 abstract: in recent years the popularity of intelligent machines, resulting in unprecedented popular mobile games market. excellent mobile game but not fun to give peoples lives, but also give developers to bring considerable economic benefits. the game engine is the core of the game, choose a good compatibility, efficient and easy to use game engine, can greatly reduce game development costs. this system combines android / ios platform, using unity3d game development engine, developed a racing game, in this game there is broad support for hardware, using more standardized and easy to use c # language development. in this article it will be referred to the development of various problems arising in the process, hoping to provide some reference to staff unity3d development. 目录目录 第一章:绪论.1 1.1 论文研究的背景 1 1.2 论文研究的内容1 1.3 论文框架 1 第二章:游戏客户端实现的核心技术综述.2 2.1 unity3d 游戏引擎的简介 .2 2.2ezgui 概述 .2 2.3protocol buffer简介 2 第三章:游戏分析.3 3.1 概述描述 3 3.2 游戏类型和用户范围 3 3.2 任务系统功能需求 3 3.3 地图系统 3 4 游戏部分功能实现 4 4.1 游戏开始 4 4.2 车辆控制 4 4.3 障碍车辆生成 4 4.4 金币生成 5 4.5 游戏结束条件5 5 赛车游戏软件的测试6 5.1 内存测试.7 5.2 平衡测试7 6 总结与展望8 6.1 场景搭建总结9 6.2 展望10 第一章第一章:绪论绪论 随着最近几年尤其是智能机的迅猛发展,以智能机代表的移动终端的游戏 迅速发展, 移动互联网正在兴起,移动终端用户的娱乐需求不可忽视。依据工信 部发布的移动互联网白皮书显示,我国移动互联网仍处于早期的发展阶段,并以 6 个月为周期快速迭代,移动智能终端称为历史上渗透速度最快的终端产品,移 动终端上的盈利模式有待进一步的发展进化,移动终端娱乐产业发展潜力巨大。 手游按照游戏运行环境,可以分为手机单机游戏,网络游戏,按照用户的分类,可 以分为:角色扮演,益智类和休闲类. 1.1 论文研究的背景 手机游戏的历史源远流长,从上个世纪 90 年代的贪吃蛇开始,手机游戏就开 始登上历史的舞台.随着这几年手机硬件的发展,其优异的性能大有超赶笔记本的 趋势.手机性能的提升催加速手游市场的发展速度,近几年,手游市场呈现持续涨 高的态势.本论文正式基于如下背景提出的. 1.2 论文研究的内容 本论文涉及的内容是笔者开发的手机单机游戏 creazy car,该游戏属于休 闲游戏。讲述的是用户操控赛车在街道上躲避飞驰的赛车,通过游戏时常和金 币来衡量用户的游戏水平,用户死亡的条件是没能躲避来驰车辆。 本游戏采用 unity3d 游戏引擎开发,他是一款轻量级别的的游戏开发引擎, 界面友好,使用方便,本系统开发出来的游戏能够快速抢占游戏市场。对于游 戏开发的生存期具有很大的优势。本系统使用的是 c#语言开发,当前阶段使用 的是 c+语言开发。 1.3 论文框架 本文从以下内容安排本文的行文,第一章绪论介绍游戏开发的背景和论文 研究的内容,第二章介绍游戏开发的相关技术。第三章分析游戏的的需求和用 户的范围。第四章简述游戏设计的具体实现,第五章演示游戏中实现的功能, 第六章对游戏进行总结。 第二章第二章:游戏客户端实现的核心技术综述游戏客户端实现的核心技术综述 creazy car 采用的是游戏引擎 unity3d,是风靡全球的游戏开发引擎,还有游 戏中运用到的 ui 插件 ezgui,还用到了 protocol buffer 等。下面对游戏开发所 用的技术进行简介 2.1 unity3d 游戏引擎的简介 unity3d 是一个快速开发游戏的平台,能够快速实现我们的梦想。unity 3d 在快速开发方面是非常强的,它适用于 c#、javascript、boo 等主流的脚 本语言,兼容三维画面美化所需要的美术资源文件格式,其内嵌了动画、粒子、 寻路等子系统使其可以进行各种图形渲染。而且,它不仅仅只是一个工具,它 还有强大的后台支持,unity 公司开设了一个网络资源商店(asset store) , 可以利用它下载几乎我们所需的所有东西,例如:模型、贴图、脚本程序、插 件、场景音效、交互界面等等。 2.2ezgui 概述 ezgui 时 unity3d 的一个界面插件,因为 unity3d 强大的三维建模能力,可以对游戏中 的角色进行全方位的立体渲染,而二维游戏只需要对平面上的画面控件进行渲染即可达到 预期的目标值,如果游戏中全是三维界面,无疑会大大加深游戏的开发难度,并且渲染场 景会对资源进行浪费,所以此时就要使用 unity3d 来制造一些二维场景。已达到降低系统 消耗,节省资源的目的。 2.3protocol buffer 简介 protocolbuffer(以下简称 protobul0)是谷歌公司的混合语言标准,protobuf 是一款轻量级别的的数据存储格式,由于数据存储格式和平台无关,和开发的 语言无关,因此他很适合做数据存储或者是数据交换,由于 protobuf 比 xml 更 小,更快更简单,处理速度更快,在移动智能端常采用他作为数据存储格式, 用户还可以对 protocolbuf 的数据格式进行重定义,大大加快用户的开发进度。 因此结合 portocolbuf,用户开发游戏更为方便快捷。 第三章第三章:游戏分析游戏分析 3.1 概述描述 赛车是一款手机客户端游戏,是目前商业开发的游戏项目,为了保证游戏的可 玩性,画面效果做到吸引人,此用例是对整个游戏过程的统称,代表了玩家真正娱 乐的部分,包括游戏的操控系统、游戏场景中的静态元素和角色动态元素。用例 的基本流为选关界面选择某一关后进入,而离开的方式大致有三种,分别是游戏失 败、游戏成功和中途跳转,为提高游戏的下载量,增加游戏的商业价值,本系统在 采用游戏快餐策略设计模式,让用户在零碎时间也能享受到游戏的乐趣。 3.2 系统方案设计 本款游戏没有华丽的游戏技能效果,没有多重操作的高操作性,游戏的实际 玩法就是然玩家在山地上进行实际模拟汽车驾驶,控制车辆的平衡。通过拾取 金币进行关卡的设计。此外,车辆有前进档、后退档、空档让玩家熟练进行控 制。 系统流程图: 游戏界面 游戏排行 榜界面 失败提示 界面 游戏选关 界面 游戏界面 声音控制 界面 欢迎界面 暂停按钮 控制系统 按钮 金币数量游戏场景 胜利通关 界面 提示界面 . 3.3 地图滚动 要实现赛道地图滚动的效果,一种比较简单的方案是用两张关于 赛道的图片放在一起!在屏幕中向下移动,一张图片移出屏幕造成的 空余由另一张图片移进屏幕来填补。不断循环,这样可以达到赛道 滚动的效果。 3.4 游戏类型和用户范围 本游戏属于休闲类游戏,适用于青少年,上班族等用户群体。由于上班族和 学生党的零碎时间比较多,让用户在零碎时间的到游戏的快乐,是本游戏设计 的出发点。 3.5 任务系统功能需求 本游戏的任务系统简洁明了,用户通过达到系统指定的任务金币数量,就可以 获取相应的等级,从而提升装备的灵活性,和特效作用的时间. 3.6 游戏逻辑 本游戏地图系统采用场景循环出现模式,阻碍车辆的出现采用随机算法生成, 本游戏的游戏逻辑如图所示 开开始始 游游戏戏初初始始 化化 随随机机车车辆辆 生生成成 金金币币生生成成 是是否否存存活活 统统计计金金币币 结结束束 3.7 软件调试 当程序开发人员根据需求分析与出相应的逻辑代码后,此时的代码 仅仅只能供人类阅读,如果想让机器硬件来执行这些代码,还需要 进行下一个步骤即编译,将开发人员所写的代码转换成硬件可以执 行的代码。c#开发环境自带有编译模块,可以供你非常方便地进行 编译工作。 当程序中其中一部分功能模块代码完成时,此时编译器首先要检查 所有的代码是否符合语法要求,如果遇到错误问题则在错误问题对 应的语句行上面做上相应的标识。 在第三行代码的前面有红色的点提示这个地方有错误,如果你单击 这个红点,则在工具栏下面会出现一个非常简短的错误提示供你了 解错误原因: error:parse error before “release“. 但是这个提示仅仅只是编译器试图给出尽可能的错误反馈信息,这个 反馈并不是非常的精确同时也不是错误所在的精确位置,仅仅是给出 错误相对接近的位置,如本例中错误的原因就不是红点所示的第三行 代码,而是其上面的一行代码最后没有加”;”所致。 调试一般设置断点,程序会在遇到第一个中断点时停下来,可以通 过顶部右侧的窗格查看变量值,并且变量名和变量的值都是以红色 显示,但其结果是在中断点之前设定或计算得出的结果,因此应注 意设置的中断点的位置,当单击“f5”按钮程序会继续向下执行。 4 游戏部分功能实现游戏部分功能实现 4.1 游戏开始 游戏开始界面简洁大方,而且针对用户群体,特意设计出萌化系列的车辆,让 用户进入一个充满欢乐的游戏世界.游戏开始界面如图所示 4.2 车辆控制 在 crazy car 这个游戏中,车辆控制通过通过屏幕下方的四个按钮,分别控制车 辆的前进,后退,向左,向右,.该界面的设计简约大方,玩家试玩几次便可轻松掌握游 戏控制.车辆的控制按钮界面如图所示, 4.3 障碍车辆生成 障碍车辆的生成调用随机函数,通过实际函数生成障碍车辆,玩家通过控制 车辆避让障碍车辆,即可存活.躲避障碍车辆如图所示: 4.5 游戏结束条件 当用户来不及躲避障碍车辆时,角色死亡,游戏结束,此时,系统自动统计当前用 户所获取的用户所获取的金币数量.游戏结束画面如图所示: 5 赛车游戏软件的测试赛车游戏软件的测试 软件测试就是发现代码中存在的问题并进行改进,从而提升软件产品的质量 的过程。软件测试都是需要测试人员按照产品行为描述来实施。游戏测试作为 软件测试的一部分,现有的软件测试方法都适用于它,不过由于游戏项目的特殊性,游 戏项目在测试过程中还需要从执行效率,游戏合理性和平衡性等角度进行进一步 的测试。具体到 andriod/ios 游戏的测试,除了传统的测试方法外,还需要从内存 和平衡性两个角度进行测试。 5.1 内存测试 对于移动设备来说,内存资源是非常有限的。此外,移动终端设备用户使用应用之 后,不直接关闭应用便开始进行其它操作,原本的应用此时在设备的后台继续默默 的运行,被其占用的内存资源得不到释放,这更加剧了内存资源不足的问题。一个 程序在模拟器(simulator)里运行良好,但在真机上很有可能跑起来特别卡,或者根 本跑不起来。高效的利用设备的内存是十分重要的,内存泄露更是不允许的,所以 ios 游戏的测试主要指的是内存测试。 5.2 平衡测试 游戏的可玩性是由游戏环境和游戏规则共同决定的。游戏的规则是游戏的 核心,规则的平衡性直接影响了游戏的生命周期。一个理想的游戏应该运行玩家 进行一系列的选择,游戏在玩家选择的基础上进行游戏模拟,最后以胜利与失败或 其它形式结束游戏。如果在游戏过程中的某一个阶段,玩家只有唯一的一个选择, 并且选择之后游戏也没有结束,这说明游戏的平衡性有了问题。 游戏的平衡性主要包括三方面的内容:玩家间的平衡性,玩家与游戏规则间的 平衡性以及游戏内部的平衡性等。游戏的不平衡主要表现在强制的劣势或优势, 技术水平的不平衡,玩家时间的不平衡,道具昂贵却用处不大和便宜而且有效。在 汽车游戏中需要进行的平衡性测试主要指的是游戏内部的平衡性测试,测试的范 围包括配置数据合理性测试、游戏参数合理性测试和关卡难度测试等。平衡性 测试的方式主要是反复的玩本游戏,及时记录当前的游戏数据和游戏体验,通过综 合分析,实现对游戏平衡性的优化。 6 总结总结与展望与展望 在游戏项目的开发过程中,本人遇到了许多的难题,走了不少的弯路,毕设 结束之时,总会许多的想法,以及相关开发经验的总结,下面就将开发过程中 的经验和教训总结,并对将来的学习和工作做出展望。 6.1 总结 此游戏是以 u3d 为平台和开发工具,应用 c#语言为后台开发语言,所开发出 来的一款手机移动端游戏。首先对手机游戏在未来的发展趋势和未来的地位以 及未来手机游戏的商业化给予了肯定,展望韩国和日本及欧美发达国家,手机 游戏已经成为了一种时尚,一种很有商业前途的产业。在中国将有很大的发展 前景和市场,中国必将迎来一场手机游戏开发的大风暴。此款游戏运行视觉流 畅,但是在物理碰撞方面还是缺少了很多的特效和配音等,在以后的工作中应 对这方 面精心加工和改进。 6.2 场景搭建总结 (1)控制资源消耗 在功能场景搭建的过程中,每一个场景控件都需要指定一个材质(material) 来生成控件贴图,因为控件贴图是需要绑定在一个材质上的。一个好的功能场 景 不光要实现需求里的所有功能,还要控制场景规模、控制其资源消耗。功能场 景 规模的控制主要通过显示资源的控制来实现。在制作控件时,尽可能少的去制 作控件,比如在场景设计中,使用循环模式重复场景会节省很多资源 在制作控件指定材质 material 时,尽可能与其他控件公用一个材质只用一 个,而考虑到控件贴图是和材质绑定在一起的,因此一般的做法都是每一个功 能系统指定一个材质,然后该功能系统中的所有控件都指定这个材质并生成贴 图,这样既方便管理、也不浪费资源。在生成贴图时,要尽可能的生成到同一 张贴图中,因为每一张贴图都是 1024*1024 的尺寸规格,如果只有几个控件, 那么生成的贴图有很大一部分是空着的,这样造成了资源的浪费。因此在不影 响使用的情况下,可以和其他功能系的控件贴图一起生成,这样每一张贴图都 能充分的使用,减少材质贴图的浪费。 (3)场景控件的动态生成 场景中所有显示的控件对象,并不都是提前设置好的静态对象,有的控件 需在脚本程序中动态生成,比如将领头像和物品图标等需要根据服务器数据来 区别显示的控件、在场景中重复出现可以被调用的通用控件等。而且因为现在 智能手机的屏幕尺寸不一样,如果按屏幕的百分比来显示、并结合屏幕的绝对 坐标(本项目中选择屏幕左上角)动态生成的话,就能够在不同尺寸的智能手机屏 幕上都正常显示;同时,动态生成可以减少静态模型的应用,控制游戏客户端 的大小,降低游戏的运行消耗;而且,不同的玩家,他们的装备、资源等等是 不同的,静态的元素对象不能很好的适应所有玩家的需要,而动态生成的话, 可以根据玩家的具体数据来生成相应的显示界面,不会造成显示资源浪费,也 不会因为静态元素的固定大小而发生溢出或者显示不完整,从而充分合理地利 用了资源。 5.3 逻辑编写总结 (1)代码要多编写多尝试 在功能系统运行时,需要对场景控件定位和控制,这时就需要快速找到 控件。而查找控件可以通过名称直接查找,也可以通过其父类控件来逐级查找, 但第一种方法只适用于场景根目录下的场景控件,也就是说,如果某控件是场 景中其他控件的子控件,那么只能通过其父类再逐级定位的方式来查找。一开 始编码时场景较简单,都在根目录下,笔者都按照名称查找;后来更新场景, 增加了很多子级空间,笔者仍然按照之前的方法来查找控件,调试的时候就总 报查找为空,导致以为是控件的问题,反复修改场景控件,浪费了很多的时间 和精力。 (2)功能系统编码要高内聚、低耦合 代码 using unityengine; using system.collections; using system.collections.generic; public class shopcharacter : monobehaviour system.serializable public class characterdata public gameobject player; public string name; public int price; public bool isunlock; system.serializable public class button public rect rect; public texture2d normal; public texture2d active; system.serializable public class label public guitext guitext; public string text; public int fontsize; public color fontcolor; public fontstyle fontstyle; public textanchor alignment; public rect rect; public characterdata players; public float factorspace; public int coin; public button btnbuy, btnselect, btnonselect, btnback, btnarrowleft, btnarrowright, iconcoinbuy, iconcoincurrent; public label guilabelname, guilabelprice, guilabelcoincurrent; public audioclip sfxbutton; private calongui calgui; private int indexselect; private int seleccorrect; private list point = new list (); private vector3 getmousepos; hideininspector public guistyle guistylebtnbuy; hideininspector public guistyle guistylebtnselect; hideininspector public guistyle guistylebtnonselect; hideininspector public guistyle guistylebtnback; hideininspector public guistyle guistylebtnarrowleft; hideininspector public guistyle guistylebtnarrowright; void setstyle() guistylebtnbuy.normal.background = btnbuy.normal; guistylebtnbuy.active.background = btnbuy.active; guistylebtnselect.normal.background = btnselect.normal; guistylebtnselect.active.background = btnselect.active; guistylebtnback.normal.background = btnback.normal; guistylebtnback.active.background = btnback.active; guistylebtnonselect.normal.background = btnonselect.normal; guistylebtnonselect.active.background = btnonselect.active; guistylebtnarrowleft.normal.background = btnarrowleft.normal; guistylebtnarrowleft.active.background = btnarrowleft.active; guistylebtnarrowright.normal.background = btnarrowright.normal; guistylebtnarrowright.active.background = btnarrowright.active; void resetdata() for (int i = 0; i = playersindexselect.price) coin -= playersindexselect.price; gamedata.savecoin(coin); playersindexselect.isunlock = true; playerprefs.setstring(“player_“+indexselect, “true“); playerprefs.setint(“selectplayer“, seleccorrect); debug.log(“buy : “+indexselect+ “ : “ + playerprefs.getstring(“player_“+indexselect); if(sfxbutton != null) audiosource.playclipatpoint(sfxbutton,transform.position); if (players indexselect.isunlock = true) guilabelprice.guitext.enabled = false; if(indexselect = seleccorrect) gui.button(gui_calculate.rectwithscrren_widthandheight_sizeheight(new vector2(btnonselect.rect.x, btnonselect.rect.y), new vector2(btnonselect.rect.width, btnonselect.rect.height), “, guistylebtnonselect ); else if(gui.button(gui_calculate.rectwithscrren_widthandheight_sizeheight(new vector2(btnselect.rect.x, btnselect.rect.y), new vector2(btnselect.rect.wid
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 地铁警务课件
- 医学三基《妇产科》冲刺试卷三
- 2025年乡镇文化站文物巡查员招聘笔试专项练习含答案
- 2025年自然资源部公开遴选公务员笔试题库附答案
- 2025年军队文职人员统一招聘面试( 物资管理)专项练习含答案
- 2025年县财政局政府采购中心招标文件审核员竞聘面试预测题及答案
- 2025国内旅游合同简易模板
- 2025私房买卖的合同范本
- 2025跨国合作合同条款
- 2025年度物业管理服务合同样本
- 旋挖钻机直线传动行星滚柱丝杠设计与分析
- 《肺癌早期筛查与干预》课件
- 完整的离婚协议书打印电子版(2025年版)
- 自然科学类博物馆AI应用行业跨境出海战略研究报告
- 《小学科学课程标准》解读与教学设计
- 2025届高考新型题目“纠正错别字”新题模拟练习
- 2024年江苏省南京市中考数学试卷真题(含答案逐题解析)
- 儿童保健工作规范和技术规范
- 2025年区块链应用操作员职业技能竞赛理论参考试指导题库500题(含答案)
- 福建地区 绿色食品琯溪蜜柚生产操作规程
- 民办学校教职工学年度考核方案模版(3篇)
评论
0/150
提交评论