哈哈,首先解释一下为什么Spritekit系列没有继续更新。从今年(2015)四月份开始,发现Spritekit制作大一些的游戏很累,于是考虑换一款引擎尝试一下。刚好Unity5免费策略推出,2D功能也大大增强,于是开始转投Unity。在朋友鼓励下,推出Unity教程,希望能帮助那些想提高2D游戏开发效率的朋友们。

ps:全系列都会使用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刚刚好。
图片描述

第一个脚本

那么该让主角动起来了,It's time to go! 这一切必须借助脚本来完成,不过很可惜第一个脚本不是Helloworld。我先谈谈脚本语言的选择:作为一个曾经的JS程序员,我很庆幸自己选择了C#进行开发,虽然我当时对C#一无所知。根据我自己的使用经验,JS是一种弱类型语言,游戏客户端开发需要大量使用字典、数组、链表等等,明确知道一个链表里存的是什么鬼,非常的必要。如今我C#也使用的很娴熟了,我都不敢想象如果选择了JS现在的处境会怎么样,代码复杂度高了以后,JS非常的难以维护。

在Project面板中,右键Create,选C# Script,命名为ScrollGround。这个脚本我们挂在地面对象上,让地面向后滚,这样主角就被迫向前跑了,哈哈哈哈。

双击脚本,你将打开一个MonoDevelop编辑器,public class后面的类名如果不是ScrollGround,就改成这个名字。回到Unity编辑器,将脚本拖拽到地面对象的属性面板,如图:
图片描述

然后我们回到MonoDevelop编辑器,这里是用来编写脚本的地方。这个脚本将决定地面对象的一切行为,全权控制。Start函数是这个对象第一次出现在场景中时会调用的函数,做一些初始化功能,Update函数每一帧都会执行一次,英文注释里都有解释,MonoBehavior是Unity的游戏对象基础类,继承这个才可以用这些函数。

第一行代码

我们来一点点尝试脚本的编写吧,即使不会C#也没关系,对着教程,自己多练习,慢慢就会熟悉的。

Update函数中,加入下面这一行代码:
transform.position -= new Vector3(Time.deltaTime, 0, 0);
我一点点来解释:transform对应的是(挂载该脚本的游戏对象的)属性面板里的Transform栏,所以在脚本中修改position就相当于在面板里修改position。后面的这个是一个三维数组对象,Time.deltaTime是上一帧到这一帧的间隔时间,非常小的一个数值。在坐标值里减去一个很小的x轴位移,那么这个对象会每一帧向左移动一点点。回到Unity,播放一下游戏,果然如此!大人真乃神人也!

光滚动还不够,地面好像有点短。没关系,我们进入Unity编辑器,从project面板中再拖拽一个地面对象到关系面板中,并设置其x坐标,挂载ScrollGround脚本,最终如下:
图片描述
这时执行游戏,就会发现地面变长了。但是跑着跑着,还是不够用,怎么办呢?我们去脚本里重置一下前一块地皮就可以了。

进入MonoDevelop,在刚才的那一行代码下面添加下列代码:

if(transform.position.x < -11.36f){
    transform.position = new Vector3(11.36f, transform.position.y, 0);
}

这里的11.36是刚才我们在编辑器中看到的那个横坐标数值,当地面移动到左侧这个距离的时候,将其位置重置到最右侧,这样就可以无限循环了。C#中所有的浮点数,都必须带上f后缀。现在我们去场景中播放一下,虽然还有点瑕疵,但是基本实现了功能了。大家可以通过调整地面长度或者增加第三块地面,来使效果更加完美,我这里就不赘述了。

第一个动画

回到Unity编辑器,现在我们先导入另外几张图片,然后选中所有的素材,一共是6张跑步动画帧,拖拽到关系面板中主角对象身上,然后主角对象上就创建出了一个Animator组件。如图:
图片描述
这个组件也会放在素材所在的文件夹里,看project面板中会多出一个带播放按钮的对象和一个流程图一样的对象。左边的是刚才形成的动画片段,右边的是主角对象的动画控制器。动画分为动画片段和控制器两部分,片段挂在控制器中,由控制器决定播放哪一段,这两部分是分开的。如果操作无误,下面播放游戏,就能看到主角跑起来啦~!哦妹子英!还是很简单的吧。

下一步我会继续教大家如何做出跳跃的效果。敬请期待!

下一篇:(原创)Unity2D 开发 + UGUI 系列教程二


今天太晚了,第一篇先更新这么多,如果大家喜欢请关注专栏,如果不喜欢或者觉得没什么卵用,请在下面评论指出,我一定认真反思。关于漏掉的细节,以及教程难度上的建议,也可以在下面指出。


敲键盘的猫
772 声望131 粉丝

一只热爱科技的猫