【Unity3D实战】教你制作跑酷类游戏
图文教程技术文章技术文库程序逻辑
显示全部 20
32063 1
实名

通过了实名认证的内容创造者

发布于 2020-4-5 04:58:23

您需要 登录 才可以下载或查看,没有账号?注册

x
游戏类型:跑酷类游戏(Demo,非完整游戏)

操作方式:左右方向键(可自己移植到手机端)

游戏要素:

1.游戏角色会自动向前跑,玩家可通过左右方向键让其左右移动

2.游戏中存在障碍物,玩家需避开这些障碍物,否则会因为被障碍物阻挡的原因无法前进

3.当游戏角色因为被阻挡而消失在视野中时,视为失败

4.当游戏角色因为被阻挡而处于偏后方时,会提高移动速度直到回到原本所处的屏幕位置

游戏场景搭建

使用准备好的素材(路面、人物、障碍物),将这些素材制作成Prefab,然后根据自己喜好搭建好场景。如下图:

1.jpg

游戏脚本编写

游戏角色控制器moveController:
新建一个C#文件,命名为moveController,然后将其打开。
由于角色需要向前、左、右三个方向移动,所以我们需要有其在前进方向上的速度与左右方向上的速度,分别命名为:moveVSpeed、moveHSpeed,
同时由于玩家在落后的情况下需要加速,所以我们声明两个变量:前进方向上的最小移动速度minVSpeed与前进方向上的最大移动速度maxVSpeed。
于是我们可以得到以下脚本:

202045-41417.jpg

其中moveHSpeed、maxVSpeed、minVSpeed声明为public,方便在面板上修改。
接下来,在Start()函数中定义moveVSpeed的初始值:
moveVSpeed = minVSpeed;
在Update()中使人物能移动起来:



保存一下cs文件,切换到Unity,将该脚本挂载在角色对象的身上,保留默认值或手动设置:



运行游戏,看看是否能成功跑起来,并且能通过左右键控制人物左右移动。

看着人物越跑越远越跑越远,最后消失在远方…人物咋不见了?

这是因为我们没有让摄像机跟随它的原因,接下来,我们让摄像机与人物一起移动
打开刚才的C#文件,声明一个public的变量



在Update()函数中,添加以下代码:



注意到没,这里我们所定义的摄像机的移动速度与人物移动速度有点差别:
1.摄像机没有左右移动
2.摄像机的速度恒定为minVSpeed,也就是我们所定义的人物的最小移动速度(当然这个时候人物也一直是以这个速度在移动)
转到Unity,查看人物身上的Move Controller组件,现在这里应该多了一个变量等你设置:




我们将摄像机拖动到camera Transform处,再运行游戏。这时候你应该能看到人物在不断往前走,但在屏幕上的位置是没有变化的,因为摄像机一起移动了。

人物走着走着 哎呀 前面怎么没路了?别急,让我们来让路无限延长起来~

首先我们将道路的GameObject复制几个,我这里是总共有3个道路的GameObject,分别命名为Road1,Road2,Road3

然后在每一个Road下,添加一个Cube,将Cube的Mesh Renderer关闭,并将其Box Collider的Is Trigger勾上。命名为ArrivePos。




将多条道路拼好,连成一条笔直的公路。

然后新建一个空物体,命名为GameManager,为其新建C#Script GameManager.cs,然后打开该脚本。

声明一下多个变量:(注意引用命名空间using System.Collections.Generic;




并定义函数:



在Start()中:



然后打开之前的moveController.cs,声明变量:
// 游戏管理器
public GameManager gameManager;
定义函数:




切换回Unity中,点击GameManager这个物体,设置其GameManager组件的值:




这里的BornPos指的是障碍物出生点,以下图所示为每一条道路定义一个或多个出生点,每条路的出生点用一个BornPos的空物体进行管理:
然后将出生点按其所处道路的序号一一拖入(先设置size的值,3条就设置为3)
RoadList也是一样,将道路按序号一一拖入。

这里的ArrivePosList要注意一下,并不是直接按道路序号拖入,而是往后一位,即:
road2
road3

roadn
road1
这样的顺序将其对应的ArrivePos拖入列表

然后将需要生成的障碍物的Prefab文件拖入ObjPrefabList
设置道路的间隔距离(即一条道路的中心点到接下来一条道路中心点的距离 distance = road1.length / 2 + road2.length / 2 大概这么计算)

到这一步为止,GameManager的设置基本完成。点击人物的GameObject,设置moveController,将GameManager的游戏对象拖入到指定位置:




还有一步非常重要的设置:
为人物添加Collider与RightBody,为所有障碍物和路面添加Collider(注意不要勾上Is Trigger)

然后运行游戏。

这时候没有问题的话应该是能看到有障碍物出现了,人物走到障碍物处会被挡住,并且道路会自动拼接移动,无止境的走下去、走下去、走下去。。。

这个Demo也基本进入尾声了,接下来,做最后的游戏失败判断和让角色赶回正常位置。

打开GameManager.cs,声明变量:




打开moveController.cs 声明变量:



在Update()函数中 添加以下代码:



定义OnGUI()函数:




评分

参与人数 1活跃度 +15 展开 理由
微凉. + 15 【点赞】这很有大网气质!

查看全部评分

未来不迎,过往不恋~
使用道具 <
hawkqyf  发表于 2020-4-5 07:31:46  
2#
感谢楼主的分享,不过这篇文章的内容太老了,还在用GUI写,几年前官方就已经改用UGUI了
使用道具
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表