前言
这次呢,又接到一个“个人开发一个独立项目”的大作业。我毅然决然选择了做一个休闲小游戏(毕竟这是我的爱好吧),时间大概是3周左右。于是想到来这里记录整个心路历程(摸打滚爬)。
新建
所用版本:Unity 2018.2.4f1,Microsoft Visual Studio Community 2015
要新建一个项目。
项目名:IcySpaceShooter
模式:2D
弄个最舒服的窗口布局。
可以拖动标签来调整布局,并且通过Window>Layouts>Save Layouts
还可以保存当前布局。
想做一个俯视视角、又在一个正方形区域游玩的小游戏。
Edit>Project Settings>Player>Resoluton and Presentation
FullScreen Mode:Windowed
Default Screen Width:1024
Default Screen Height:1024
素材
主角是一架飞机…飞机好难做啊,就一个正方形吧
Project里面来管理我的游戏文件们,我们就在目录下新建一个Sprites
文件夹吧。
Sprite在2D游戏中是精灵的意思,指一个游戏实例,而叫Sprite的文件夹是用来管理精灵们的图片素材。
我随即右键单击了新文件夹Sprites
,Create>Sprites>Square
得到了一个叫Square的小白。从Inspector窗口知道,他是一个4x4的白色正方形。还有个控制尺寸的属性:Pixels Per Unit .我把它设置为16。并且重命名为sprPlayer
。
Pixels,像素,是图像中的单位。
Unit是Unity中的单位长度,Scene窗口里的网格线就是以1 Unit为单位绘制的。
Pixels Per Unit就代表这个图片在游戏中的默认显示比例,值越大图片将越小。
先从第一种敌人开始吧…也做成正方形好了
继续在Sprites
文件夹下新建,还是改那几个熟悉的属性:
名字:sprEnemy1
Pixels Per Unit:32(这样敌人比主角小一点)
为了更有一点区分度,在画图软件里把敌人的图片改成红色。
Enemy1虽然攻击方式简单,只是漫无目的的直线飞行,但凭借他们庞大的数量,很多时候也是个让人头疼的对手。
两个基本素材就这么做好了!
精灵
光有一张图片不行,迟早要做成游戏里的实例
我们在Hierarchy窗口右键,2D Project>Sprite
得到一个新的精灵。每当我们在此新建时,一定要做这两步:
- 重命名(这里我们命名Player)
- 点击Inspector下的Transform标签的小齿轮,找到Reset来初始化坐标(尽管之后会改变)
Player的Sprite还是’None’,那就把sprPlayer
拖到Player的Sprite中。
可以在Game窗口看到他现在这个中规中矩的大小。
之后用同样的方式来做Enemy1。
脚本
我该如何控制主角呢
到这里就需要一定的编程基础了,因为Unity的脚本是用C#来实现的。
首先要在Unity中创建脚本文件,我们再次回到Project窗口,新建一个叫Scripts
的文件夹,用来存放我们在游戏中用到的脚本们。
我们的第一个脚本叫做playerMoveController
——在新的文件夹中右键Create>C# Script
即可创建一个默认脚本。随后双击打开,Unity会提示“启动VS中”(所以没安装VS的赶紧啦)
在VS中可以看到,这个脚本实际上就是一个类。
一般玩家都习惯用WASD和方向键来控制上下左右。
我们就插入下面这段代码:
public class playerMoveController : MonoBehaviour
{
public float moveSpeed;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
{
transform.Translate(Vector2.up * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
{
transform.Translate(Vector2.down * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow))
{
transform.Translate(Vector2.left * moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow))
{
transform.Translate(Vector2.right * moveSpeed * Time.deltaTime);
}
}
}
代码说明:
1.moveSpeed用来调整运动速度。
2.Update()是一个每帧都调用的函数,这个脚本每帧都会检测WASD或方向键是否被按下,如果是的话,就做出相应方向的坐标变换。
3.Time.deltaTime:表示1帧的时间。
组件
要告诉Unity谁来使用这个脚本,可是要怎么告诉呢
保存脚本回到Unity,点击刚刚创建的精灵Player,把playerMoveController
拖到Inspector中,可以看到新增了我们自定义的组件Player Move Controller,并且神奇的出现了一个"Move Speed"——和代码中的moveSpeed相对应。现在Player就会运行脚本中的代码了。
在脚本中自定义的类成员是可以在Unity中进行赋值的。
现在点击顶部的播放键,就可以看到预览版啦,记得用键盘操作一下!