创建工程Koala和空的主场景main,设置如下:
游戏入口与游戏初始化
此脚本定义了名字空间,用于记录全局数据。游戏入口中,记录了game的实例。并将帧率限定为60帧(默认在手机下为30帧),这句代码也可以不用写,我们可以在Project/Settings中设置,如下图:
四、玩家分数管理
Me类维护了两个数据:score(当前玩家的分数)、best(玩家的历史最高分)
实例化Me类
五、开始界面
5.1背景界面
背景界面由蓝天、白云、山峰及树组成。
蓝天背景:首先在引擎编辑器的Hierarchy面板创建一个UIRoot节点取名"游戏背景",在"游戏背景"节点下创建一个Image节点取名"蓝天背景",我想让这个节点图片铺满整个屏幕,所以我设置该节点的属性如下:
白云区域:游戏运行时,为了让游戏更逼真一点,就想让云在天空中一直漂浮,在设计中使用三朵云让它们循环移动。为了使游戏能够在各种不同分辨率的屏幕下能正常显示,我是这么做的,首先是在"游戏背景"节点下创建一个Empty Node取名"白云区域",向上对齐左右拉伸,属性值设置如下:
将三朵云挂载到"白云区域"节点下,由于方法类似,我只以其中的一朵云作为讲解,首先在"白云区域"节点下创建一个Image取名为"白云1",在运行时,三朵云循环移动我采用引擎提供的TweenPosition动画,挂载完成后如下所示:
在讲山峰区域之前,我先要讲下预制:在场景中可以很容易创建游戏对象并设置属性,但当有大量相同的游戏对象需要在场景中复用就成了问题,但该引擎提供了预制类型资源,可以完整保存游戏对象属性、组件及其子孙对象。预制相当于模板,可用于在场景中创建新出的游戏对象实例,达到复用的效果。在游戏中,我在"山峰区域"节点下需要三个同样的节点,故使用预制,在后续讲的树区域也需要用到预制。
山峰区域:在"山峰区域"节点下创建一个Image节点取名"mountain",需要把山峰节点放到屏幕的左下位置,将该节点拖入到"prefab"文件夹,即完成预制的制作,在游戏中,三个山峰是一个接连一个,为的是在游戏场景移动时产生连贯的效果,在代码中已经设置了山与山的距离,第一个山峰节点的属性值设置如下:
树区域:树预制的制作与山峰预制一样,这里就不一一讲述了。
将该脚本挂载到"游戏背景"节点上,并将对应的节点拖入到对应的属性值,如下图所示:
至此,我们已经把背景界面弄好了,但我想把登录界面与背景界面分离出来,故我在Hierarchy面板另创建一个UIRoot取名为"界面",将登录界面节点挂载到"界面"节点。现在我们需要弄按钮显示及其它的一些界面显示,除去背景界面,效果图如下:
5.2欢迎界面
首先在"界面"节点下创建一个Empty Node取名为"欢迎界面",目的是将上图中显示的界面元素都挂载到该节点下,"欢迎界面"的属性设置如下:
左边柱子:在游戏中,使用了大量柱子对象,故我们可以把柱子做成预制,前面已经讲述了如何制作预制,这里就不一一赘述。需要说明的是,柱子由柱子躯干与柱头所组成,这样做的目的是,在游戏中,我们根据等级相应的改变柱子的粗细。将做好的柱子预制拖入到"欢迎界面"节点下取名"左边柱子",柱子是倾斜的,我们可以设置它的Rotation值,节点属性值设置如下:
把该脚本挂载到"欢迎界面"节点上,并将对应的节点拖入到对应的属性上,需要说明的是,Config属性值为游戏数据配置表,暂时我们可以不去管它,在后续我们配置的Excel表,需要拖入到该属性值中,如下图所示:
将该脚本挂载到"欢迎界面"节点,挂载完成后如下图所示:
六、游戏界面
在前面我们已经搭建好了开始界面,接下来我们需要进入游戏界面。游戏界面我是这样构思的,游戏运行时,在登录界面(即欢迎界面),游戏界面是不显示的,点击"快速登录"按钮才让游戏界面显示出来,此时相应的将开始界面隐藏。这个比较好实现,只要设置对象的visible属性即可完成。首先我们来介绍游戏界面的布局,游戏界面的效果图如下:
在"游戏场景"节点下创建node/相机,node节点与相机节点(node与相机节点都是Empty Node)的节点属性值设置如下:
下图分别为node节点与相机节点的属性值:
这样做的目的是,悠悠考拉是一个无尽的虚拟世界,世界的宽度不限。在游戏中,为了让考拉一直处于屏幕中,即屏幕一直跟随考拉,此时采用相机。在游戏界面的效果图我们可以看到有柱子、秋千、考拉、暂停按钮及得分显示区域。下面一一介绍:
6.1 柱子
柱子:根据策划要求,在悠悠考拉游戏中,有关卡概念,在不同的关卡,柱子的粗细是不同的,并且考拉跳的柱子(跳台)高度也不尽相同,而且考拉跳到柱子上时有个得分区域,降落离中心区域越近就得分越高。如果将这些数据配置在程序中的话,将不便于修改及查看,故我将这些数据配置在Excel表格中,需要说明的是,我在Excel表格中配置了两张sheet表,分别为config、pillar表,其中config中的配置的柱子数据为默认数据,pillar表中的数据为关卡数据会根据config中默认数据作相应改变,具体如表所示:
config表:
表中#为注释,其余数据按字面意思即可知道,需要说明的是pillarTopMin是指三根柱子的父亲节点(游戏中我使用三根柱子循环移动),pillarTopMax是指跳台的高度(即考拉降落的柱子),pillarHeadIcon是指柱帽默认图片资源名称。
pillar表:
其中minLv与maxLv为关卡等级,看字面意思应该可以理解。thickness为柱子粗细百分比,在游戏中,是这样计算的,比如关卡等级为3级,则柱子的宽度为0.75*200(config表中的柱子默认宽度),而top表示柱子上边距百分比,如关卡等级为3级,则跳台的高度为1*510(config表中的跳台默认高度),而headIcon为柱帽对应柱子粗细的图片资源名称,scoreRect为得分区域。
根据策划要求,希望在游戏中能够模拟现实世界,考拉在荡秋千的时候会有风速,风速对考拉的速度是会有影响的,而且随着关卡的不同其风速也不相同,故我们也可以将这些数据配置到Excel表中,如下:
将该脚本挂载到"柱子集"节点上,将柱子预制拖入对对应属性值,如下图:
将该脚本挂载到柱子预制上,并将秋千预制拖入到对应的属性,其中Bg、Head为柱子躯干及柱头,如下图:
6.2 秋千
秋千:在游戏中,当考拉还没有抓住秋千时,秋千是有一个初始的状态。考拉抓住秋千时,秋千要做摇摆运动,摇摆运动我们可以使用引擎提供的TweenRotation动画,效果图分别如下所示:
考拉没有抓住秋千时,秋千的状态效果图:
考拉抓住秋千时,秋千的效果图:
为了实现这两种效果,我们可以根据秋千对应的柱子确定秋千的位置及旋转的角度。首先挂载一个TweenRotation动画,如下图所示:
标题区域:标题区域由暂停按钮、方向区域、分数区域所组成;在"node"节点下创建一个Empty Node取名"标题区域",为了让在该节点下的子节点在不同分辨率显示时,都能够正常显示。将该节点设置为向上对齐左右拉伸,故设置该节点的属性值如下:
在"标题区域"节点下依次创建暂停按钮节点、方向区域节点信息(其中方向区域由方向标识、风值、风值单位节点所构成)、分数区域节点信息。创建好后,效果图如下:
怎样得分:根据策划要求,考拉成功降落在跳台上时,作相应的加分,这里的相应加分,是在前面的柱子pillar sheet配置表中,我们配置了scoreRect(得分区域),如果考拉降落到柱子上时,离柱子中心区域越近则得分越高,而且策划还要求要有加分图标及特效效果,同样地我们也可以将这些数据配置到前面的Excel表中,在前面的Excel表中加入一个sheet表命名score,配置的数据如下:
可是我们在游戏中怎么去获取分数呢?我们可以在Score类中提供一个接口,该接口会返回玩家所得的分数,代码如下:
游戏界面中的大部分节点都已经创建好了,可是怎么让考拉松手时与柱子发生碰撞呢?怎么让屏幕一直跟着考拉呢?怎么让游戏背景也跟着移动呢?。。。。等等等,接下来我就一一讲述。
视野移动:在游戏中,为了让考拉一直处于屏幕中,即屏幕一直跟随考拉,此时采用相机,做法是:将柱子、考拉及秋千全部挂载到相机节点下,当考拉脱离缰绳开始掉落时,利用考拉的相对位移从而去调整相机位置,代码如下:
碰撞检测:考拉松手下降的同时,需要做碰撞检测以检测它是否成功的站到柱子上,有下面几种情况:
一、考拉碰到柱子左边缘,结束游戏;
二、考拉超出游戏边界,结束游戏;
三、考拉成功落到柱子上,则相应处理;
代码如下:
当考拉成功跳到柱子上时,我们需要更新柱子的位置(因为如果不更新柱子的位置,柱子将跟随相机到屏幕外边),代码如下:
将该脚本挂载到"游戏场景"节点,并将对应的节点拖入到对应的属性中,如下图: