简单的介绍与起步

Unity的Playground是一个用来制作拥有物理引擎的2D游戏开发框架(framework),可以说非常适合初学者了,而且使用Playground框架制作2D游戏不需要编码的工作,单纯在Unity的编辑器中就可以完成,因为Playground提供了很多但任务化的Components,这些Components很容易被结合起来使用,从而得到各种各样的功能。

开始创建游戏

创建游戏的过程和上一节中的创建方式一样,只是要将游戏设置为2D,这里我们创建一个名为Playground2D的游戏项目。

创建一个2D游戏项目
创建一个2D游戏项目

引入Assets资源

为了使用Playground框架,需要在Asset Store中搜索Unity Playground并下载引入其资源包,在顶部菜单栏的Window中选择Asset Store即可进入资源商店,搜索找到Unity Playground选择下载(Download)然后引入(Import),再进行一系列操作后一气呵成。

注:在Asset Store下载的资源的默认保存位置:C:\Users\你的用户名\AppData\Roaming\Unity\Asset Store-5.x
(AppData这个文件夹一般情况下是隐藏的。)

引入Playground框架
引入Playground框架
引入Playground框架
引入Playground框架
引入Playground框架
引入Playground框架
引入Playground框架
引入Playground框架
引入Playground框架
引入Playground框架

引入成功后,可以看到Playground框架已经为我们准备了很多资源,主要的资源集中在Scripts,打开这个文件夹可以发现很多已经写好的可以直接使用的脚本。

引入Playground框架后得到的Assets
引入Playground框架后得到的Assets

创建游戏背景

在上一篇文章中出现的内容将不详细介绍,这里将SampleScene重命名为MainScene并保存于Scenes目录下,保留Main Camera。

选择Assets->Images->Backgrounds下的BG_Space背景图,拖动到Hierarchy面板中。

引入背景图片
引入背景图片

在Inspector面板中的Sprite Renderer(着色器)中将起Draw Mode(绘制模式)改为Tiled(平铺),还可以扩大它的大小,这里将其X、Y的Size值均设置为100。然后展开Visibility Options(可视化选项),将Sorting Layer(排布布局)设置为Background(背景),这样可以使得其他所有的GameObject均在其上方。

设置背景参数
设置背景参数

添加Player

选择Assets->Images->Spaceships下的一个图像作为Player,这里选择了一个红色的飞船,并将其拖动到Hierarchy面板中。在Inspector面板中,为了让飞船实现碰撞等物理效果,为其添加刚体属性,只不过这里我们选择添加Rigidbody 2D,即选择Add Component,找到或者搜索该Component之后添加。
显然,我们需要将它的Gravity(重力)置零,为了不让其在受到一小点点的力后运动起来停不下来,将其Friction(摩擦力)设置一个合理的值,这里设置为2,Angular Friction(角摩擦)可以保持0.05的预设值。

设置刚体参数
设置刚体参数

接下来就可以体会到Playground框架的强大之处,因为它为我们准备了各种各样的脚本,运用这些脚本可以直接实现很多游戏情景,而我们要做的只是将对应的脚本添加给对应的GameObject,并且设置脚本需要的public属性的值,也就是在Inspector面板中设置这些值即可。
首先,为了让飞船能够运动起来,为其添加一个推动力的脚本:Push,你可以选择从Assets中的Scirpts目录下找到这个脚本拖动到Inspector面板中,也可以在Add Component中直接搜索添加该脚本。然后更改Push Strength(推力大小)为适当的值,这里置为8,Axis(推力的方向)为Y。此时运行游戏可以通过按下空格键使飞船运动起来。

添加Push脚本并设置参数
添加Push脚本并设置参数

再添加Rotate脚本,这个脚本可以设置飞船的旋转,很明显Type Of Control设置控制方式,这里选择WASD控制,Speed选项控制旋转速度,这里设置为2,因为我不喜欢操作太灵敏。

设置Rotate脚本参数
设置Rotate脚本参数

这里还给飞船增加了一点儿可爱的属性,找到Assets->Prefabs->Particles下的P_Flame,拖动到Hierarchy成为飞船的子物体,让其跟随飞船运动,然后通过选择和平移调整一个合适的位置加到飞船的尾部。

为飞船添加喷射火焰
为飞船添加喷射火焰

设置Camera

设置Camera,改变其视野范围(调整Frame Size,此处设置为10),并添加一个Follow脚本使其固定跟随一个物体,直接点击Camera中的Add Camera Follow script即可添加,然后将我们的Player也就是飞船拖动到Target作为其参数即可。

设置Camera自动跟随脚本
设置Camera自动跟随脚本

注:如果想要回到最原始的Components,可以在顶部菜单栏的Playground下选择Turn Playground Off

可以设置关闭Playground框架
可以设置关闭Playground框架

添加障碍物

选择Assets->Images->Asteroids下的一个石头图像作为障碍物,同样需要为其添加Rigidbody 2D属性,修改其中的值。
在物理学中我们知道,如果一个物体没有受到任何摩擦力,在其受到一个力从而获得一个初速度后会一直以这个速度运动下去,所以为了避免这种情况的发生,我们还是需要为其Friction赋予一个合理的值。

添加障碍物的刚体属性
添加障碍物的刚体属性

添加Collider

为了有碰撞效果,为飞船和石头均添加Collider属性

添加障碍物的Collider属性
添加障碍物的Collider属性

此时运行游戏,会发现飞船可以撞动石头

添加障碍物后测试运行成功
添加障碍物后测试运行成功

添加计分机制

为飞船添加一个Health System(健康系统),其实就是我们常说的这个东西还有多少滴血,直接添加Health System脚本就行,可以看到,我们可以预设生命值,这里默认为3

添加生命值系统
添加生命值系统

飞船碰撞到了石头,飞船的生命值就减少一,这需要我们为石头添加Modify Health脚本,然后看到有两个可选参数,第一个Destroy When Activated(起作用时销毁)如果选中的话就会在石头起到“减血”作用后销毁石头,这里不选中,第二个Health Change即为对生命值的变化,这里设置为-1很合理。

设置石头的减生命值功能
设置石头的减生命值功能

添加UI

为了让生命值和分数显示出来,我们为Hierarchy目录添加Assets下的Prefabs下的UserInterface,UI自动显示在了游戏界面中。

添加UI
添加UI

为了让Untiy清楚生命值和分数都记录的是谁的,这里需要为Player添加一个Player的Tag,添加Tag已经在上一篇中详细地提到了。

添加Player的Tag
添加Player的Tag

此时运行游戏,会在你的生命值消耗完时显示Game Over

运行游戏检测游戏结束UI
运行游戏检测游戏结束UI

添加胜利条件

到什么时候才算胜利呢?UI Script处可以设置,比如这里默认的为一个玩家、计分制、5分为胜利:

添加胜利条件
添加胜利条件

创建打击物体

为了不让我们的飞船显得太过于脆弱,为其添加发射激光的功能。

这里选择Assets->Images->Projectiles下的LasersMid作为发射的激光,拖动到Hierarchy下。

为其添加Rigidbody 2D和capsule Collider 2D(胶囊状的碰撞器)使其拥有碰撞属性,正如上一篇中所提到的,还需要选中Is Trigger一项。

基本的Components
基本的Components

Playground框架还为我们准备了Bullet(子弹)脚本使其在特定条件下产生一个该对象的引用,即发射一发子弹。
添加了Bullet脚本后的激光束,将其拖动回Assets下的Prefabs目录下成为一个预设体。

添加Bullet脚本
添加Bullet脚本

现在有了子弹,还需要一个发射子弹的机枪,我们在飞船下新建一个空的子物体,将其命名为BulletShooter,将其拖动至飞船的顶部也就是发射的地方。

创建一个“机枪”
创建一个“机枪”

为刚创建的BulletShooter添加一个Object Shooter的脚本,在Inspector面板中设置其参数。
Prefab To Spawn(要发射的预设体)当然是拖动我们已有的Prefab下的子弹预设体到这里作为参数,Key To Press是发射的按键,这里设置为W键,Creation Rate是产生的速度,这里设置为0.2,Shoot Speed为发射速度,这里设置为10,shoot Direction为发射方向,显然是沿Y方向发射,所以将X设为0,Y设为1。

设置Shooter脚本
设置Shooter脚本

射击中石头时石头就需要消失并且我们要得分,所以为石头再添加一个脚本:Destory For Points,这个脚本使得物体被击中时销毁并为我们的Player增加分数,Points Worth即其所价值的分数,这里我们设置为0,因为并不想在击中石头后得到分数。

被击中时销毁物体
被击中时销毁物体

添加收集体

为游戏添加一些在太空中漂浮的外星人,用我们驾驶的飞船去收集这些外星人,收集到的外星人就进入飞船(消失),看起来很简单了。

选择Assets->Images->Creatures下的Alien1作为外星人,显然它需要拥有以下的Component:

  1. Rigidbody 2D:刚体属性
添加刚体属性
添加刚体属性
  1. Polygon Collider 2D:碰撞机属性
添加碰撞机属性
添加碰撞机属性
  1. Auto Rotate:自动旋转
添加自动旋转属性
添加自动旋转属性

再添加一个Collectable(可收集的)脚本,这个脚本表示这是一个可以被收集的物体,Points Worth表示收集到后得到的分数,这里默认1不变。

添加Collectable脚本
添加Collectable脚本

这时候运行游戏看一下会发现收集外星人后Score会增加。

收集外星人Score增加
收集外星人Score增加

完善游戏

最有就很简单了,对石头和外星人进行复制(Duplicate),然后任意摆放,如何设计游戏关卡就是见仁见智的问题了,为了能够胜利,要使得外星人的个数多于在UI中设计的胜利条件的数值哦。

完善游戏
完善游戏

关于文档

在引入Playground框架后,可以在Assets文件夹下发现Documentation目录,该目录有关于Playground框架的每一个脚本的具体功能和参数的设置方法,非常值得参考。

参考文档
参考文档

Cheatsheets

Cheetsheets
Cheetsheets
Cheetsheets
Cheetsheets
Cheetsheets
Cheetsheets
Cheetsheets
Cheetsheets
Cheetsheets
Cheetsheets
Cheetsheets
Cheetsheets
Cheetsheets
Cheetsheets

参考资料:https://unity3d.com/learn/tutorials/s/unity-playground

本节内容的完整官方教程视频(英文无字幕)与官方文档分享:https://pan.baidu.com/s/1MyITuPbK6_zO8rtK_i81pg 提取码:7xti