




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1页课程设计—探险飞机第2页12.1背景以及功能概述12.1.1游戏背景概述此类游戏画面精美,操作简单,成为打发闲暇时间的不二之选。
图12-1跳舞的线图12-2钢琴块2 图12-3开心消消乐
第3页12.1背景以及功能概述12.1.2游戏功能简介(1)运行游戏后,首先显示的是本游戏的主菜单界面,如图12-4所示。在主菜单界面中有本游戏的中文标识“探险飞机”,下面是“开始游戏”按钮,在本界面的右上角是音效按钮,初始默认开启音效。单击音效按钮,即可控制游戏音效的开启或关闭。
图12-4主菜单界面
第4页12.1背景以及功能概述12.1.2游戏功能简介(2)单击主菜单界面的“开始游戏”按钮进入游戏场景,如图12-5所示。在游戏中点击屏幕的左右半区,控制飞机左右旋转。每通过一个障碍物,得分加1,如图12-6所示。飞机没有通过障碍,与障碍物发生碰撞,则游戏失败,如图12-7所示,单击“重新开始“按钮即可重新开始游戏。
图12-6游戏界面图12-7游戏失败界面第5页12.2游戏的策划及准备工作12.2.1游戏的策划游戏类型运行目标平台目标受众操作方式呈现技术
第6页12.2游戏的策划及准备工作12.2.2使用Unity3D开发游戏前的准备工作本游戏中所用到的背景图片、天空盒纹理图和菜单项所需资源图片本游戏中所有音效游戏中按钮的图片资源记分板的数字图片资源3D模型是用3dMax生成的FBX文件导入
第7页12.3游戏的架构12.3.1游戏中各场景的简要介绍主菜单场景:游戏中的主场景主要是用来显示游戏的标题和开始按钮,点击开始游戏界面即可进入关卡。
图12-10主菜单架构图第8页12.3游戏的架构12.3.1游戏中各场景的简要介绍关卡场景:本场景是该游戏最重要的场景,这个场景的游戏一些对象被附加了相应的脚本,比如主摄像机、飞机、障碍物等,在游戏的关卡界面,关卡是循环生成的、点击屏幕的两侧,可以控制飞机的旋转。同时屏幕上方还能显示游戏的得分,“重新开始”按钮还能控制游戏重新开始等。
第9页12.3游戏的架构12.3.2游戏的架构简介(1)运行本游戏,首先会进入到主菜单场景“MainMenu”。此界面是用UGUI编写而成,UGUI控件与控件之间可以进行嵌套,。整个场景背景为一个天空盒,脚本控制主摄像机旋转,从而实现动态效果,然后在一块画布上放置按钮图片(开始游戏,开启音效或关闭音效)。(2)当第一次进入此游戏时,音效是默认开启的。如果玩家需要关闭游戏中的音效,可以单击右上角的音效控制按钮。如若单击按钮则会触发挂载在按钮上的脚本里的方法,如“开启音效”按钮的KQOnClick方法、“关闭音效”按钮的GBOnClick方法。
第10页12.3游戏的架构12.3.2游戏的架构简介(3)单击主菜单场景中的“开始游戏”按钮进入游戏界面后,将会触发挂载在摄像机上控制障碍物移动的ObstacleMove类、控制游戏重新开始的GameControl类、挂载在障碍物上控制障碍物随机旋转的ObstacleControl类以及挂载在记分板上改变游戏得分的ScoreBoard类。(4)飞机在飞行过程中需要改变角度才能安全的穿越障碍物,玩家在点击屏幕时将会触发挂载在飞机上控制它旋转、游戏对象碰撞检测、成功穿越障碍物得分以及发生碰撞后重新开始的AirPlaneControl类。
第11页12.4游戏场景12.4.1游戏主菜单场景(1)首先新建项目,然后新建场景并设置环境光。接着新建一个Canvas,具体操作为单击左侧“Hierarchy”面板上方Create→UI→Canvas,如图12-9所示。即可看到在窗口中创建了一个画布,画布相关信息如图12-10所示。
图12-9创建画布 图12-10“Canvas”面板设置第12页12.4游戏场景12.4.1游戏主菜单场景(2)接着创建两个Button,分别对应““开启音效”和“关闭音效”按钮。如图12-11所示。然后将预先放置在Textures文件夹下的“off.png”图片和“on.png”图片拖曳到Button的“Image”组件“SourceImage”上,最后分别重命名为“on”、““off”,如图12-12所示。
图12-11创建Button 图12-12“on”面板设置第13页12.4游戏场景12.4.1游戏主菜单场景(3)之后创建一个天空盒来作为主菜单背景,具体操作为新建一个名为“Material”的文件夹,然后选中文件夹单击鼠标右键,选择Create→Material,如图12-13所示,并将其命名为“Skybox”。在“Material”文件夹中即可看到刚刚创建的材质。
图12-13创建Material 第14页12.4游戏场景12.4.1游戏主菜单场景(4)接着选中刚刚创建的“Skybox”材质,在属性查看器中修改去渲染方式为Skybox模式,具体的修改步骤为单击Shader→Skybox→6Sided。修改完成后,我们将准备好的天空盒纹理图拖入到相对应的位置,如图12-14所示。
图12-14天空盒属性 第15页12.4游戏场景12.4.1游戏主菜单场景(5)制作好天空盒后,我们需要做的是在Unity集成开发环境中对其进行相关的设置并将其显示出来。选中场景中的摄像机,依次单击菜单栏中Component→Rendering→Skybox为其添加天空盒组件,如图12-16所示。并在将之做好的天空盒拖到Skybox处,如图12-17所示。
图12-15添加天空盒1图12-16添加天空盒2第16页12.4游戏场景12.4.1游戏主菜单场景(6)新建一个C#脚本,具体操作为单击鼠标右键,选择Create→C#Script,将其命名为“Welcome.cs”。本脚本主要是控制天空盒旋转,界面跳转和音效的开启或关闭,脚本代码如下。1 usingSystem.Collections;2 usingSystem.Collections.Generic;3 usingUnityEngine;4 usingUnityEngine.SceneManagement; //导入系统包5 publicclassWelcome:MonoBehaviour{6 publicTexture2DTitle; //游戏名称图片7 publicTexture2DStartGame; //开始游戏按钮图片8 publicGUIStyleMystyle; //自定义Style9 publicGameObjectOn; //关闭音效按钮10 publicGameObjectOff; //开启关闭按钮11 publicfloatrotateSpeed=1f; //摄像机旋转速度
第17页12.4游戏场景12.4.1游戏主菜单场景12 voidUpdate(){13 transform.Rotate(newVector3(0,rotateSpeed*Time.deltaTime,0));//旋转14 }15 privatevoidOnGUI(){16 floatt_Heigh=Screen.height*0.30f; //定义标题图片显示宽度17 floatt_width=Screen.width*0.45f; //定义标题图片显示高度18 GUI.DrawTexture(newRect( //绘制标题19 Screen.width*0.5f-t_width/2, //设置图片初始位置20 Screen.height*0.4f-t_Heigh/2,21 t_width,t_Heigh),Title); //设置图片尺寸22 floatb_width=Screen.width*0.5f; //定义开始游戏按钮宽度23 floatb_heigh=Screen.height*0.2f; //定义开始游戏按钮高度24 if(GUI.Button(newRect( //判断是否点击25 Screen.width*0.6f-b_width/2, //绘制开始游戏按钮26 Screen.height*0.85f-b_heigh/2,
12.4游戏场景12.4.1游戏主菜单场景27 b_width,b_heigh),StartGame,Mystyle)){28 SceneManager.LoadScene("PlaneGame"); //加载游戏场景29 }}30 publicvoidKQOnClick(){ //开启音效方法31 On.SetActive(true); //显示On32 Off.SetActive(false); //隐藏Off33 AirPlaneControl.Soundflag=true; //设置声音标志位为true34 }35 publicvoidGBOnClick(){ //关闭音效方法36 On.SetActive(false); //隐藏ON37 Off.SetActive(true); //开启Off38 AirPlaneControl.Soundflag=false; //设置声音标志位为false39 }}第18页12.4游戏场景12.4.1游戏主菜单场景(7)编辑完成的脚本保存后,将其挂载到主摄像机和两个按钮上。打开主摄像机的属性查看器,我们需要将准备好的纹理图拖到对应位置,如图12-18所示。然后打开按钮属性查看器,将两个按钮拖到对应位置,并设置对应的点击事件,如图12-19所示。第19页图12-17主摄像机属性查看器
图12-18按钮属性查看器第20页12.4游戏场景12.4.2游戏障碍物的创建与移动脚本开发
(1)首先需要介绍游戏中障碍物的创建。一组障碍物由两个相同的模型和中间的加分点Point,如图12-20所示,并且每个可以触发功能的游戏对象都添加了碰撞体。四组不同不同形状的障碍物构成了一整组障碍物,整体效果如图12-21所示。
图12-19障碍物结构图12-20障碍物效果12.4游戏场景12.4.2游戏障碍物的创建与移动脚本开发(2)前面介绍了障碍物组合的制作,下面将介绍障碍物相关脚本ObstacleMove.cs的开发。此脚本控制游戏场景中障碍物的循环生成,以及使飞机成功通过的障碍物隐藏消失。该脚本挂载到本场景的主摄像机上,并且需要将障碍物拖到对应位置。1 usingSystem.Collections;2 usingSystem.Collections.Generic;3 usingUnityEngine;4 publicclassObstacleMove:MonoBehaviour{5 publicstaticfloatMoveSpeed; //定义障碍物移动速度6 publicVector3StartPosition; //障碍物初始位置7 publicGameObject[]Obstacle; //存放障碍物数组8 privateVector3[]LoadPosition=newVector3[2]; //存放障碍物初始速度9 voidStart(){第21页12.4游戏场景12.4.2游戏障碍物的创建与移动脚本开发10 MoveSpeed=15; //定义障碍物移动速度11 Obstacle[0].GetComponent<ObstacleControl>().ChangeObstacle();//改变第一组障碍物的角度12 Obstacle[1].GetComponent<ObstacleControl>().ChangeObstacle();//改变第二组障碍物的角度13 StartPosition=Obstacle[1].transform.position; //保存第二组障碍物的位置14 for(inti=0;i<LoadPosition.Length;i++){ //遍历所有障碍物数组15 LoadPosition[i]=Obstacle[i].gameObject.transform.position; //储存初始位置,用于恢复16 }}17 voidUpdate(){18 for(inti=0;i<Obstacle.Length;i++){ //遍历所有障碍物19 Obstacle[i].transform.Translate(newVector3(0,0,-Time.deltaTime*MoveSpeed)); 20 if(Obstacle[i].transform.position.z<=-100){ //判断障碍物是否需要移动21 Obstacle[i].GetComponent<ObstacleControl>().ChangeObstacle();第22页12.4游戏场景12.4.2游戏障碍物的创建与移动脚本开发22 Obstacle[i].transform.position=StartPosition; //改变障碍物位置23 MoveSpeed=MoveSpeed+AirPlaneControl.score/4; //改变障碍物速度24 }}}25 publicvoidresetObstacle(){ //恢复位置方法26 for(inti=0;i<LoadPosition.Length;i++){ //遍历障碍物数组27 Obstacle[i].gameObject.transform.position=LoadPosition[i];//得到初始数据28 }29 Obstacle[0].GetComponent<ObstacleControl>().ChangeObstacle();//改变障碍物角度30 StartPosition=Obstacle[1].transform.position; //保存第二组障碍物的位置31 }}第23页12.4游戏场景12.4.2游戏障碍物的创建与移动脚本开发(3)上面介绍了用于控制障碍物旋转与移动的脚本,下面将介绍用于控制障碍物显示与隐藏,以及随机改变障碍物的旋转角度的脚本。该脚本挂载到每组Obstacle对象上。1 usingSystem.Collections;2 usingSystem.Collections.Generic;3 usingUnityEngine;4 publicclassObstacleControl:MonoBehaviour{5 publicGameObject[]Obstacle; //存放障碍物数组6 publicfloatleft=45f,right=-45f; //障碍物旋转角度范围7 privatevoidStart(){8 Random.seed=System.Environment.TickCount;//随机数的种子9 }第24页12.4游戏场景12.4.2游戏障碍物的创建与移动脚本开发10 publicvoidChangeObstacle(){ //障碍物变化方法11 floatRandomVal; //声明一个随机数12 for(inti=0;i<Obstacle.Length;i++){ //遍历障碍物数组13 Obstacle[i].SetActive(true); //显示障碍物对象14 RandomVal=Random.value; //随机数赋值15 floatObRota_z=Mathf.Lerp(left,right,RandomVal);//生成障碍物旋转参数16 Obstacle[i].transform.Rotate(0,0,ObRota_z);//使每个障碍物旋转17 }}18 publicvoidhidden(){ //隐藏障碍物方法19 for(inti=0;i<Obstacle.Length;i++){ //遍历障碍物数组20 Obstacle[i].SetActive(false); //隐藏障碍物21 }}}第25页第26页12.4游戏场景12.4.3游戏物体的创建和运动控制脚本开发(1)首先导入放置在“Model”文件夹下的的飞机模型,打开文件夹选中模型后拖到游戏场景中,并调整其大小,位置,角度等参数,如图12-21所示。然后为飞机游戏对象添加刚体与碰撞体,为后续进行碰撞检测做准备,相关参数如图12-22所示。
图12-21游戏对象相关参数1图12-22游戏对象相关参数2第27页12.4游戏场景12.4.3游戏物体的创建和运动控制脚本开发(2)前面完成了对游戏对象相关参数的调整设置,接下来讲介绍挂载在游戏对象上的AirPlaneControl.cs脚本。该脚本主要包括通过触摸屏幕的不同区域实现对飞机的左右旋转,以及飞机触碰到游戏场景中的碰撞体后触发的相关事件和相对应的音效等。具体开发过程如下。(3)脚本开发完毕后,将其挂载到飞机上后。还需要将音效文件和粒子系统拖曳到AirPlaneControl.cs脚本组件对应的变量处。AirPlaneControl.cs脚本组件如图12-23所示。
图12-23脚本组件第28页12.4游戏场景12.4.3游戏物体的创建和运动控制脚本开发(4)接下来介绍飞机与障碍物碰撞时显示的粒子系统。好的粒子系统可以极大的提高游戏的视觉体验,在游戏的日常开发中也是必不可少的。由于前面的章节已经介绍过粒子系统的相关开发,所以此处只介绍两个粒子系统的重要参数。如图12-24、图12-25所示。
图12-24火焰粒子系统参数图12-25爆炸粒子系统参数第29页12.4游戏场景12.4.4游戏场景主摄像机脚本开发11 contact.point.x<=other.transform.position.x+0.1)){12 if(array_nameAndflag[0].Equals()){//判断与列表中名字是否相同13 if(array_nameAndflag[1].Equals("up")){ //获取“向上”方向14 this.GetComponent<Rigidbody>().velocity= //对小球进行转向15 newVector3(0,0,this.GetComponent<Rigidbody>().velocity.magnitude*1.25f);16 }elseif(array_nameAndflag[1].Equals("down")){ //获取“向下”方向17 this.GetComponent<Rigidbody>().velocity= //对小球进行转向18 newVector3(0,0,-this.GetComponent<Rigidbody>().velocity.magnitude);19 }elseif(array_nameAndflag[1].Equals("right")){//获取“向右”方向20 this.GetComponent<Rigidbody>().velocity= //对小球进行转向21 newVector3(this.GetComponent<Rigidbody>().velocity.magnitude,0,0);22 }elseif(array_nameAndflag[1].Equals("left")){//获取“向左”方向23 this.GetComponent<Rigidbody>().velocity= `//对小球进行转向24 newVector3(-this.GetComponent<Rigidbody>().velocity.magnitude,0,0);}}
第30页12.4游戏场景12.4.4游戏场景主摄像机脚本开发(1)首先将主摄像机的ProJection设置为“Orthographic”,即设置主摄像机的投影方式为正交投影,并为摄像机添加天空盒,设置为黑色背景,具体操作请参考主菜单界面的摄像机设置。(2)前面介绍完摄像机相关参数的设置。接下来将详细介绍游戏控制脚本“GameControl.cs”的开发,新建C#脚本,将其重名为为GameControl,挂载到主摄像机上,然后双击脚本进入脚本编辑器,开始脚本的编写,具体代码如下所示。1 usingSystem.Collections;2 usingSystem.Collections.Generic;3 usingUnityEngine;4 publicclassGameControl:MonoBehaviour{5 publicboolisOver=false; //游戏结束标志位
12.4游戏场景12.4.4游戏场景主摄像机脚本开发6 publicGameObjectAirPlane; //飞机对象7 publicGameObjectScoreboard; //计分板对象8 publicGameObjectButton_reset; //重新开始按钮9 voidUpdate(){10 isOver=AirPlane.GetComponent<AirPlaneControl>().isOver;//获得结束标志位11 if(isOver){ //如果游戏结束12 Scoreboard.SetActive(false); //隐藏计分板13 Button_reset.SetActive(true); //显示重新开始按钮14 }else{15 Scoreboard.SetActive(true); //显示计分板16 Button_reset.SetActive(false); //隐藏重新开始按钮17 }}18 publicvoidreset(){//游戏重置方法19 isOver=false;//将结束标志位置为否20 AirPlane.GetComponent<AirPlaneControl>().resetAirPlane();//飞机上的重置方法21 this.gameObject.GetComponent<ObstacleMove>().resetObstacle();//障碍物重置方法22 }}第31页第32页12.4游戏场景12.4.5游戏计分板的创建和脚本开发(1)首先需要新建一个Canvas,前面已经介绍过创建过程,故此处省略创建过程。然后在Canvas的下层创建一个空对象并将其重命名为“ScoreBoard”,接着在ScoreBoard的下层创建两个Image用于显示数字,将其重命名为“Num1”和“Num2”,整体效果如图12-26所示。
图12-26计分板整体结构
12.4游戏场景12.4.5游戏计分板的创建和脚本开发(2)前面介绍完了计分板的创建,下面将介绍计分板的相关脚本ScoreBoard.cs的开发编写流程。脚本的创建方法与之前脚本创建方法相同,过不再赘述。该脚本的功能为实时获取玩家得分后,改变计分板对象的贴图为对应的数字。具体代码如下所示。1 usingSystem.Collections;2 usingSystem.Collections.Generic;3 usingUnityEngine;4 usingUnityEngine.UI;5 publicclassScoreBoard:MonoBehaviour{6 publicGameObjectNumSprite1; //十位数字贴图7 publicGameObjectNumSprite2; //个位数字贴图8 publicSprite[]Num; //数字贴图9 voidUpdate(){10 drawScore(AirPlaneControl.score); //调用绘制得分方法11 }第33页12.4游戏场景12 voiddrawScore(intnum){ //绘制计分板方法13 intnum1; //声明十位数字14 intnum2; //声明个位数字15 if(num>=100){ //得分大于等于100时,默认显示9916 num1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 强化大数据分析与风险预测模型的应用
- 小区文化设施与社区服务中心建设
- 实施小区无障碍设施全面改造
- 血沉试题及答案
- 平台生态系统的合作与共赢模式
- 安徽省社区考试题库及答案
- 水力学考试试题及答案
- 精准扶贫之考试题及答案
- 汤菜制作技艺试题及答案
- 现象认知面试题例子及答案
- 2024北森图形推理题
- 2025年全国国家版图知识竞赛赛(附答案)
- 2025年一年级语文下册期末考试检测题苏教版
- 游泳池水质检测培训
- 国家级突发中毒事件卫生应急处置队建设规范
- 2025年-江苏省建筑安全员B证考试题库及答案
- 升降车高空作业施工方案
- 婚内单身协议书范本
- 农艺师笔试重要试题及答案
- 新疆维吾尔自治区2024年普通高校招生单列类(选考外语)本科二批次投档情况 (理工)
- 2025年广西卫生健康系统事业单位招聘(医学检验)精练题库-附答案
评论
0/150
提交评论