【Unity3D实战】零基础一步一步教你制作酷跑类游戏(1)

首先做个自我介绍,我是一名在读的大三学生,软件工程游戏开发方向。

一直以来,我梦想着成为一名游戏开发者,所以在大三分方向时我毫不犹豫地选择了游戏开发方向。刚刚接触
Unity3D一段时间,现在需要大量的实战来巩固自己的知识。

在我的个人博客中,将记录下这些实战经验,供日后自己回顾,若是能帮助到同为初学者的朋友就更好了。

本篇博客中,将记录一个简单的酷跑类游戏的实现,哪怕是从未接触过Unity3D的朋友,也可以参照本文完成
自己的第一个酷跑类游戏。

正文,即将开始!

所有游戏的第一步 创建工程

我们先打开Unity3D,这里本人使用的是Unity3D 5.3.0版本,目前最新的版本是5.3.2,大同小异,还未
安装Unity的朋友可以到官网获取,下载个人版的就可以了。(既然加入到开发者的行列,还是支持正版的比
较妥当。Unity3D个人版是免费使用的 而且完全足够我们的使用 只有当盈利达一定额度时才需要购买Pro版
本)

Unity启动界面

点击右上方的New后,将出现下图所示界面。

Unity创建工程界面

在Projects下有两行输入栏,第一栏ProjectName自然就是工程名,第二栏Location则是工程的保存路径。
3D/2D代表的是本游戏是3D游戏还是2D游戏,这边我们选择3D(其实开发2D游戏在本界面选择3D也是可以的,
因为创建完毕后在工作面板依旧可以切换)。

输入好工程名与路径后,我们点击CreateProject,创建工程,等待其读条完毕将自动打开工作面板。

游戏的创造场所 工作面板

工作面板

从上图我们可以很清楚的看到Unity的工作面板大致分成几个区域:
1.菜单栏
2.Scene视图
3.Game视图
4.Hierarchy视图
5.Project视图

当然有的初学者朋友就会发现,可能我的工作面板和你们长的不大一样,这是为什么呢?是不是下载错了?

别急。看到右上方的Layout了吗,单机它。你就会看到这样的一个列表

Layout列表

哦,对了,还有一个Project视图长的有点不大一样。

Project视图选项

如图所示,单机Project视图最右边的按钮,将弹出一个列表,选择第一个就好啦~

当然这些视图的位置摆放主要看个人爱好,大家怎么喜欢怎么来就好了,不会影响到游戏的开发。

创建场景

场景,也就是Scene,我们可以把它看作是一个空间、一个小世界,游戏里面的物体存在于某一个场景中,
可以从一个场景跳转到另外一个场景。比如我们打开游戏时,点击开始游戏,就会从主菜单场景跳转到游戏场景。

在创建场景前,我们现在Project视图下创建一个文件夹,命名为Scenes,这样将工程下的文件按其类型进行
分类存放,便于管理。可以通过点击Project视图下的Create按钮,可以在Project视图中右键进行创建。

点击Create按钮(或右键)
Create按钮

选择Folder
选择Folder

命名为Scenes
命名

这样,我们便创建好了一个文件夹,接下来,创建Scene。点击右上角的File菜单。

点击File菜单

因为在创建工程时,Unity自动创建了一个Scene,所以我们只要保存它(或者用Ctrl+S快捷键)就行了。

保存场景

将其保存至Scenes目录下,命名为gameScene。

gameScene


创建道路

我们将目光投向Hierarchy视图。这里我们能看到有两行已存在的东西:Main Camera 和 Directional
Light。从名字上我们很容易就能得出,一个是主摄像机,另一个是平行光。

主摄像机是干什么用的呢,很简单,游戏里面存在着各种各样的物体,它们怎么被显示到屏幕上的?Unity会将
摄像机所看到的景象渲染到我们的游戏窗口上。可以将摄像机当作是眼睛,代替我们观察着游戏中的美好世界。

平行光就是朝着一个方向照射的光,游戏里面必须要有光,从小到大,老师都教我们,为什么我们能看到东西?
因为光照射到物体上,反射到我们眼睛中。如果现实世界中没有了光,我们将看不到任何东西。游戏中也是相似 
的,当然会有点不同,如果将光删去,则游戏中的物体将会变暗而不是完全看不见。这是因为Unity为我们创造 
的世界中还有一种无处不在的环境光,它是接近于黑色的。

去掉光源

讲了这么多,我们重回本小节标题来讲。

有的朋友看到图就会问,诶,你怎么多了个立方体啊?

这就是我们接下来要提到的,如何创建一个物体到游戏场景中。

首先,点击Hierarchy视图的Create按钮(或右键)

Create

我们将会看到以下列表,选择3D Object——Cube。

3D Object

Cube

即可创建上文某图中突然出现的立方体。

这时我们选择一下这个立方体,将视线投到右边的Inspector视图上。

Inspector

从上到下看,看到一栏输入框上面写着Cube了吗?这就是这个物体的名字,可以直接在这里修改它,也可以在 
Hierarchy视图中重命名。

在它左边的那个小勾,意味着是否激活它(Active),如果将勾去掉,则将会发现在Hierarchy视图中它的名字 
变灰色了,游戏场景中它的身影也消失了,正如它悄悄的来.....

Tag就是它的标签,可以将一系列需要分类的物体进行归类。
Layer是它所处的层,可以通过修改摄像机的属性,指定允许它看到的层。
Transform中 很好理解的三个属性 Position位置 Rotation旋转角度 Scale缩放大小。

先讲到这,因为Transform中有我们现在需要操作的属性。

将鼠标移动到任何一个XYZ旁边 都会看到鼠标指针变了,按住左键左右移动,就能修改对应的值。

这里我们手动修改Scale的值。如下图所示。

修改Scale

就会看到场景中的Cube发生了相应的变化。

修改后的Cube

这样像不像一条笔直的路了?

当然一条路是不够跑的,按我们的速度,那可是像飞人一样 咻的一声就过去(诶 这说的好像是超人0v0)。

既然是酷跑类的游戏,那就应该让它的路无限延长,跑的腰酸背痛腿抽筋才行!

我们这里的思路是,创建两条路,当跑到路1的X位置时,将路2拼接到路1后面,而跑到路2的X位置时,再将 
路1拼接到路2后面,不断循环循环循环,直到天崩地裂海枯石烂...

好了,我们先来创建第二条路,有人就会问,是不是又得创建Cube啦 是不是又要修改Scale啦?

恭喜你,答对了!不过我们这边创建出来的是完全一样的两条路(就算有一些不一样,在什么东西都未加的时候, 
它们都是这么一个像板一样的Cube)。

相信大家都很喜欢用复制粘贴功能,多方便啊,这里复制一下,在那里粘贴一下,少了不少功夫呢!所以我们这里 
也用类似的功能。

首先在Hierarchy视图中选择Cube,按Ctrl+D的快捷键,怎么样,是不是出现了一个它的弟弟Cube(1)呢? 
当然用复制粘贴也行的,右键Cube选择Copy(或者Ctrl+C),右键Hierarchy视图,选择Paste(或者 
Ctrl+V)。

复制道路

这时就有人说了,你骗人!场景中明明还是一条道路,第二条呢!被它吃了吗? (╯°Д°)╯︵ ┻━┻

好吧,事实就是——真的被它吃了。开玩笑的啦 ̄ω ̄,你看到不到它是因为两条道路重叠了!

这时候,就该调整Transform的另外一个属性,Position了!

首先,选择Cube(1),在Inspector视图中将它的Position的X属性修改成20。至于为什么是20呢,因为他们 
的Scale中的X是20.Cube原本的大小是1*1*1,将Scale修改后,其X值就变成了1*20=20,也就是X方向上的 
长度为20,而第一个Cube的X为0,第二个Cube自然要在X方向上距离它有20啦~

复制后的视图

看到了吧,第二条路出现了,我才没骗你们呢! (╯°Д°)╯

看到图是不是有人会问了,奇怪了,你的Scene视图中道路怎么变小了,变瘦了,减肥了咩?

当然不是了,我们的道路这么苗条,怎么可能需要减肥嘛。至于它为什么会变小了(当然是因为减肥啦...好吧 
我开玩笑的),那是因为我用鼠标滚轮调整了在Scene中观察物体的距离,离得远了自然就小了嘛~

好了,道路创建完毕了,接下来接着创建人物吧~

创建人物 (没有人物的游戏还算游戏吗!——当然算)

首先提供一个模型的下载地址,是网上找的,毕竟我是程序猿不是建模狮TAT

unity3d手游卡通动画角色模型Cartoon Character For Mobile Game

你会得到如下的UnityPackage。

UnityPackage

将它放在一个合适的目录,这里有个重要的事情:必须是英文路径!必须是英文路径!必须是英文路径!

不然的话Unity是无法正确加载它的。

至于要怎么使用,双击咩?并不是。我们继续切换到刚才的工作面板中,右键兵选择Import Package——Custom 
Package,然后选择刚才的资源包。

导入资源包

然后在出现的面板中选择All 再点击Import。

Import

然后就能在Project视图下看到多了一个Model文件夹。

加载后

我们选择并拖动character这个文件,将其拖动到Hierarchy面板中,然后我们就会看到它出现在了场景中。 
但是有个问题,它.....太大了!!( (╯°Д°)╯︵ ┻━┻这个胖子怎么和作者一样不减肥!)

拖动至场景

刚才上面好像提到了什么不得了的东西...不管它了!我们来让这胖纸变的瘦小一点吧(无辜的胖纸:我明明是 
巨人国的,才不是胖纸呢!)

是的,聪明机智勇敢美丽善良可爱的你没有猜错,就是修改Scale中的值,将其都设成0.1吧(嗬嗬嗬,让他变 
矮子)

修改大小

然后就会发现,他真的变矮了!啊不是,他真的变小了!!

修改后的样子

接下来,我们要修改一下他的朝向,总不能让他往旁边跑跳下去吧!所以我们修改一下Transform中唯一现在 
还未修改过的值,Rotation!

修改朝向

我们将Rotation中Y的值修改成90,也就是将其绕着Y轴旋转90度,他就正常的朝着无量(亮)的前方了!

修改朝向后


让人物“动”起来 添加动画

你们看这矮胖纸和笔者一样傻愣愣地一动不动地发呆,这这么行!生命在于运动,我们让他从现在开始,动起来!

首先,单击Hierarchy面板中的character,让其属性显示在右边的Inspector视图上。然后在Project视图中 
找到character,点击它左边的小三角,在出现的一大堆列表中找到run。这是一个动画文件,将其拖动到右方 
Inspector视图的空白处。仔细观察,会发现它自动创建了一个character.controller文件,并赋给了 
character物体对象的Animator中的Controller。

导入动画

点击工作面板正中央上方的控制条中的播放按钮,运行该场景,就会发现主角跑了起来~(我想起了在夕阳下的 
奔跑,那是笔者那个胖纸逝去的青春...)

运行场景

奔跑动画添加完毕。做下一步事情。

让人物动起来 人物控制器

在Unity的Standard Assets里面是有第一人称和第三人称控制器的。不过既然是入门教程,我们还是尽量自 
己写一个简单的人物控制器来操控人物,毕竟这个Demo也就这么几个地方需要写代码...

首先我们为了方便管理,在Project中创建一个文件夹,命名为Scripts,然后在该文件夹下创建一个C# 
Script,命名为moveController.cs。这里有个非常重要的一点,尽量在创建时直接命名,如果已经创建好了, 
右键——重命名(或按F2)也是可以的,但是这样重命名的话,需要打开脚本将其类名一起对应修改。否则编译器 
会报错的。

创建脚本

创建脚本命名

然后双击打开该csharp文件。这里笔者使用的是VS2015,大家可以选择自己喜欢的coding工具,修改默认设置 
在工作面板的菜单栏——Edit——Preferences中的External Tool中修改。

修改codingTool

修改codingTool

打开该csharp文件后,我们可以看到下图所示源文件。

源文件1

我们先声明一个浮点型变量,并将其访问权限定为public,默认值为5.0f。然后在Update()函数中添加一行。

源文件2

这里笔者要提到一件事,今后的所有代码,笔者都尽量用图片的形式显示,而不直接贴出来,这是为了让大家能 
亲手去敲出这些代码,而不是一味的复制、粘贴。笔者身边很多朋友都喜欢复制、粘贴,但是这样,真的不好, 
一点好处也没有,哪怕是你完全懂的知识。
因为
1.直接复制、粘贴,会让你养成这种坏习惯。
2.复制、粘贴的东西,哪怕你看一百遍后让你写一遍,恐怕写不出来。
3.笔者缩写的代码并不是最优方案,只是为了方便一些初学的朋友而尽量简单。自己敲一遍可以想想有没有其他 
方案可以实现同样或者更好的效果。 

这里稍微讲解一下代码中的内容,因为比较简单,我就一行一行的讲。从上到下:

1、2.两句using xxxx;这是引用命名空间,Unity的基本要素在UnityEngine这个命名空间中。

3.public class moveController:MonoBehaviour 这一行中,public代表了该类的访问控制为 
public(公共的),class是类的关键字,本行的意思是 声明了一个访问控制为public的类,类名为 
moveController,其继承于MonoBehaviour类。

4.public float moveSpeed = 5.0f; 本行声明了访问控制为public的单精度浮点型(float)变量, 
变量名为moveSpeed,其默认值为5.0f。注意这个f,有的朋友会经常忘记加,大家可以试试没加f会怎么样。 
是的,编译器会直接报错。因为这个f代表了前面这个数字是float类型

5.void Start() 这是预先声明好的函数,Start将在MonoBehavior创建后在该帧Update之前被调用。

6.void Update() 这也Unity预先声明好的函数,游戏中的每一帧都会调用Update()

7.transform就是游戏对象(GameObject)的Transform组件的实例类对象(还记得我们还调过Cube的 
Scale、Position吗)。transform.position指的便是游戏对象的位置。 

a+=b等同于a=a+b。 

new Vector3(1,0,0)这里是实例化一个Vecotr3的类对象,分别复制x=1 y=0 z=0.Vecotr3就是三维向量, 
百度一下就知道什么是三维向量。new是用来实例化的,应该有不少学过C++还未接触过C#的朋友会和我一样曾经 
在这个地方直接Vetor3(1,0,0)吧?大家可以试试,这样会报错的,如果没有new实例化的话。 

moveSpeed就是刚才我们声明好的浮点型变量,用来代表每秒的移动速度。 

Time.deltaTime 这个是指每一帧刷新的时间 也就是调用两次Update()中间的间隔时间。

按Ctrl+S保存,或者点击左上方的保存图标进行保存源文件。然后返回到Unity的工作面板上来。

选择Project中的moveController.cs文件,将其拖动至Hierarchy中的character上,在Inspector视图 
中确认已成功添加moveController.cs后,点击运行按钮,观看效果。

运行效果

就会发现我们的主角已经迈着他的小短腿跑起来了。而且并不是像之前那样的原地踏步,而是朝着前方奔跑着, 
跳跃着...哦对,还没跳跃呢!接下来我们要做跳跃的控制。

万分感激

万分感激观看到这的朋友,同样万分感激点击进本博客却没有看到这的朋友。笔者知道自己的能力不足,只能分享 
一些刚入门时的经验给各位朋友,已经入门的朋友这篇文章可能没有太多的帮助。

目前本文已经完成了跑步的操作,接下来还缺:跳跃、加分道具、显示当前分数等等功能,由于夜深了,并且笔者 
今日一大早坐动车来回跑,有些困了,打算先去休息一番。待过一两日再续写本系列零基础教程——酷跑类游戏。 

再次感谢大家! 

致敬!
发布了6 篇原创文章 · 获赞 98 · 访问量 11万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览