1、第1页 第2页12.1.1游戏背景概述游戏背景概述v此类游戏画面精美,操作简单,成为打发闲暇时间的不二之选此类游戏画面精美,操作简单,成为打发闲暇时间的不二之选。图12-1开心消消乐 图12-2 小鳄鱼洗澡 图12-3 割绳子2第3页12.1.2游戏功能简介游戏功能简介(1)运行游戏后,首先进入)运行游戏后,首先进入的是主菜单界面,如图的是主菜单界面,如图12-4所所示。这里是游戏的中转站,从示。这里是游戏的中转站,从这里可以通过单击不同的功能这里可以通过单击不同的功能按钮进入到不同的界面。按钮进入到不同的界面。图12-4主菜单界面 第4页12.1.2游戏功能简介游戏功能简介(2)点击主菜单界
2、面的关卡)点击主菜单界面的关卡选择按钮进入关卡选择界面,选择按钮进入关卡选择界面,如图如图12-5所示。关卡选择界面所示。关卡选择界面主要显示了本游戏中的六个关主要显示了本游戏中的六个关卡。其中除第一关外,其他关卡。其中除第一关外,其他关卡是上锁的,每通过一个关卡卡是上锁的,每通过一个关卡即可解锁下一关卡。点击屏幕即可解锁下一关卡。点击屏幕下方的返回按钮可以返回主菜下方的返回按钮可以返回主菜单界面。单界面。第5页12.1.2游戏功能简介游戏功能简介(3)点击主菜单界面的帮助)点击主菜单界面的帮助按钮进入帮助界面,如图按钮进入帮助界面,如图12-6所示。此界面显示本游戏的游所示。此界面显示本游戏
3、的游戏规则,点击右上角的关闭按戏规则,点击右上角的关闭按钮返回主菜单界面。点击第一钮返回主菜单界面。点击第一关按钮进入第一关游戏界面,关按钮进入第一关游戏界面,如图如图12-7所示。游戏界面左上所示。游戏界面左上角分别是背景音乐按钮和返回角分别是背景音乐按钮和返回主菜单按钮。主菜单按钮。第6页12.1.2游戏功能简介游戏功能简介(5)当小球滚出界面时显)当小球滚出界面时显示游戏失败界面,如图示游戏失败界面,如图12-8所示。点击界面下方的选所示。点击界面下方的选择关卡按钮可选择相应关择关卡按钮可选择相应关卡,点击重玩按钮可重玩卡,点击重玩按钮可重玩本关卡,点击主菜单按钮本关卡,点击主菜单按钮可
4、返回主菜单。当小球进可返回主菜单。当小球进入小洞后显示游戏通关界入小洞后显示游戏通关界面,如图面,如图12-9所示,点击所示,点击开始按钮即可开始下一关。开始按钮即可开始下一关。 图12-8 闯关失败界面 图12-9 闯关成功界面第7页12.2.1 游戏的策划游戏的策划游戏类型游戏类型运行目标平台运行目标平台目标受众目标受众操作方式操作方式呈现技术呈现技术第8页12.2.2 使用使用Unity3D开发游戏前的准备工作开发游戏前的准备工作主菜单界面所用到的背景图片和菜单项所需资源图片主菜单界面所用到的背景图片和菜单项所需资源图片游戏界面用到的背景图片和菜单项、精灵所需图片以游戏界面用到的背景图片
5、和菜单项、精灵所需图片以及帧动画所需图片操作方式及帧动画所需图片操作方式通关界面的图片资源通关界面的图片资源选择关卡界面的图片资源选择关卡界面的图片资源游戏中所用到得各种音效游戏中所用到得各种音效3D模型是用模型是用3d Max生成的生成的FBX文件导入文件导入第9页12.3.1 游戏中各场景的简要介绍游戏中各场景的简要介绍主菜单场景主菜单场景:转向各个场景的中心场景。在该场景中可转向各个场景的中心场景。在该场景中可以通过单击按钮进入其它界面,如关卡界面,选关界以通过单击按钮进入其它界面,如关卡界面,选关界面,得分界面,帮助界面、退出界面等面,得分界面,帮助界面、退出界面等图12-10 主菜单
6、架构图第10页12.3.1 游戏中各场景的简要介绍游戏中各场景的简要介绍输赢场景输赢场景:用于在每一关小球进洞或者没有进洞之后显示出来用于在每一关小球进洞或者没有进洞之后显示出来帮助场景帮助场景:帮助场景的作用是使玩家更容易懂得游戏的玩法帮助场景的作用是使玩家更容易懂得游戏的玩法选关场景选关场景:在游戏关卡过关后逐渐解锁游戏下一关在游戏关卡过关后逐渐解锁游戏下一关关卡场景关卡场景:本游戏一共有六个关卡即游戏场景有六个,每个场本游戏一共有六个关卡即游戏场景有六个,每个场景包括景包括UI控制层和三维立体场景,这是游戏开发的重点。控制层和三维立体场景,这是游戏开发的重点。第11页12.3.2游戏的架
7、构简介游戏的架构简介(1)运行本游戏,首先会进入到主菜单场景)运行本游戏,首先会进入到主菜单场景“BallGame_caidan”。此界面是用此界面是用UGUI编写而成,编写而成,UGUI控件与控件之间可以进行嵌套,父控控件与控件之间可以进行嵌套,父控件可以包含子控件,子控件又可以进一步包含子控件。整个场景布局格件可以包含子控件,子控件又可以进一步包含子控件。整个场景布局格式为:在一块画布上放了五个图片按钮(分别是第一关、总得分、选择式为:在一块画布上放了五个图片按钮(分别是第一关、总得分、选择关卡、帮助以及退出)纵向排列。关卡、帮助以及退出)纵向排列。 (2)进入主菜单后如若点击五个图片按钮
8、则会触发挂载在按钮上的脚)进入主菜单后如若点击五个图片按钮则会触发挂载在按钮上的脚本里的方法,如本里的方法,如“第一关第一关”按钮的按钮的GuanOnClick方法、方法、“总得分总得分”按按钮的钮的DFOnClick方法、方法、“选择关卡选择关卡”按钮的按钮的XGOnClick方法、方法、“帮助帮助”按钮的按钮的BZOnClick方法以及方法以及“退出退出”按钮的按钮的TCOnClick方法。方法。第12页12.3.2游戏的架构简介游戏的架构简介(3)当第一次进入此游戏关卡时,音乐是默认开启的。如果玩家需要)当第一次进入此游戏关卡时,音乐是默认开启的。如果玩家需要关闭其中的某项,可以点击左上
9、角的小喇叭图标关闭音乐,点击设置图关闭其中的某项,可以点击左上角的小喇叭图标关闭音乐,点击设置图标则会返回主菜单。标则会返回主菜单。(4)点击工具栏道具会触发挂载在道具上的方法,如控制游戏关卡)点击工具栏道具会触发挂载在道具上的方法,如控制游戏关卡UI层物体选中和转向的层物体选中和转向的cube类,挂载在摄像机上控制实例化以及删除物类,挂载在摄像机上控制实例化以及删除物体的体的RayText类,挂载在球物体上的控制小球运动速度以及转向问题的类,挂载在球物体上的控制小球运动速度以及转向问题的control_two类等。类等。(5)不管最终小球进不进洞都会各自触发两个场景即输赢界面,这两)不管最终
10、小球进不进洞都会各自触发两个场景即输赢界面,这两个场景加载时会触发挂载在物体上的脚本文件来实现开始时的一段动画,个场景加载时会触发挂载在物体上的脚本文件来实现开始时的一段动画,相关图片按钮也会挂载脚本来触发相应操作相关图片按钮也会挂载脚本来触发相应操作.第13页12.4.1游戏主菜单场景游戏主菜单场景(1)首先新建项目,然后新建场景并设置环境光。新建一个)首先新建项目,然后新建场景并设置环境光。新建一个Canvas,具体操作为点击左侧,具体操作为点击左侧“Hierarchy”面板上方面板上方“Create”“UI”“Canvas”,如图,如图12-12所示。即可看到在窗所示。即可看到在窗口中创
11、建了一个画布如图口中创建了一个画布如图12-13所示。所示。 图12-12创建画布 图12-13“Canvas”面板设置第14页12.4.1游戏主菜单场景游戏主菜单场景(2)然后创建一个)然后创建一个Image来作为主菜单背景图片,具体操作为选中来作为主菜单背景图片,具体操作为选中Canvas,在右击的菜单中,在右击的菜单中“UI” “Image”,将,将Image命名为命名为“kuangjia”,如图,如图12-14所示。之后创建出五个条状所示。之后创建出五个条状Image作为滑动图片的目的坐标,如图作为滑动图片的目的坐标,如图12-15所示。所示。 图12-14创建Image组件 图12-
12、15创建场景中各个板块第15页12.4.1游戏主菜单场景游戏主菜单场景(3)之后创建五个)之后创建五个Button,分别对应,分别对应“第一关第一关”、“总得分总得分”、“关卡选择关卡选择”、“帮助帮助”和和“退出退出”按钮,如图按钮,如图12-16所示。其中,帮助界面是先创建一个所示。其中,帮助界面是先创建一个Panel,将,将Panel命名为命名为“ScrollView”,如图,如图12-17所示。所示。图12-16创建Button 图12-17“ScrollView”面板设置第16页12.4.1游戏主菜单场景游戏主菜单场景(4)创建一个)创建一个“Grid”,具体操作为右击,具体操作为右
13、击“ScrollView” “Create Empty”,将其命名,将其命名为为“Grid”。在。在“Grid”下创建五个下创建五个Image,作为帮助图片,如图,作为帮助图片,如图12-18所示。将所示。将“bz01.png”等图片拖拽到等图片拖拽到“Image”组件组件“Source Image”上,如图上,如图12-19所示。所示。图12-18帮助场景 图12-19“help_one”面板设置第17页12.4.1游戏主菜单场景游戏主菜单场景(5)新建一个)新建一个C#脚本,具体操作为右键点击脚本,具体操作为右键点击“Create” “C# Script”,将其命名为,将其命名为“Scro
14、llView.cs”。本脚本主要是图片滑动并。本脚本主要是图片滑动并始终保持某一图片正对窗口效果的实现,脚本代码始终保持某一图片正对窗口效果的实现,脚本代码见课本见课本。第18页12.4.2游戏游戏UI层控制脚本开发层控制脚本开发(1)由于)由于UI层的搭建和上一小节过程相似在此不再赘述,层的搭建和上一小节过程相似在此不再赘述,UI层游戏工具是多个层游戏工具是多个3D物体和一张物体和一张方向图片构成,获取和控制方向图片构成,获取和控制3D物体需要用到物体需要用到3D拾取技术,通过摄像机发出射线与拾取技术,通过摄像机发出射线与3D物体碰撞物体碰撞获取物体引用,具体代码如下所示。获取物体引用,具体
15、代码如下所示。1 using UnityEngine; /引用引用Unity引擎命名空间引擎命名空间2 using System.Collections; /引用泛型集合命名空间引用泛型集合命名空间3 using UnityEngine.UI; /引用引用Unity引擎引擎UI类类4 public class cube : MonoBehaviour /Unity每个脚本都继承自每个脚本都继承自MonoBehaviour类类5 public Camera camera; /3D拾取使用的摄像机拾取使用的摄像机6 /此处省略了部分成员变量得声明,有需要的读者可以参考光盘中的源代码。此处省略了部分
16、成员变量得声明,有需要的读者可以参考光盘中的源代码。7 void Update() /Unity3D中的帧方法中的帧方法8 if (Input.touchCount = 1) /单点触控单点触控9 Touch t = Input.GetTouch(0); /获取触控输入引用获取触控输入引用第19页12.4.2游戏游戏UI层控制脚本开发层控制脚本开发10 if (t.phase = TouchPhase.Began) /开始触控开始触控11 Ray ray = camera.ScreenPointToRay(Input.GetTouch(0).position); /从触控点到摄像机构建射线从触
17、控点到摄像机构建射线12 RaycastHit hitInfo; /获取光线投射碰撞物体信息的引用获取光线投射碰撞物体信息的引用13 if (Physics.Raycast(ray, out hitInfo) /当射线碰撞到物体时获取物体信息当射线碰撞到物体时获取物体信息14 GameObject gameobject = hitInfo.collider.gameObject; /得到碰撞物体的引用得到碰撞物体的引用15 if (hitInfo.collider.gameObject.name = Cube) /碰撞物体为正立方体碰撞物体为正立方体16 RayTest.pickCubeTri
18、an = 1; /置标志位标志实例化立方体置标志位标志实例化立方体17 if (hitInfo.collider.gameObject.name = halfCube) /碰撞物体为半个立方体碰撞物体为半个立方体18 RayTest.pickCubeTrian = 3; /置标志位标志实例化半个立方体置标志位标志实例化半个立方体19 if (hitInfo.collider.gameObject.name = Image_dir) /碰撞体为方向图片碰撞体为方向图片20 /由于方向图片转换方法过于复杂,将在下面步骤中单独讲解此处暂时省略。由于方向图片转换方法过于复杂,将在下面步骤中单独讲解此处
19、暂时省略。21 RayTest.pickCubeTrian = 4; /置标志位实现场景物体贴纹理置标志位实现场景物体贴纹理22 if (hitInfo.collider.gameObject.name = half_angle) /碰撞体为三棱柱碰撞体为三棱柱23 RayTest.pickCubeTrian = 2; /置标志位标志实例化三棱柱置标志位标志实例化三棱柱24 第20页12.4.2游戏游戏UI层控制脚本开发层控制脚本开发(2)通过)通过3D拾取得到射线碰撞的物体引用后对物体置标志位来标识拾取得到射线碰撞的物体引用后对物体置标志位来标识在场景中实例化该物体,对于方向图片和三棱柱还涉
20、及到物体的旋转在场景中实例化该物体,对于方向图片和三棱柱还涉及到物体的旋转方向问题,当第一次选中这两个物体时再次点击就会旋转方向,而后方向问题,当第一次选中这两个物体时再次点击就会旋转方向,而后在场景中实例化不同方向的物体,具体代码在场景中实例化不同方向的物体,具体代码见课本见课本。第21页12.4.3游戏物体运动控制脚本开发游戏物体运动控制脚本开发(1)在新建项目场景中设置环境光和摄像机,然后创建场景中的三维物体其中包括场景主体)在新建项目场景中设置环境光和摄像机,然后创建场景中的三维物体其中包括场景主体地面和墙壁即由立方体构成、场景中的球体等,具体操作为点击左侧地面和墙壁即由立方体构成、场
21、景中的球体等,具体操作为点击左侧“Hierarchy”面板上方面板上方“Create”“3D Object”“Cube”,如图,如图12-20所示。即可看到在场景中创建了一个立所示。即可看到在场景中创建了一个立方体如图方体如图12-21所示。所示。 图12-20 创建立方体 图12-21 物体设置第22页12.4.3游戏物体运动控制脚本开发游戏物体运动控制脚本开发(2)然后将做出的物体调整位置,组成场景所需要的样式,如图)然后将做出的物体调整位置,组成场景所需要的样式,如图12-22,注意要使相关物体,注意要使相关物体具有层次结构符合父子关系,方便在脚本中操作引用。使物体具有层次结构可以通过拖
22、拽的方具有层次结构符合父子关系,方便在脚本中操作引用。使物体具有层次结构可以通过拖拽的方式将子物体拖拽到父物体下面,如图式将子物体拖拽到父物体下面,如图12-23。 图12-22 基本场景模型图 图12-23 模型关系图第23页12.4.3游戏物体运动控制脚本开发游戏物体运动控制脚本开发(3)下面介绍球滚动过程中遇到转向标志之后小球将会改变原有运动方向,朝着标志方向继)下面介绍球滚动过程中遇到转向标志之后小球将会改变原有运动方向,朝着标志方向继续运动直到小球进洞或者滚出屏幕为止,具体代码如下所示。续运动直到小球进洞或者滚出屏幕为止,具体代码如下所示。1 void OnCollisionStay
23、(Collision other) /物体发生碰撞中调用该方法物体发生碰撞中调用该方法2 if (other.transform.name.Equals(array_nameAndflag0) | /判断碰撞物体名字与列表判断碰撞物体名字与列表中存储的是否相同中存储的是否相同3 other.transform.name.Equals(array_nameAndflag2) | 4 other.transform.name.Equals(array_nameAndflag4) | 5 other.transform.name.Equals(array_nameAndflag6) | 6 othe
24、r.transform.name.Equals(array_nameAndflag8)7 foreach (ContactPoint contact in other.contacts) /遍历碰撞接触点列表遍历碰撞接触点列表8 if (contact.point.z = other.transform.position.z - 0.2 & /判断碰撞点判断碰撞点z坐标是否坐标是否落在该范围落在该范围9 contact.point.z = other.transform.position.x - 0.1 & /判断碰撞点判断碰撞点x坐标是否坐标是否落在该范围落在该范围第24页12.4.3游戏物
25、体运动控制脚本开发游戏物体运动控制脚本开发11 contact.point.x = other.transform.position.x + 0.1)12 if (array_nameAndflag0.Equals(other.transform.name)/判断与列表中名字是否相同判断与列表中名字是否相同13 if (array_nameAndflag1.Equals(up)/获取获取“向上向上”方向方向14 this.GetComponent().velocity = /对小球进行转向对小球进行转向15 new Vector3(0, 0, this.GetComponent().veloc
26、ity.magnitude * 1.25f);16 else if (array_nameAndflag1.Equals(down)/获取获取“向下向下”方向方向17 this.GetComponent().velocity = /对小球进行转向对小球进行转向18 new Vector3(0, 0, -this.GetComponent().velocity.magnitude);19 else if (array_nameAndflag1.Equals(right) /获取获取“向右向右”方向方向20 this.GetComponent().velocity =/对小球进行转向对小球进行转向
27、21 new Vector3(this.GetComponent().velocity.magnitude, 0, 0);22 else if (array_nameAndflag1.Equals(left) /获取获取“向左向左”方向方向23 this.GetComponent().velocity = /对小球进行转向对小球进行转向24 new Vector3(-this.GetComponent().velocity.magnitude, 0, 0);第25页12.4.4游戏场景游戏场景3D拾取和实例化脚本开发拾取和实例化脚本开发(1)首先详细介绍脚本中)首先详细介绍脚本中update方
28、法所要实现的具体功能和利用方法所要实现的具体功能和利用3D拾取功能实现的设计架构,主要作用是在工具栏选中相应工具后在三拾取功能实现的设计架构,主要作用是在工具栏选中相应工具后在三维场景中实例化预制体,在此过程中利用维场景中实例化预制体,在此过程中利用3D拾取进行坐标定位,具体拾取进行坐标定位,具体代码如下所示。代码如下所示。(2)介绍如何在)介绍如何在3D场景中删除已经实例化的物体和如何删除在场景场景中删除已经实例化的物体和如何删除在场景物体上方向纹理贴图以及恢复道具栏的图标、数量和物体等,具体代物体上方向纹理贴图以及恢复道具栏的图标、数量和物体等,具体代码如下所示。码如下所示。第26页12.
29、4.5输赢场景开发输赢场景开发(1)首先新建场景,然后新建场景并设置环境光。新建一个)首先新建场景,然后新建场景并设置环境光。新建一个Canvas,具体操作为点击左侧,具体操作为点击左侧“Hierarchy”面板上方面板上方“Create”“UI”“Canvas”,如图,如图12-24所示。即可看到在窗所示。即可看到在窗口中创建了一个画布如图口中创建了一个画布如图12-25所示。所示。 图12-24创建画布 图12-25“Canvas”面板设置第27页12.4.5输赢场景开发输赢场景开发(2)然后创建一个)然后创建一个Image来作为主菜单背景图片,具体操作为选中来作为主菜单背景图片,具体操作
30、为选中Canvas,在右击的菜单中,在右击的菜单中“UI” “Image”,将,将Image命名为命名为“kuangjia”,如图,如图12-26所示。之后创建出六个条状所示。之后创建出六个条状Image作为滑动动画图片,如图作为滑动动画图片,如图12-27所示。所示。 图12-26创建Image组件 图12-27创建场景中各个板块第28页12.4.5输赢场景开发输赢场景开发(4)下面展示一下效果图,在加载场景后图片按钮会逐渐滑动到设定)下面展示一下效果图,在加载场景后图片按钮会逐渐滑动到设定位置,按钮图片也会有渐入渐变效果,这就是不断更改其透明度的结位置,按钮图片也会有渐入渐变效果,这就是不断更改其透明度的结果,下面果,下面3幅图就是动画过程,如下图幅图就是动画过程,如下图12-28、图、图12-29和图和图12-30所示。所示。 图12.28 动画效果图1 图12.29动画效果图2 图12.30动画效果图3第29页游戏界面的改进。游戏界面的改进。游戏性能的进一步优化。游戏性能的进一步优化。优化细节处理。优化细节处理。增加游戏体验增加游戏体验