项目01——《3D滚球跑酷》

项目01——《3D滚球跑酷》_第1张图片

布局通常2 by 3

项目01——《3D滚球跑酷》_第2张图片

项目01——《3D滚球跑酷》_第3张图片

接下来我们布置场景,我们的预期结果(功能分析)是:

        游戏中中的小球会以恒定速度向前移动,而玩家控制着小球左右移动来躲避跑道中的红色障碍物,如果玩家能控制小球在跑到上移动一定距离则视为玩家通过关卡,触碰到障碍物或从跑道上掉落视为失败。

        分析:我们需要实现的功能概括来说有,主角的移动,摄像机的移动,过关与失败的检测等

首先我们开始场景搭建:

首先创建一个Cube(长方体)作为跑道

项目01——《3D滚球跑酷》_第4张图片

修改它的Transform与命名

项目01——《3D滚球跑酷》_第5张图片

创建一个小球(玩家)

项目01——《3D滚球跑酷》_第6张图片

修改Transofrm与命名

项目01——《3D滚球跑酷》_第7张图片

创建一个材质包文件夹

项目01——《3D滚球跑酷》_第8张图片

项目01——《3D滚球跑酷》_第9张图片

项目01——《3D滚球跑酷》_第10张图片

接着创建若干Cube作为遮挡物并设为红色

项目01——《3D滚球跑酷》_第11张图片

接下来创建一个Scripts文件夹用来存放脚本

项目01——《3D滚球跑酷》_第12张图片

创建一个脚本

项目01——《3D滚球跑酷》_第13张图片

命名为Run

项目01——《3D滚球跑酷》_第14张图片

将代码挂载玩家Player上

项目01——《3D滚球跑酷》_第15张图片

运行即可通过方向键左右控制小球移动躲避红色障碍物

项目01——《3D滚球跑酷》_第16张图片

虽然我们控制了小球移动但是主摄像机一直停留原地,接下来我们需要设置主摄像机的移动

实现主摄像机的移动方法有两种,我们可以通过以上同样方法设置与小球同样速度并保持一定距离来实现,另一种就是将主摄像机设置成小球的子物体,建立父子关系,我们采取第二种方案,

将Main Camera拖拽至Player的下方成为子物体,即完成

项目01——《3D滚球跑酷》_第17张图片

再次运行,可见摄像机也随之移动了。

我们最后设置游戏机制,

一般有两种情况会导致游戏失败,一种是碰到了障碍物,另一种是小球从跑到边缘掉落

实现这个功能只需要将障碍物上的Is Trigger选项勾选,然后再障碍物的脚本里的OnTriggerEnter()函数中检测碰撞即可。

我们需要先创建一个完备的障碍物,变成预制体,随后拖拽预制体设置场景障碍。

我们先创建一个预制体文件夹

项目01——《3D滚球跑酷》_第18张图片

再创建一个障碍物需要挂载的Stop脚本

项目01——《3D滚球跑酷》_第19张图片

项目01——《3D滚球跑酷》_第20张图片

将场景中的一个Cube障碍物的Is Trigger打开

项目01——《3D滚球跑酷》_第21张图片

删除其余障碍物

项目01——《3D滚球跑酷》_第22张图片

将Cube改名为Barrier(障碍物)

项目01——《3D滚球跑酷》_第23张图片

我们在运行测试小球与障碍物相撞的结果之前,需要将小球挂载Rigidbody

项目01——《3D滚球跑酷》_第24张图片

障碍物挂载停止脚本Stop.cs

项目01——《3D滚球跑酷》_第25张图片

运行相撞即停止

项目01——《3D滚球跑酷》_第26张图片

可见Stop.cs代码中的Time.timeScale表示游戏的运行时间倍率,设置为0即表示游戏里的时间停滞,1即正常的时间流逝速度,2即翻倍,以此类推。

我们将障碍物Brrier放进预制体中,再从预制体设置场景布满障碍物

项目01——《3D滚球跑酷》_第27张图片

注意:wasd + 鼠标右键可移动编辑场景视角

项目01——《3D滚球跑酷》_第28张图片

注意:

Hierarchy中的放置预制体为蓝色

项目01——《3D滚球跑酷》_第29张图片

虽然撞到障碍物停止的功能实现了,但小球掉落后的功能却没与实现

所以我们继续编写Player中的代码,

项目01——《3D滚球跑酷》_第30张图片

运行掉落即暂停

项目01——《3D滚球跑酷》_第31张图片

当游戏失败结束时应该允许玩家重新开始游戏,这里设置键盘上的R键为重置游戏的按键,在按R键后即可重新加载当前场景。继续在Player脚本里添加代码:

项目01——《3D滚球跑酷》_第32张图片

修改脚本后运行即可按R键复位重置游戏

注意:SceneManager这个类型属于using UnityEngine.SceneManagement的,因此要添加头文件才能调用SceneManager.LoadScene(0)方法,这里参数0表示场景的序号,由于游戏现在只有一个场景,因此表示加载当前场景。

接着设置终点,

在过了所有障碍之后不远处创建一个物体作为终点

项目01——《3D滚球跑酷》_第33张图片

设置终点

项目01——《3D滚球跑酷》_第34张图片

新建挂载在终点物体的Win代码

项目01——《3D滚球跑酷》_第35张图片

项目01——《3D滚球跑酷》_第36张图片

检查Player是否添加了组件Rigidbody

项目01——《3D滚球跑酷》_第37张图片

代码挂载

项目01——《3D滚球跑酷》_第38张图片

最后取消终点物体End的Mesh Renderer(渲染器)的勾选让物体消失但触发器还在

项目01——《3D滚球跑酷》_第39张图片

即实现全部功能

最后我们进行完善游戏,

首先加入一个通关UI界面

项目01——《3D滚球跑酷》_第40张图片

项目01——《3D滚球跑酷》_第41张图片

项目01——《3D滚球跑酷》_第42张图片

UI界面设置好之后,接下来要做的是在游戏开始时隐藏UI,在小球触发终点物体时再显示,修改End终点物体的Win.cs代码

项目01——《3D滚球跑酷》_第43张图片

注意这里一定要把Panel命名为EndUI,不然在代码中会找不到EndUI我们设置的UI显示界面

运行即可实现UI功能

最后扩展一个3D数学知识,简单思路为:在Player脚本中使用获取的横向输入,以此控制摄像机的倾斜角度。在Player物体的Run.cs脚本中添加以下代码即可

项目01——《3D滚球跑酷》_第44张图片

运行实现

项目01——《3D滚球跑酷》_第45张图片

End

你可能感兴趣的:(1024程序员节,c#,3D游戏)