查看原文
其他

Unity教程|3D无尽跑酷游戏(上)

2016-10-25 Unity官方 Unity官方平台
常见的3D跑酷游戏有两种,一种是像《地铁酷跑》那样可以变换火车轨道躲避障碍,另一种是《神庙逃亡》,在拐角处向左或向右拐弯,从而安全跟随设计的路经奔跑。



《地铁酷跑》游戏



《神庙逃亡》游戏
本教程将教大家如何使用Unity来制作一款3D跑酷游戏,分为上下两部分,今天先为大家介绍上半部分。游戏共有两个关卡,包含所有的跑酷游戏机制。 请点击[阅读原文]下载教程资源及示例工程。

游戏简介

游戏启动时,屏幕上出现两个选择游戏关卡的按钮。在“旋转型道路”关卡中,Max在当前路径上保持直线奔跑,在拐角处才可以选择左右滑动进行转向。奔跑过程中Max还要通过跳跃来躲避障碍物。



旋转道路关卡
注意:游戏共有两种输入方式(按方向键,或者在触摸屏上滑动)。
在“直线型道路”关卡中,Max在比较宽阔的道路上前行,游戏过程中可以通过左右移动切换轨道或跳跃来躲避障碍物。



直线型道路关卡
理论上在两种关卡中,游戏都可以无限持续下去。只有当Max撞上红色的墙(旋转型关卡中)或撞到障碍物(两个关卡中)时,游戏才会结束。之后玩家可以轻轻点击屏幕重新开始。Max在关卡中奔跑得越久,游戏得分越高。
游戏实现

下面来实现游戏代码并构建Unity场景。首先介绍两个关卡都会用到的共同类,然后再分别解释各个关卡。
请点击[阅读原文]查看文中所有的脚本代码。
游戏输入
鼠标(键盘)或者触屏输入的实现都很简单,两种输入方式都以“类”的方式创建。只需实现对应的接口以便游戏主线程检测输入结果,而不需了解输入的处理过程。

关卡介绍
Intro Level是玩家启动游戏后见到的第一个场景。



Intro level主屏幕
Intro level脚本使用UGUI控件实现选择关卡的两个按钮,调用Unity的SceneManager API让玩家进入对应的关卡。
Constants类-常数
Constants类通常包含静态变量(整个项目中都可以访问),此外,这个类还能帮助避免对整数及字符串进行硬编码。

GameState枚举-游戏状态
GameState枚举很简单,包含游戏的三个状态。即游戏未开始(Start)、游戏正在运行(Playing)以及Max死亡(Dead)。

TimeDestroyer类-定时销毁器
为了减轻RAM以及CPU的负担,一些游戏对象会在一段时间后被销毁。解决方法是一段时间后销毁这个物体,由TimeDestroyer类来实现。

游戏中的多种预制件都带有TimeDestroyer脚本,尤其是糖果、障碍物以及道路。它将在Max没有死亡的前提下,一段时间后让游戏对象消失。
Obstacle类-障碍物
为了让游戏可玩性更强,需要在道路上放置一些障碍物。Max需要通过改变轨道或跳跃的方式躲避障碍物。下图中可以看到用作障碍物的两个模型及组件。



2个障碍物模型预制件


Barrel model 组件
如上图所示,每个障碍物都是一个触发器类型的碰撞体。代码非常简单,就一个方法,当Max撞到障碍物时触发。一旦发生碰撞,则Max死亡且游戏结束。
RedBorder类-红墙

RedBorder用在“旋转型道路”关卡。用红色是因为它比较显眼,Max也要避免与红墙碰撞。



RedBorder预制件


RedBorder组件
RedBorder脚本关联RedBorder游戏对象。与前面的障碍物一样,当Max碰到RedBorder对象就会死亡,同时游戏结束。
Game Manager类-游戏管理器

Game Manager脚本用来保存一些基本属性,比如游戏状态以及“Die”方法。Game Manager脚本是一个单例,整个游戏过程中只有一个实例。


Random Material类-随机材质

Random Material用来为地板上的方块随机选取一些颜色,以区分不同的路径。



旋转型道路关卡,可以看到道路上的随机颜色块


6个材质用于为道路着色
Candy类-糖果
本游戏设计在路径上生成一些3D糖果帮助玩家得分,当Max撞到糖果时增加得分。下面列出了糖果预制件以及candy_01的组件(其它三个类似)。



四个糖果预制件



Candy组件
UIManager类-UI管理器
利用Unity原生的UI系统实现两个很简单的文本,主要用于显示游戏状态以及当前得分。



两个UI文本对象显示游戏状态以及当前得分
Max动画
将Max模型导入Unity后可以看到Max内嵌的一些动画。本游戏会用到空闲(idle)、跑步(run)以及跳跃(jump)动画。



Max 3D模型的动画
使用Unity的Mecanim动画系统来驱动Max。可以在Mecanim里面创建一个状态机,来实现:
  • Max模型所有必要的状态
  • 每种状态对应一个动画
  • 状态之间的转换以及发生转换的条件

下面是Max的动画状态机,两个bool变量(jump及started)会触发状态改变:




空闲状态下,started变量为True后切换到run状态,并播放动画:



当Max正在跑动时,如果jump变量为True,切换至jump状态,角色进行跳跃:



将run动画赋给run状态:


目前已经实现了动画状态,但如何修改这两个变量呢?这需要参考Max的动画控制器对象,具体的内容将在下篇介绍移动脚本时解释。


到此教程的上半部分就结束了,下篇将继续为大家讲解剩下的内容。请点击[阅读原文]获取本教程的示例工程。


更多Unity实例教程

制作一款3D射击游戏(上)

制作一款3D射击游戏(下)

简单两步使用Unity制作ZigZag游戏

为非程序员打造的Unity游戏框架

使用Unity开发Hololens入门教程


Unity官方活动




点击“阅读原文”立即下载示例工程

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存