Unity2D 开发 + UGUI 系列教程(一)
随着 Unity 5 免费策略的推出,其 2D 功能得到了显著增强,因此我转而投身于 Unity 开发。在朋友的鼓励下,我决定推出这套 Unity 教程,希望能帮助那些想要提高 2D 游戏开发效率的朋友们。需要注意的是,本系列教程将使用 5.2.0 版本(目前最新版本为 5.2.2)进行开发。
那么,让我们开始吧!我将通过制作一些常见且简单的小游戏,帮助大家从零开始学习。首先,我们来做一个跑酷小游戏。
初识 Unity2D
创建新项目
创建一个新项目,我将其命名为 JustRun。需要特别注意的是,项目类型分为 3D 和 2D,这里我们选择 2D。点击创建后,即可进入 Unity 主界面。
常用面板介绍
主界面中有四个最常用的面板,下面我将进行简要解释,随着后续的使用,大家会逐渐深入理解。
- 面板 1:游戏对象关系面板,它能够直观地展示各个游戏对象之间的父子关系。
- 面板 2:属性面板,用于展示所选对象的各个组件和属性。
- 面板 3:场景编辑器,大部分场景编辑工作都在此完成。
- 面板 4:工程面板,可用于查看所有的资源和脚本。
如果大家的面板结构与我不同,可以自行对照,也可以通过拖拽标签栏将各个面板移动到合适的位置。
Unity 采用所见即所得的开发方式,这是我个人比较偏爱且十分直观的开发形式。与之不同的是,很多游戏引擎或框架采用纯代码开发,只有在运行后才能知道游戏的实际样子。
添加图片到场景
接下来,我们进行实际操作。在电脑中随便找一张图片,将其从文件夹拖拽到工程面板的 Assets 文件夹中,然后再拖拽到左侧的关系面板。此时,屏幕正中央就会出现一个可爱的小萌物。点击编辑器顶栏的播放按钮,游戏即可开始运行,再次点击则退出播放模式(细心的朋友会发现,进入播放模式后,Scene 选项卡会切换到 Game 选项卡)。
添加地面
保存当前场景
按下 Command + s 或者 Ctrl + s,将当前场景保存到 Assets 文件夹中,并命名为 Main。
添加地面素材
由于目前我还不清楚如何在 Unity 中创建二维形状,所以大家可以使用 PS 制作一个纯色地面,而我将使用一个酷炫的素材。按照之前的方法,将素材添加到场景中,这时可能会发现主角被地面挡住了。
调整地面位置
在关系面板中选中地面,然后查看属性面板。Transform 面板用于设置游戏对象的各种位置和姿态属性,包括三个维度的坐标、角度和缩放。经过观察,将地面 Position 里的 Y 值设置为 -1.3 比较合适。
第一个脚本
脚本语言选择
现在,我们要让主角动起来,这需要借助脚本来实现。在选择脚本语言时,我作为一名曾经的 JS 程序员,庆幸自己选择了 C# 进行开发,尽管当时我对 C# 一无所知。根据我的使用经验,JS 是一种弱类型语言,而游戏客户端开发需要大量使用字典、数组、链表等数据结构,明确知道链表中存储的数据类型非常重要。随着代码复杂度的增加,JS 的维护难度会变得很高,而我现在已经能够熟练使用 C# 了。
创建并挂载脚本
在 Project 面板中,右键选择 Create,然后选择 C# Script,并命名为 ScrollGround。将这个脚本挂载在地面对象上,目的是让地面向后滚动,从而使主角被迫向前跑。
双击脚本,将打开 MonoDevelop 编辑器。如果 public class 后面的类名不是 ScrollGround,请将其修改为该名称。回到 Unity 编辑器,将脚本拖拽到地面对象的属性面板。
编写脚本代码
回到 MonoDevelop 编辑器,这里是编写脚本的地方。Start 函数会在对象第一次出现在场景中时调用,用于进行一些初始化操作;Update 函数会每一帧执行一次。MonoBehavior 是 Unity 游戏对象的基础类,继承该类才能使用这些函数。
在 Update 函数中,加入以下代码:
transform.position = new Vector3(transform.position.x - 0.1f * Time.deltaTime, transform.position.y, transform.position.z);
下面对代码进行解释:transform 对应挂载该脚本的游戏对象属性面板里的 Transform 栏,在脚本中修改 position 相当于在面板中修改。Time.deltaTime 是上一帧到这一帧的间隔时间,是一个非常小的数值。通过在坐标值里减去一个很小的 x 轴位移,对象会每一帧向左移动一点点。回到 Unity 播放游戏,就可以看到效果。
目前地面看起来有点短,我们可以从 project 面板中再拖拽一个地面对象到关系面板中,并设置其 x 坐标,同时挂载 ScrollGround 脚本。此时执行游戏,会发现地面变长了。但跑一段时间后,地面还是不够用,我们可以在脚本里重置前一块地皮的位置。在刚才的代码下面添加以下代码:
if (transform.position.x < -11.36f)
{
transform.position = new Vector3(11.36f, transform.position.y, transform.position.z);
}
这里的 11.36 是我们在编辑器中看到的横坐标数值,当地面移动到左侧这个距离时,将其位置重置到最右侧,从而实现无限循环。在 C# 中,所有的浮点数都必须带上 f 后缀。现在去场景中播放游戏,虽然还有一些小瑕疵,但基本功能已经实现。大家可以通过调整地面长度或增加第三块地面来优化效果。
第一个动画
回到 Unity 编辑器,导入另外 6 张跑步动画帧图片,选中所有素材后拖拽到关系面板中的主角对象上。此时,主角对象上会创建出一个 Animator 组件。在 project 面板中,会多出一个带播放按钮的对象和一个类似流程图的对象,左边的是动画片段,右边的是主角对象的动画控制器。动画由动画片段和控制器两部分组成,片段挂载在控制器中,由控制器决定播放哪一段。如果操作无误,播放游戏时就能看到主角跑起来了。
下一步,我将继续教大家如何实现跳跃效果,敬请期待!