Unity官方教程 2D UFO(上)
前言
Unity官方教程 2D UFO 原版视频教程地址,点我点我
抱着总结和方便回顾的念头把Unity官方教程写一遍。朋友—Zui,两年前写的球球和飞机非常精彩,我乃是继承他的“遗风”(→_→)。
这个2D UFO游戏个人认为是Roll-a-Ball的2D版,实现起来更加简单,更适合新手入门。官方视频未知所用Unity版本,现在Unity最新的版本是Unity 2017,部分界面和实现方式已经有差异。
电脑环境:Windows10
Unity版本:2017.2.0
脚本/代码编辑器:Microsoft Visual Studio Community 2017 15.4.4 (装Unity的时候带上的)
你将学会操作什么?
- 如何创建一个新的项目(Project)
- 如何下载资源包(Asset Store)
- 如何添加基本的游戏对象(GameObject)
- 如何给游戏对象添加脚本(Script)
- 如何制作预制件(Prefab)
- 如何实现计分板和游戏结束提示(UI Text)
- 如何发布游戏(Build)
一、创建一个新的项目(New Project)
第1步:通过菜单栏File-->New Project打开创建新项目对话框
第一次安装unity的同学打开软件的时候默认就是创建新项目对话框页面。
New Project第2步:确定项目名称、存放路径和游戏模式
创建新项目对话框- Project name:项目名称
- Location:项目存放路径,可选择电脑任意目录(不会放C盘吧?(꒪Д꒪)ノ)
- 3D/2D:在这里我们当然选择2D
最后点击 Creat project 按钮创建新项目。
第3步:调整项目视图布局
编辑器主界面有可能你创建出来的项目视图布局和上图不一样,可以编辑右上角Layout按钮来改变布局。上图布局是Tall(可以通过鼠标调整每个窗口宽度)。其他模式可以自行选择体验。
Layout二、 从Asset Store下载素材资源包
为了方便我们跟随视频学习,Unity官方已经提供2D UFO游戏的所有素材供我们免费下载——Unity Asset Store。
第1步:通过菜单栏Window-->Asset Store按钮打开资源商店
image.png第2步:查找和下载资源包
资源商店窗口默认会在Game窗口右侧展开,在Search搜索栏输入游戏名字并回车,找到游戏后点击标题打开详情页,点击蓝色按钮Download确认下载。
搜索结果第3步:导入资源到本地打开的项目
下载完成后会提示是否Import到项目内,点击Import按钮会打开导入资源选择页面。默认全选,无需改动,点击右下角的Import按钮即可。
Import导入完毕之后关闭Asset Store页面,回到编辑器主界面,可以看到Project窗口下的Assets文件夹多出了三个文件夹_Completed-Assets、Sprites、TutorialInfo。本教程中,除了Sprites,其他没有用武之地٩(๑❛ᴗ❛๑)۶。
Assets三、创建第一个游戏场景(Scene)
第1步:创建一个文件夹存放场景文件
Unity中,游戏场景、脚本、预制件、美术等所有资源文件都放在Assets文件夹下。游戏越复杂文件可能就越多,如果不对这些资源文件合理进行分类的话,那么查找和管理起来就非常困难。所以在学习Unity的过程中要有意识地培养自己合理分类资源文件的习惯,这点不要忘记!那现在就开始创建一个Scenes文件夹来存放游戏场景文件吧~
创建办法有3种:
- 菜单栏Assets-->Create-->Folder
- Project窗口下的Assets文件夹右键快捷方式创建
- 左键选中Project窗口下的Assets文件夹,点击Project正下方Create右侧小三角,选择Folder。
第2步:保存场景文件到Scenes文件夹
通过菜单栏File-->Save Scenes(快捷键Ctrl+S)保存场景文件,记得是保存在Scenes文件夹,我们命名主场景文件为Main。
保存场景可以看到,Hierarchy窗口下出现了Main场景。
Main四、添加游戏对象——背景(Background)
有了游戏场景,我们就可以开始在场景中添加一些我们需要的游戏对象了。首当其冲需要添加的是游戏背景,也就是UFO背后那张棋盘。选中Sprites文件夹,鼠标左键按住Background文件不动,拖到Hierarchy窗口空白处松开。
Background可以看到,Hierarchy窗口下新增了一个Background游戏对象。新增游戏对象之后最好进行重命名(更好地说明它的作用),重命名有2个方法:
- 左键点击选中要改名的GameObject,稍微等一会,再左键点击一下,进入编辑改名状态。和平时修改电脑文件名字是一样的~
- 选中要改名的GameObject,在右侧的Inspector窗口下方名字栏处修改,改好回车。
在这里我们不改名( • ̀ω•́ )✧ Background这个名字挺好的。
接下来要做一件很重要的操作(官方和Zui强力推荐)——重置(reset)游戏对象的Transform属性:在右侧的Inspector中找到组件Transform,点击它右上角的小齿轮,选择reset选项,如下图:
reset transform官方建议我们每次新增GameObject之后都进行双标动作:改名和重置Transform。改名是方便解释对象的作用,重置是让游戏对象的位置回到原点,避免因为不在原点产生一些诡异的事情。
背景添加成功之后,可以看到Scene窗口的背景不完全可见,鼠标滚轮控制缩放,鼠标左键拖动,调整到Scene窗口可以看到完整的背景,方便后续操作。
鼠标切到Game窗口,背景图片看起来还是很大,无法窥得全貌,这是由于正交摄像机的Size太小,可视范围太少。鼠标选中Main Camera游戏对象,在Inspector内的组件Camera找到Size,把它的数值改成28(可以根据自己的窗口大小来调整这个数值)。
Game窗口Tips:鼠标放在Size输入框前面一点,出现左右两个箭头的时候,按住鼠标左键上下移动可以微调数值。其他有输入项的都可以使用这个操作~
五、添加主角——UFO
前面都是浮云,到现在为止我们的游戏主角终于要登场了,泪流满面(;へ:)……添加UFO和Background的操作是一样的,在Sprites文件夹里面把UFO拖到Hierarchy窗口即可。添加完GameObject不要忘记双标动作了,这次我们把UFO重命名为Player,因为它就是我们玩家所能操控的对象。
这个主角有点太胖了,格子都装不下了,让我们给它减减肥。选中Player,把Transform的Scale内的x和y都改成0.75(2D游戏不用改z)。看,格子这么合身!
Transform属性说明:Position位置,Rotation旋转角度,Scale缩放比例。
在Player的Inspector窗口下有一个组件Sprite Renderer,有一个选项Sorting Layer,它控制渲染层级的顺序。在这里我们需要把UFO也就是player的这一项改成Player,然后把Background的改成Background。很绕→_→ 这个改了之后,背景就不会盖在上面挡住UFO了~
image.png六、让UFO走起——添加刚体(Rigidbody2D)和脚本(script)
UFO死气沉沉地一动也不动,我们总不能干瞪着眼看它,这样不叫游戏。那么接下来就该让它走起来了~它不会无缘无故地走起来,需要我们去给它施加一个物理作用力,控制它往我们指定的方向走。这就涉及到物理引擎的控制了,具体我们接下来看怎么实现吧。
第1步:给UFO添加刚体组件
刚体能让UFO被物理引擎所控制,这样便能模拟现实,通过受到物理作用力来实现真实的物理表现效果比如移动和碰撞,方便后续实现拾取金币和撞墙。
给UFO添加刚体组件的2种方法:
- 选中Player,通过菜单栏Component-->Physics 2D-->Rigidbody 2D添加。
- 选中Player,通过Inspector的Add Component-->Physics 2D-->Rigidbody 2D添加
第2步:给UFO添加脚本组件
OK,现在UFO有刚体了,它可以接受物理作用力了,那么如何给它发出指令让它走起来?通过给UFO添加脚本并且编辑脚本可以实现对它的操作。
不过,首先我们要意识到,脚本也是资源文件,所以是需要存放在Assets文件夹里面的。还记得之前提过的资源分类吗?在Assets下创建一个Scripts文件夹,用来存放所有的脚本文件。
Scripts文件夹给GameObject添加脚本的方法是选中GameObject(也就是我们的主角Player),点击Inspector窗口的Add Component按钮,在弹出来的菜单中选择New Script
New Script此时要求输入脚本名称和选择语言类型,这里我们将脚本命名为PlayerController,然后语言选择C Sharp。
PlayerController点击Create and Add后,我们就成功给UFO添加一个脚本组件了。接下来你们肯定以为要编辑脚本了对不对?NO,NO,NO(贱笑.jpg)。点击Assets文件夹,可以看到文件夹内出现了一个名为PlayerController的脚本文件。由此我们知道,每次给游戏对象新增的脚本文件默认是放在Assets文件夹。根据资源分类原则,要先记得把这个脚本文件拖到刚才创建的Scripts文件夹内。
然后通过双击这个脚本文件,或者点击脚本组件右上角的小齿轮按钮,在弹出来的菜单中选择Edit Script便可打开脚本编辑器了。
Assets文件夹第3步:编写脚本
下面没有编程经验的同学,可以直接按照例子来抄写代码,以后做的多了自然也就容易理解了。
新打开的脚本是这样的:
里面默认自带了2个方法,Start和Update,Update在这个例子里用不到。我们添加一个FixedUpdate的方法,该方法主要适用于处理物理逻辑,代码如下:
PlayerController代码简单说明下:
- 新增了两个变量成员,rb2D是刚体组件,speed是控制UFO移动的速度。
- Start方法划线部分,用GetComponent方法获得当前脚本所挂载的游戏对象(Player)里的刚体组件并且赋值给rb2D
- FixedUpdate方法,定义了两个浮点变量分别代表键盘水平和垂直方向的输入,根据这两个值确定移动二维向量movement,最后由刚体rb2D调用AddForce方法给UFO添加一个力使其移动。
speedTips:脚本新增的Public变量成员,会在Unity编辑器中脚本组件内显示并且可以修改赋值,比如此例中的speed。
OK,现在回到Unity,把Speed改成10,然后运行游戏,激动人心的时刻要到了!
最左运行游戏,变成蓝色就代表好了咦?为什么UFO在做自由落体运动?尴尬ヾ(。ꏿ﹏ꏿ)ノ゙......前面提到,刚体能让UFO处于物理引擎控制之下,所以添加了刚体的UFO是可以受到物理作用力包括重力的!那怎么样让它不受重力影响呢?把Rigidbody2D组件的Gravity Scale项的数值改成0就可以了。
Gravity Scale现在再运行游戏,UFO不会再自由落体了。按WASD或者方向键试试,可以看到UFO走起来的效果了。修改Speed的值可以改变速度哦。
【扩展补充】
好的习惯:
- 每创建一个GameObject 就进行双标动作:改名、reset Transform
- 每新建一个Script,先拖入到scripts文件夹再编辑
- Script编辑完毕之后,如有新增的public成员变量,要记得在Inspector该脚本下该选项填充数值,或者把对应对象内容拖入到框内。
Q&A:
Q1:Game窗口里面棋盘外面区域是一片蓝色,怎么修改成自己想要的颜色?
A1:选择Hierarchy窗口内的Main Camera,在右侧Inspector的Camera组件内修改Background背景色即可。同学可以把RGB设置成75 75 75,灰色调和Scene窗口一致。
Q2:在脚本里面,Update()和FixedUpdate()有什么不同?为什么在这里我们要使用FixedUpdate()?
A2:Update() 和 FixedUpdate()在游戏中的作用是都会在更新的时候自动循环调用。他们的区别主要就是
-
Update()是在每次渲染新的一帧的时候才会调用,也就是说,这个方法被调用的频率和设备的性能有关。性能好的机器上fps高,同样的时间传输的帧数多,Update被调用的次数多,而性能差的机器就相反。这会导致同一个游戏在不同的机器上效果不一致,有的快有的慢。
-
FixedUpdate()是在固定的时间间隔执行,不受游戏帧率的影响,所以非常适用于处理物理逻辑。因此人们处理Rigidbody的时候经常使用FixedUpdate()。
Q3:那Start()是什么鬼?
A3:游戏初始化的时候调用Start方法,后续不会再调用。而Update之类的都是反复根据他们的规则在调用执行~