还剩18页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
游戏程序设计课程报告报告题目太空大战游戏程序设计学院名称专业名称软件工程.学生姓名学生学号任课教师报告成绩教务处制2015年07月04日第4章游戏程序实现与测试
4.1敌人碰撞逻辑的实现voidOnTriggerEnterColliderotherifothertag.CompareTo,/PlayerRocket,/=0//如果子弹发生碰撞Rocketrocket=other.GetComponentRocket;//获取子弹对象的引用ifrocket!=nullm_life-=rocketpower;//减少生命值ifmjife=0//敌机生命值用尽就销毁ifGlobalPramameters.gameModel==SurviveModel//如果是生存模式SurviveMode1Manage.Instance.AddScorem_point;ifSurviveModelManage.Instance.GetScoreO-100*GlobalPramameters.1ifeAddCount=0mplayer.m_life+=1;〃增加生命GlobalPramameters.lifeAddCount+=1;}}elseGameManager.Instance.AddScorempoint;//消灭敌人后增加分数InstantiatemexplosionFXmtransformpositionQuaternionidentity;//播放爆炸特效Destroythis.gameObject;}}}ifothertag.CompareTo,,Playerz,==0this.gameObject.tag.CompareTo,ModelHelicoptersApachez,!=0m_life=0;InstantiatemexplosionFXmtransform.positionQuaternionidentity;〃播放爆炸特效Destroythis.gameObject;ifothertag.CompareTobound=0mlife=0;Instantiatem_explosionFXm_transform.positionQuaternionidentity;〃播放爆炸特效Destroythis.gameObject;}
4.2终极BOSS的移动实现protectedoverridevoidUpdatcMovem_fireTimer-=Time.deltaTime;ifmfireTimer=0m_fireTimer=1;ifm_player!=nullVector3relativePos=m_transform.position-m_playerposition;//敌机位置减去玩家位置,得到一个向量差Vector3leftPosl=mtransformposition;//左边发射导弹位置Vector3leftPos2=mtransformposition;//左边发射导弹位置Vector3rightPosl=mtransformposition;//右边发射导弹位置Vector3rightPos2=mtransform.position;//右边发射导弹位置leftPosl.x-=
0.9f;leftPos
2.x-=
1.3f;rightPos
2.x+=
0.9f:rightPosl.x+=
1.2f;InstantiatemrocketleftPoslQuaternion.LookRotationrelativePos;〃让子弹朝着玩家飞Instantiatem_rocketleftPos2Quaternion.LookRotationrelativePos;//让子弹朝着玩家飞Instantiatem_rocketrightPos2Quaternion.LookRotationrelativePos;//让子弹朝着玩家飞InstantiatemrocketrightPoslQuaternion.LookRotationrelativePos;//让子弹朝着玩家飞}}//前进:Z方向直线往下走floatrx=Mathf.SinTime.time-GlobalPramameters.time*Time.deltaTime*
6.Of;//左右移动floatrz=Of;int[]myArray={12;floatelement=myArray[Random.Range0myArray.Length];ifelement%2==0rz=Mathf.SinTimetime*Time.deltaTime*-
1.Of;//上下移动elserz=Mathf.SinTimetime*Time.deltaTime*
1.Of;//上下移动m_transform.TranslatenewVector3rx0rz;
4.3玩家移动逻辑实现voidMoveToOifInput.GetMouseButton0Vector3ms=Input.mousePosition;//获得鼠标屏幕的位置Rayray二Cameramain.ScreenPointToRayms;//将屏幕位置转为射线ReiycastHithitinfo;//用来记录射线碰撞信息booliscast=Physics.Raycastrayouthitinfo1000m_inputMask;//产生射线ifiscastm_targetPos=hitinfopoint;//如果射中目标,记录射线碰撞点Vector3pos=Vector
3.MoveTowardsthistransformpositionm_targetPosm_spccd+20*Time.deltaTime;//获得朝目标移动的位置,第三个参数数移动的最大速度this.m_transform.position=pos;//更新当前的位置
4.4玩家碰撞逻辑实现:voidOnTriggcrEnterCol1idcrotherifothertag.CompareToz,PlayerRocketzz!=0othertag.CompareTo〃Quad〃!=0ifothertag.CompareToCHelicoptersRocket,z=0m_life-=2;elsemlife-=1;ifm_life=0InstantiatemexplosionFXmtransformpositionQuaternionidentity;//播放爆炸特效Destroythis.gameObject;}
4.5游戏界面GUI显示逻辑实现voidOnGUI{//游戏暂停ifTime.timeScale=0ifnextLevelswitchGlobalPramameters.currentLevelcase1:GUI.skinlabel.fontSize=50;//放大字体GUI.LabelnewRect0Screenheight*
0.2fGULskinlabel.fontSize=20;〃进入下一关按钮ifGUI.ButtonnewRectScreenwidth*
0.5f-50*
0.4f10030〃进入下一关〃Application.LoadLevelz/level_3/z;〃载入下一关break;case3:GUI.skinlabel.fontSize=50;//放大字体GUI.LabelnewRect0Screenheight*
0.2fScreenwidth60〃通关成功〃;GULskinlabel.fontSize=20;〃进入下一关按钮ifGUI.ButtonnewRectScreenwidth*
0.5f-50Screenheight*
0.4f10030〃挑战终极BOSS{GlobalPramameters.time=Timetime;Application.LoadLevel,zlevel4〃;〃载入下—关}break;default:break;}elseGamcPauseO;ifm_player!=nullm_life=intm_player.m_life;//获得生命值}else//游戏结束m_life=0;GULskinlabel.fontSize=50;//放大字体GUI.LabelnewRect0Screenheight*
0.2fScreenwidth60游戏失败〃;GUI.skinlabel.fontSize=20;ifGUI.ButtonnewRectScreenwidth*
0.5f-50Screenheight
0.5f10030〃返回主菜单〃Application.LoadLevelstart;〃读取关卡mscore=0;m_life=GlobalPramameters.playerLife;GlobalPramameters.currentLevel=0;}}ifGlobalPramameters.currentLevel==4Helicopters_Apachc==nullGUI.skinlabel.fontSize=50;//放大字体GUI.LabelnewRect0Screenheight*
0.2fScreenwidth60YOUAREWINNER!”;GULskinlabel.fontSize=20;//进入下一关按钮ifGUI.ButtonnewRectScreenwidth*
0.5f-50Screenheight
0.4f10030〃返回主菜单〃Application.LoadLevelstart;〃读取关卡mscore二0;mlife=GlobalPramameters.playcrLifc;GlobalPramameters.currentLevel=0;}GUI.skinlabel.fontSize=15;GULLabelnewRect150510030〃生命值〃+m_life;//显示生命值//显示记录GULskinlabelalignment二TextAnchor.LowerCenter;GULLabelnewRect05Screenwidth30〃记录+mhisore;//显示当前得分GULLabelnewRect025Screenwidth30〃得分+m_score;
4.6敌人生成逻辑实现voidUpdate0caninstance=false;ifm_gameModel==SurviveModel〃控制生成不同敌人的时机currentScore=SurviveModelManage.Instance.GetScore;ifcurrentScore=350caninstance=true;elseifcurrentScore=250this.gameObject.tag.CompareToz,Model_Helicopters_Apache/z!=0caninstance=true;elseifcurrentScore=100this.gameObject.tag.CompareToz,Enemy/,=0this.gameObject.tag.CompareTo,,SuperEneiny,/=0canlnstance=true;elseifthis.gameObject.tag.CompareToz,Enemy/z=0caninstance=true;}〃控制挑战模式下游戏难度ifGlobalPramameters.currentLevel=3thismenemy.Zag.CompareToModelHelicoptersTransport/二二0enemyNumber=
25.Of:elseifGlobalPramameters.encmyCount20enemyNumber=
5.Of;elseifGlobalPramameters.enemyCount10enemyNumber=
10.Of;elseenemyNumber=
15.Of:mtimer-=Time.deltaTime;ifm_timer=0mtimer=Randomvalue*enemyNumber;//Randomvalue随机生成
0.0到
1.0的数ifGlobalPramameters.currentLevel=3thismencmy.tag.CompareTo,zModcl_Helicopters_Transport,z==0m_timer=17;elseifmtimer4m_timer=4;ifingameModel二二SurviveModelcaninstance{InstantiatemencmymtransformpositionQuaternionidentity;}elseifmgameModel!=SurviveModelInstantiatem_enemym_transformpositionQuaternionidentity;目录第1章引言
21.1游戏设计背景
21.2游戏规则
31.3主要研究内容5第2章游戏开发工具和关键技术简介
52.1开发工具52关键技术5第3章游戏程序总体设计
73.1游戏总体流程72游戏类图8第4章游戏程序实现与测试101敌人碰撞逻辑的实现
104.2终极BOSS的移动实现
114.3玩家移动逻辑实现
134.4玩家碰撞逻辑实现
144.5游戏界面GUI显示逻辑实现
144.6敌人生成逻辑实现18第五章收获20第六章参考文献20第1章引言1游戏设计背景本次设计游戏为一款飞行射击类游戏,名字为太空大战该游戏具有普通游戏一样的功能,比如场景设计,纹理贴图,人物移动,碰撞检测,生命值等元素和团队一起设计并实现该游戏一方面巩固课堂学到的知识,学以致用,加深理论知识的理解另一方面也锻炼了自己的实际编码能力和团队协作的能力,是一次难得又宝贵的开发GlobalPramameters.enemyCount+=1;}第五章收获在这次游戏设计开发中,使用TUnity3dVS20123dMax等开发工具,涉及到的关键技术有UV动画的制作,物体精确碰撞检测的实现,物体追随鼠标移动,需要改进的地方,游戏背景比较单调,战机类型较少,敌机级别种类太少,战机的功能、子弹种类特效等等第六章参考文献Unity3D游戏开发一宣雨松著一人民邮电出版社Unity3D手机游戏开发金釜曾著清华大学出版社3dsmax总动员Modeling人体建模篇4DVD作者窦项东出版社科学出版社【4】从零开始3dsmax基础培训教程3dsmax7中文版作者詹翔,王海英出版社人民邮电出版社经历目前市面上的飞行射击游戏还算火爆,随着智能手机的普及,人们越来越多的使用手机玩手机游戏,其中以休闲类游戏为代表,比如成绩火爆过的《愤怒的小鸟》,«flappybird》,《雷电3D》,《现代战争》等游戏都广受好评
1.2游戏规则本款太空大战游戏分为两种模式挑战模式和生存模式玩家可在游戏主界面进行选择,如下图太空大战其中挑战模式分为4个关卡,每个关卡的难度依次递增,玩家必须消灭一定数量的敌人,得到规定的分数才可以进入下一关每一关的敌人会有所不同,难度也依次增加最后一关为挑战终极BOSS消灭BOSS后即可通关下图分别为第二关和终极BOSS生存模式中没有关卡限制,以计分为主,随着玩家分数的增加,游戏难度会逐渐加大,以敌人数量增加和类型增多来表现,玩家每次得到一百分,自己生命值就会增加一,初始生命为10玩家生命耗尽则游戏结束,如下图
1.3主要研究内容在本次太空大战游戏设计中,我主要负责编码实现,精确碰撞技术的研究等内容第2章游戏开发工具和关键技术简介1开发工具本次游戏开发语言使用C#采用Unity3d
4.6游戏引擎开发代码编写使用VS2012模型制作采用3dMax
20122.2关键技术游戏中设计的关键技术主要有物体的精确碰撞检测,背景动画的循环播放精确碰撞检测物体的精确碰撞实现方法有很多,在这个游戏中使用的是制作模型来达到精确碰撞的目的首先在3dMax中制作出敌人的模型和一个同模型相接近的骨骼,并依附在模型中一起打包成FBX格式的模型,然后在Unity3d中直接导入该模型,就可以直接使用之前制作好的骨骼来做精确碰撞处理,如下图背景动画的循环播放实现背景的循环播放方法也很多,常见的比如直接使用2张可以前后对接的图片,当一张图片播放完成后直接在后面接入另一张图片,重复此过程,即可达到动画循环的目的在这个有些中,我直接使用的Unity3d中的动画系统来制作UV动湎,如下图•=SHierarchyAnimationsuimove:Sampk60•marsBadcgroud:MateriaAddCurveDop«Sh小Curves第3章游戏程序总体设计
3.1游戏总体流程:游戏结束首先玩家进入游戏主界面,进行选择,点击退出则直接退出游戏选择挑战模式则进入游戏,游戏失败可以选择继续或者返同主界面,选择生存模式则当声明值耗尽时显示玩家分数并显示回退按钮退回到主界面,选择游戏帮助,则进入帮助界面
3.2游戏类图:1敌人类图:游戏中有4种敌人如上图所示,其中最原始的敌人是Enemy类,其它3中敌人都继承于Enemy只是重写了移动方法和少量属性2玩家类图Player#m_targetPos:Vector3+m_inputMask:LayerMask+m_shootClip:AudioClip+m_audio:AudioSource+m_explosionFX:Transform+m_life:float+m_speed:float#m_transform:Transform+m_rocket:Transform-m_rockectRate:float-Start:void-MoveTo:void-Update:void-OnTriggerEnter:void玩家类中有MovwToO方法,该方法实现玩家追随鼠标移动的方法,在手机上即让玩家追随手指移动其中的OnTriggerEnter方法检测碰撞并作出相应的逻辑计算3子弹类Rocket-m_speed:float-m_liveTime:float-power:float#m_transform:Transform-Start:void-Update:void-OnTriggerEnterO voidAEnemyRocket-OnTriggerEnterO void子弹类分为玩家子弹和敌人子弹,其中敌人子弹继承于玩家子弹,重新了碰撞检测逻辑,由于Unity3d可直接在面板中设置脚本属性的值,因此每种敌人的子弹类不需要再重新写一个类,只需要依附EnemyRocket脚本后再重新设置值即可学生学习心得通过本次游戏开发,加深了我对游戏设计与实现的理解,增强了对理论知识的运用和理解,同时也发现了自己的很多不足之处,学到了自学到一些其他方面的知识也锻炼了团队协作能力同时要感谢技术好的同学和老师对我们帮助和指导学生(签名)杨鹤2015年07月04S诚信承诺本人郑重声明所呈交的课程报告是木人在指导教师指导下进行的研究工作及取得的研究成果据我所知,除了文中特别加以标注的地方外,论文中不包含其他人己经发表或撰写过的研究成果与我一同工作的同学对本文研究所做的贡献均已在报告中作了明确的说明并表示谢意学生(签名)杨鹤任课教师评语成绩评定任课教师(签名)年月日。