下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 毕业设计(论文)-基于Andriod和IOS平台赛车游戏的设计与实现

毕业设计(论文)-基于Andriod和IOS平台赛车游戏的设计与实现.doc

毕业设计(论文)-基于Andriod和IOS平台赛车游戏的设计…

凤仙华紫
2018-04-15 0人阅读 举报 0 0 暂无简介

简介:本文档为《毕业设计(论文)-基于Andriod和IOS平台赛车游戏的设计与实现doc》,可适用于综合领域

毕业设计(论文)基于Andriod和IOS平台赛车游戏的设计与实现电子科技大学级本科毕业设计(论文)任务书拟题单位审题人,签名,题目及副标题基于AndriodIOS平台赛车游戏的设计与实现题目来源:工程技术理论研究实验设计其它,选择其中一种,主要任务:()学习和了解UnityD的基础内容和使用方法()设计游戏的核心玩法并分析其实现的可行性()使用UnityD进行游戏的开发()将成品游戏项目打包成apk及ipa文件预期成果或目标:()熟悉UnityD的界面及基本使用方法()使用UnityD成功开发出具有较强可玩性的赛车游戏成果形式:硬件、硬件软件、软件、纯论文,选择其中一种,年月日基于AndriodIOS平台赛车游戏的设计与实现摘要:近几年智能机的流行导致手游市场空前火爆。优良的手机游戏不见能给人们的生活带来乐趣也能给开发者带来可观的经济效益。游戏引擎是游戏的核心选择一款兼容性好、高效、容易使用的游戏引擎能大大降低游戏开发的成本。本系统结合AndroidIOS平台利用unityD游戏开发引擎开发出一款赛车游戏本游戏对硬件有广泛的支持使用更加规范且易用的C#语言进行开发。在本文中也会提到开发过程中出现的各种难题希望可以对使用unityD开发的工作人员提供一些参考。Abstract:Inrecentyearsthepopularityofintelligentmachines,resultinginunprecedentedpopularmobilegamesmarketExcellentmobilegamebutnotfuntogivepeople'slives,butalsogivedeveloperstobringconsiderableeconomicbenefitsThegameengineisthecoreofthegame,chooseagoodcompatibility,efficientandeasytousegameengine,cangreatlyreducegamedevelopmentcostsThissystemcombinesAndroidIOSplatform,usingunityDgamedevelopmentengine,developedaracinggame,inthisgamethereisbroadsupportforhardware,usingmorestandardizedandeasytouseC#languagedevelopmentInthisarticleitwillbereferredtothedevelopmentofvariousproblemsarisingintheprocess,hopingtoprovidesomereferencetoStaffunityDdevelopment目录第一章:绪论论文研究的背景论文研究的内容论文框架第二章:游戏客户端实现的核心技术综述UNITYD游戏引擎的简介EZGUI概述BUFFER简介PROTOCOL第三章:游戏分析概述描述游戏类型和用户范围任务系统功能需求地图系统游戏部分功能实现游戏开始车辆控制障碍车辆生成金币生成错误~未定义书签。游戏结束条件赛车游戏软件的测试内存测试平衡测试总结与展望场景搭建总结展望第一章:绪论随着最近几年尤其是智能机的迅猛发展,以智能机代表的移动终端的游戏迅速发展,移动互联网正在兴起,移动终端用户的娱乐需求不可忽视。依据工信部发布的移动互联网白皮书显示,我国移动互联网仍处于早期的发展阶段,并以个月为周期快速迭代,移动智能终端称为历史上渗透速度最快的终端产品,移动终端上的盈利模式有待进一步的发展进化,移动终端娱乐产业发展潜力巨大。手游按照游戏运行环境,可以分为手机单机游戏,网络游戏,按照用户的分类,可以分为:角色扮演,益智类和休闲类论文研究的背景手机游戏的历史源远流长,从上个世纪年代的贪吃蛇开始,手机游戏就开始登上历史的舞台随着这几年手机硬件的发展,其优异的性能大有超赶笔记本的趋势手机性能的提升催加速手游市场的发展速度,近几年,手游市场呈现持续涨高的态势本论文正式基于如下背景提出的论文研究的内容本论文涉及的内容是笔者开发的手机单机游戏Creazycar,该游戏属于休闲游戏。讲述的是用户操控赛车在街道上躲避飞驰的赛车通过游戏时常和金币来衡量用户的游戏水平用户死亡的条件是没能躲避来驰车辆。本游戏采用unityD游戏引擎开发他是一款轻量级别的的游戏开发引擎界面友好使用方便本系统开发出来的游戏能够快速抢占游戏市场。对于游戏开发的生存期具有很大的优势。本系统使用的是C#语言开发当前阶段使用的是C语言开发。论文框架本文从以下内容安排本文的行文第一章绪论介绍游戏开发的背景和论文研究的内容第二章介绍游戏开发的相关技术。第三章分析游戏的的需求和用户的范围。第四章简述游戏设计的具体实现第五章演示游戏中实现的功能第六章对游戏进行总结。第二章:游戏客户端实现的核心技术综述Creazycar采用的是游戏引擎unityD是风靡全球的游戏开发引擎还有游戏中运用到的UI插件EZGUI还用到了ProtocolBuffer等。下面对游戏开发所用的技术进行简介unityD游戏引擎的简介unityD是一个快速开发游戏的平台能够快速实现我们的梦想。UnityD在快速开发方面是非常强的它适用于C#、JavaScript、Boo等主流的脚本语言兼容三维画面美化所需要的美术资源文件格式其内嵌了动画、粒子、寻路等子系统使其可以进行各种图形渲染。而且它不仅仅只是一个工具它还有强大的后台支持Unity公司开设了一个网络资源商店(AssetStore)可以利用它下载几乎我们所需的所有东西例如:模型、贴图、脚本程序、插件、场景音效、交互界面等等。EZGUI概述EZGUI时UnityD的一个界面插件因为UnityD强大的三维建模能力可以对游戏中的角色进行全方位的立体渲染而二维游戏只需要对平面上的画面控件进行渲染即可达到预期的目标值如果游戏中全是三维界面无疑会大大加深游戏的开发难度并且渲染场景会对资源进行浪费所以此时就要使用unityD来制造一些二维场景。已达到降低系统消耗节省资源的目的。ProtocolBuffer简介ProtocolBuffer(以下简称Protobul)是谷歌公司的混合语言标准protobuf是一款轻量级别的的数据存储格式由于数据存储格式和平台无关和开发的语言无关因此他很适合做数据存储或者是数据交换由于protobuf比xml更小更快更简单处理速度更快在移动智能端常采用他作为数据存储格式用户还可以对protocolbuf的数据格式进行重定义大大加快用户的开发进度。因此结合portocolbuf用户开发游戏更为方便快捷。第三章:游戏分析概述描述赛车是一款手机客户端游戏,是目前商业开发的游戏项目,为了保证游戏的可玩性,画面效果做到吸引人此用例是对整个游戏过程的统称,代表了玩家真正娱乐的部分,包括游戏的操控系统、游戏场景中的静态元素和角色动态元素。用例的基本流为选关界面选择某一关后进入,而离开的方式大致有三种,分别是游戏失败、游戏成功和中途跳转为提高游戏的下载量,增加游戏的商业价值,本系统在采用游戏快餐策略设计模式,让用户在零碎时间也能享受到游戏的乐趣。系统方案设计本款游戏没有华丽的游戏技能效果没有多重操作的高操作性游戏的实际玩法就是然玩家在山地上进行实际模拟汽车驾驶控制车辆的平衡。通过拾取金币进行关卡的设计。此外车辆有前进档、后退档、空档让玩家熟练进行控制。系统流程图:游戏界面声音控制游戏选关游戏排行欢迎界面游戏界面界面界面榜界面失败提示胜利通关控制系统暂停按钮提示界面游戏场景金币数量界面界面按钮地图滚动要实现赛道地图滚动的效果一种比较简单的方案是用两张关于赛道的图片放在一起!在屏幕中向下移动一张图片移出屏幕造成的空余由另一张图片移进屏幕来填补。不断循环这样可以达到赛道滚动的效果。游戏类型和用户范围本游戏属于休闲类游戏,适用于青少年上班族等用户群体。由于上班族和学生党的零碎时间比较多让用户在零碎时间的到游戏的快乐是本游戏设计的出发点。任务系统功能需求本游戏的任务系统简洁明了,用户通过达到系统指定的任务金币数量,就可以获取相应的等级,从而提升装备的灵活性,和特效作用的时间游戏逻辑本游戏地图系统采用场景循环出现模式,阻碍车辆的出现采用随机算法生成本游戏的游戏逻辑如图所示开始游戏初始化随机车辆生成金币生成是否存活统计金币结束软件调试当程序开发人员根据需求分析与出相应的逻辑代码后此时的代码仅仅只能供人类阅读如果想让机器硬件来执行这些代码还需要进行下一个步骤即编译将开发人员所写的代码转换成硬件可以执行的代码。C#开发环境自带有编译模块可以供你非常方便地进行编译工作。当程序中其中一部分功能模块代码完成时此时编译器首先要检查所有的代码是否符合语法要求如果遇到错误问题则在错误问题对应的语句行上面做上相应的标识。在第三行代码的前面有红色的点提示这个地方有错误如果你单击这个红点则在工具栏下面会出现一个非常简短的错误提示供你了解错误原因:Error:parseerrorbefore"release"但是这个提示仅仅只是编译器试图给出尽可能的错误反馈信息,这个反馈并不是非常的精确同时也不是错误所在的精确位置,仅仅是给出错误相对接近的位置,如本例中错误的原因就不是红点所示的第三行代码,而是其上面的一行代码最后没有加””所致。调试一般设置断点程序会在遇到第一个中断点时停下来可以通过顶部右侧的窗格查看变量值并且变量名和变量的值都是以红色显示但其结果是在中断点之前设定或计算得出的结果因此应注意设置的中断点的位置当单击“f”按钮程序会继续向下执行。游戏部分功能实现游戏开始游戏开始界面简洁大方,而且针对用户群体,特意设计出萌化系列的车辆,让用户进入一个充满欢乐的游戏世界游戏开始界面如图所示车辆控制在crazycar这个游戏中,车辆控制通过通过屏幕下方的四个按钮,分别控制车辆的前进,后退,向左,向右,该界面的设计简约大方,玩家试玩几次便可轻松掌握游戏控制车辆的控制按钮界面如图所示,障碍车辆生成障碍车辆的生成调用随机函数,通过实际函数生成障碍车辆,玩家通过控制车辆避让障碍车辆,即可存活躲避障碍车辆如图所示:游戏结束条件当用户来不及躲避障碍车辆时,角色死亡,游戏结束,此时,系统自动统计当前用户所获取的用户所获取的金币数量游戏结束画面如图所示:赛车游戏软件的测试软件测试就是发现代码中存在的问题并进行改进,从而提升软件产品的质量的过程。软件测试都是需要测试人员按照产品行为描述来实施。游戏测试作为软件测试的一部分,现有的软件测试方法都适用于它,不过由于游戏项目的特殊性,游戏项目在测试过程中还需要从执行效率,游戏合理性和平衡性等角度进行进一步的测试。具体到AndriodIOS游戏的测试,除了传统的测试方法外,还需要从内存和平衡性两个角度进行测试。内存测试对于移动设备来说,内存资源是非常有限的。此外,移动终端设备用户使用应用之后,不直接关闭应用便开始进行其它操作,原本的应用此时在设备的后台继续默默的运行,被其占用的内存资源得不到释放,这更加剧了内存资源不足的问题。一个程序在模拟器(simulator)里运行良好,但在真机上很有可能跑起来特别卡,或者根本跑不起来。高效的利用设备的内存是十分重要的,内存泄露更是不允许的,所以iOS游戏的测试主要指的是内存测试。平衡测试游戏的可玩性是由游戏环境和游戏规则共同决定的。游戏的规则是游戏的核心,规则的平衡性直接影响了游戏的生命周期。一个理想的游戏应该运行玩家进行一系列的选择,游戏在玩家选择的基础上进行游戏模拟,最后以胜利与失败或其它形式结束游戏。如果在游戏过程中的某一个阶段,玩家只有唯一的一个选择,并且选择之后游戏也没有结束,这说明游戏的平衡性有了问题。游戏的平衡性主要包括三方面的内容:玩家间的平衡性,玩家与游戏规则间的平衡性以及游戏内部的平衡性等。游戏的不平衡主要表现在强制的劣势或优势,技术水平的不平衡,玩家时间的不平衡,道具昂贵却用处不大和便宜而且有效。在汽车游戏中需要进行的平衡性测试主要指的是游戏内部的平衡性测试,测试的范围包括配置数据合理性测试、游戏参数合理性测试和关卡难度测试等。平衡性测试的方式主要是反复的玩本游戏,及时记录当前的游戏数据和游戏体验,通过综合分析,实现对游戏平衡性的优化。总结与展望在游戏项目的开发过程中本人遇到了许多的难题走了不少的弯路毕设结束之时总会许多的想法以及相关开发经验的总结下面就将开发过程中的经验和教训总结并对将来的学习和工作做出展望。总结此游戏是以UD为平台和开发工具应用C#语言为后台开发语言所开发出来的一款手机移动端游戏。首先对手机游戏在未来的发展趋势和未来的地位以及未来手机游戏的商业化给予了肯定展望韩国和日本及欧美发达国家手机游戏已经成为了一种时尚一种很有商业前途的产业。在中国将有很大的发展前景和市场中国必将迎来一场手机游戏开发的大风暴。此款游戏运行视觉流畅但是在物理碰撞方面还是缺少了很多的特效和配音等在以后的工作中应对这方面精心加工和改进。场景搭建总结()控制资源消耗在功能场景搭建的过程中每一个场景控件都需要指定一个材质(Material)来生成控件贴图因为控件贴图是需要绑定在一个材质上的。一个好的功能场景不光要实现需求里的所有功能还要控制场景规模、控制其资源消耗。功能场景规模的控制主要通过显示资源的控制来实现。在制作控件时尽可能少的去制作控件,比如在场景设计中,使用循环模式重复场景会节省很多资源在制作控件指定材质Material时尽可能与其他控件公用一个材质只用一个而考虑到控件贴图是和材质绑定在一起的因此一般的做法都是每一个功能系统指定一个材质然后该功能系统中的所有控件都指定这个材质并生成贴图这样既方便管理、也不浪费资源。在生成贴图时要尽可能的生成到同一张贴图中因为每一张贴图都是*的尺寸规格如果只有几个控件那么生成的贴图有很大一部分是空着的这样造成了资源的浪费。因此在不影响使用的情况下可以和其他功能系的控件贴图一起生成这样每一张贴图都能充分的使用减少材质贴图的浪费。()场景控件的动态生成场景中所有显示的控件对象并不都是提前设置好的静态对象有的控件需在脚本程序中动态生成比如将领头像和物品图标等需要根据服务器数据来区别显示的控件、在场景中重复出现可以被调用的通用控件等。而且因为现在智能手机的屏幕尺寸不一样如果按屏幕的百分比来显示、并结合屏幕的绝对坐标(本项目中选择屏幕左上角)动态生成的话就能够在不同尺寸的智能手机屏幕上都正常显示同时动态生成可以减少静态模型的应用控制游戏客户端的大小降低游戏的运行消耗而且不同的玩家他们的装备、资源等等是不同的静态的元素对象不能很好的适应所有玩家的需要而动态生成的话可以根据玩家的具体数据来生成相应的显示界面不会造成显示资源浪费也不会因为静态元素的固定大小而发生溢出或者显示不完整从而充分合理地利用了资源。逻辑编写总结()代码要多编写多尝试在功能系统运行时需要对场景控件定位和控制这时就需要快速找到控件。而查找控件可以通过名称直接查找也可以通过其父类控件来逐级查找但第一种方法只适用于场景根目录下的场景控件也就是说如果某控件是场景中其他控件的子控件那么只能通过其父类再逐级定位的方式来查找。一开始编码时场景较简单都在根目录下笔者都按照名称查找后来更新场景增加了很多子级空间笔者仍然按照之前的方法来查找控件调试的时候就总报查找为空导致以为是控件的问题反复修改场景控件浪费了很多的时间和精力。()功能系统编码要高内聚、低耦合代码usingUnityEngineusingSystemCollectionsusingSystemCollectionsGenericpublicclassShopCharacter:MonoBehaviour{SystemSerializablepublicclassCharacterData{publicGameObjectplayerpublicstringnamepublicintpricepublicboolisUnLock}SystemSerializablepublicclassButton{publicRectrectpublicTextureDnormalpublicTextureDactive}SystemSerializablepublicclassLabel{publicGUITextguiTextpublicstringtextpublicintfontSizepublicColorfontColorpublicFontStylefontStylepublicTextAnchoralignmentpublicRectrect}publicCharacterDataplayerspublicfloatfactorSpacepublicintcoinpublicButtonbtnBuy,btnSelect,btnOnSelect,btnBack,btnArrowLeft,btnArrowRight,iconCoinBuy,iconCoinCurrentpublicLabelguiLabelName,guiLabelPrice,guiLabelCoinCurrentpublicAudioClipsfxButtonprivateCalOnGUIcalGUIprivateintindexSelectprivateintselecCorrectprivateList<Vector>point=newList<Vector>()privateVectorgetMousePosHideInInspectorpublicGUIStyleguiStyleBtnBuyHideInInspectorpublicGUIStyleguiStyleBtnSelectHideInInspectorpublicGUIStyleguiStyleBtnOnSelectHideInInspectorpublicGUIStyleguiStyleBtnBackHideInInspectorpublicGUIStyleguiStyleBtnArrowLeftHideInInspectorpublicGUIStyleguiStyleBtnArrowRightvoidSetStyle(){guiStyleBtnBuynormalbackground=btnBuynormalguiStyleBtnBuyactivebackground=btnBuyactiveguiStyleBtnSelectnormalbackground=btnSelectnormalguiStyleBtnSelectactivebackground=btnSelectactiveguiStyleBtnBacknormalbackground=btnBacknormalguiStyleBtnBackactivebackground=btnBackactiveguiStyleBtnOnSelectnormalbackground=btnOnSelectnormalguiStyleBtnOnSelectactivebackground=btnOnSelectactiveguiStyleBtnArrowLeftnormalbackground=btnArrowLeftnormalguiStyleBtnArrowLeftactivebackground=btnArrowLeftactiveguiStyleBtnArrowRightnormalbackground=btnArrowRightnormalguiStyleBtnArrowRightactivebackground=btnArrowRightactive}voidResetData(){for(inti=i<playersLengthi){PlayerPrefsSetString("Player"i,"False")}}voidStart(){ResetData()SetStyle()coin=GameDataLoadCoin()selecCorrect=PlayerPrefsGetInt("SelectPlayer")Vectorpos=VectorzeroDebugLog(playersLength)for(inti=i<playersLengthi){playersiplayertransformlocalPosition=newVector(posx(i*factorSpace),,)pointAdd(newVector(*(posx(i*factorSpace))transformpositionx,transformpositiony,transformpositionz))if(i==){playersiisUnLock=true}else{DebugLog(PlayerPrefsGetString("Player"i))if(PlayerPrefsGetString("Player"i)==""){playersiisUnLock=false}else{playersiisUnLock=boolParse(PlayerPrefsGetString("Player"i))}}}StartCoroutine(WaitInput())}voidOnGUI(){SetStyle()guiLabelNameguiTexttext=playersindexSelectnameguiLabelNameguiTextpixelOffset=newVector(GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(guiLabelNamerectx,guiLabelNamerecty),newVector(guiLabelNamerectwidth,guiLabelNamerectheight))x,GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(guiLabelNamerectx,guiLabelNamerecty),newVector(guiLabelNamerectwidth,guiLabelNamerectheight))y)guiLabelNameguiTextfontSize=GUICalculateFontSize(guiLabelNamefontSize)guiLabelCoinCurrentguiTexttext=coinToString()guiLabelCoinCurrentguiTextpixelOffset=newVector(GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(guiLabelCoinCurrentrectx,guiLabelCoinCurrentrecty),newVector(guiLabelCoinCurrentrectwidth,guiLabelCoinCurrentrectheight))x,GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(guiLabelCoinCurrentrectx,guiLabelCoinCurrentrecty),newVector(guiLabelCoinCurrentrectwidth,guiLabelCoinCurrentrectheight))y)guiLabelCoinCurrentguiTextfontSize=GUICalculateFontSize(guiLabelCoinCurrentfontSize)GUIDrawTexture(GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(iconCoinCurrentrectx,iconCoinCurrentrecty),newVector(iconCoinCurrentrectwidth,iconCoinCurrentrectheight)),iconCoinCurrentnormal)if(playersindexSelectisUnLock==false){GUIDrawTexture(GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(iconCoinBuyrectx,iconCoinBuyrecty),newVector(iconCoinBuyrectwidth,iconCoinBuyrectheight)),iconCoinBuynormal)guiLabelPriceguiTextenabled=trueguiLabelPriceguiTexttext=playersindexSelectpriceToString()guiLabelPriceguiTextpixelOffset=newVector(GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(guiLabelPricerectx,guiLabelPricerecty),newVector(guiLabelPricerectwidth,guiLabelPricerectheight))x,GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(guiLabelPricerectx,guiLabelPricerecty),newVector(guiLabelPricerectwidth,guiLabelPricerectheight))y)guiLabelPriceguiTextfontSize=GUICalculateFontSize(guiLabelPricefontSize)if(GUIButton(GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(btnBuyrectx,btnBuyrecty),newVector(btnBuyrectwidth,btnBuyrectheight)),"",guiStyleBtnBuy)){if(coin>=playersindexSelectprice){coin=playersindexSelectpriceGameDataSaveCoin(coin)playersindexSelectisUnLock=truePlayerPrefsSetString("Player"indexSelect,"True")PlayerPrefsSetInt("SelectPlayer",selecCorrect)DebugLog("Buy:"indexSelect":"PlayerPrefsGetString("Player"indexSelect))}if(sfxButton!=)AudioSourcePlayClipAtPoint(sfxButton,transformposition)}}if(playersindexSelectisUnLock==true){guiLabelPriceguiTextenabled=falseif(indexSelect==selecCorrect){GUIButton(GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(btnOnSelectrectx,btnOnSelectrecty),newVector(btnOnSelectrectwidth,btnOnSelectrectheight)),"",guiStyleBtnOnSelect)}else{if(GUIButton(GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(btnSelectrectx,btnSelectrecty),newVector(btnSelectrectwidth,btnSelectrectheight)),"",guiStyleBtnSelect)){selecCorrect=indexSelectPlayerPrefsSetInt("SelectPlayer",selecCorrect)if(sfxButton!=)AudioSourcePlayClipAtPoint(sfxButton,transformposition)}}}if(GUIButton(GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(btnArrowLeftrectx,btnArrowLeftrecty),newVector(btnArrowLeftrectwidth,btnArrowLeftrectheight)),"",guiStyleBtnArrowLeft)){indexSelectif(indexSelect>=playersLength){indexSelect=playersLength}if(sfxButton!=)AudioSourcePlayClipAtPoint(sfxButton,transformposition)}if(GUIButton(GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(btnArrowRightrectx,btnArrowRightrecty),newVector(btnArrowRightrectwidth,btnArrowRightrectheight)),"",guiStyleBtnArrowRight)){indexSelectif(indexSelect<=){indexSelect=}if(sfxButton!=)AudioSourcePlayClipAtPoint(sfxButton,transformposition)}if(GUIButton(GUICalculateRectWithScrrenWidthAndHeightSizeheight(newVector(btnBackrectx,btnBackrecty),newVector(btnBackrectwidth,btnBackrectheight)),"",guiStyleBtnBack)){PlayerPrefsSetInt("SelectPlayer",selecCorrect)ApplicationLoadLevel("TitleScene")if(sfxButton!=)AudioSourcePlayClipAtPoint(sfxButton,transformposition)}}IEnumeratorWaitInput(){boolinput=falsewhile(input==false){if(InputGetMouseButtonDown()){getMousePos=InputmousePositioninput=true}yieldreturn}StartCoroutine(SelectDirection())}IEnumeratorSelectDirection(){boolinput=falsewhile(input==false){if((InputmousePositionxgetMousePosx)<){indexSelectif(indexSelect>=playersLength){indexSelect=playersLength}input=true}if((InputmousePositionxgetMousePosx)>){indexSelectif(indexSelect<=){indexSelect=}input=true}if(InputGetMouseButtonUp()){input=true}yieldreturn}StartCoroutine(MoveToPoint())}IEnumeratorMoveToPoint(){while(VectorDistance(transformposition,pointindexSelect)>f){transformposition=VectorLerp(transformposition,pointindexSelect,*TimedeltaTime)yieldreturn}transformposition=pointindexSelectStartCoroutine(WaitInput())}}

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/24

毕业设计(论文)-基于Andriod和IOS平台赛车游戏的设计与实现

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利