这是一个横版射击游戏。 教程来自:
http://pixelnest.io/tutorials/2d-game-unity/ 中文版教程:
http://www.litpo.com/category/易学的教程/
教程文章已经详细地介绍实现过程,这里就不再复述,只做一些简单的笔记记录,以供备忘。
1.创建第一个场景
新建工程。接着在"
Project"面板上创建如下文件夹:
接着在" Hierarchy"面板上创建多个空对象,形成以下结构:
![](https://i-blog.csdnimg.cn/blog_migrate/ba0d4074f8536ae77e35d44bfba0d88a.png)
接着在" Hierarchy"面板上创建多个空对象,形成以下结构:
![](https://i-blog.csdnimg.cn/blog_migrate/b58ce6387c997e19750cc1f319ef3fe9.png)
这些空对象的
Position保持为(0, 0, 0)即可。保存场景,名称为"
Stage1"。
2.添加显示背景
将背景图片放入"
Textures"文件夹,确认这张图片的纹理类型,即"
Texture Type"属性为" Sprite",如下图所示:
在场景中添加一个Sprite游戏对象,设置其" Sprite"属性为刚才导入的背景图片。重命名这个对象为" Background1",将其移动到" Level -> 0 - Background"里面,设置其" Position"为 (0, 0, 0)。接着添加背景元素。导入平台图片到 " Textures"文件夹,选中" platforms"图片,设置其" Sprite Mode"为" Multiple",然后点击" Sprite Editor",如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/2aa93d8bb3abdc651eab9f980c943ae5.png)
在场景中添加一个Sprite游戏对象,设置其" Sprite"属性为刚才导入的背景图片。重命名这个对象为" Background1",将其移动到" Level -> 0 - Background"里面,设置其" Position"为 (0, 0, 0)。接着添加背景元素。导入平台图片到 " Textures"文件夹,选中" platforms"图片,设置其" Sprite Mode"为" Multiple",然后点击" Sprite Editor",如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/5f807652ce74a8f2616f75d19c739a3a.png)
在弹出的"
Sprite Editor"窗口中,进行绘制每个平台的包围矩形,以便将纹理分割成更小的部分。然后分别命名为"
platform1"和"
platform2",如下图所示:
创建一个新的 Sprite游戏对象,设置其" Sprite"属性为" platform1"。再在创建新 Sprite对象, 设置其" Sprite"属性为" platform2"。将它们放置到" 1 - Middleground"对象里,并且确认它们的Z坐标为0。将这两个对象从" Hierarchy"面板拖动到" Project"面板下的" Prefabs"文件夹,保存成预制对象。接着,为了避免显示顺序问题,修改下游戏对象的Z坐标,如下所示:
![](https://i-blog.csdnimg.cn/blog_migrate/c6a907a3bdc8ad0b81320ab85cad6ce6.png)
创建一个新的 Sprite游戏对象,设置其" Sprite"属性为" platform1"。再在创建新 Sprite对象, 设置其" Sprite"属性为" platform2"。将它们放置到" 1 - Middleground"对象里,并且确认它们的Z坐标为0。将这两个对象从" Hierarchy"面板拖动到" Project"面板下的" Prefabs"文件夹,保存成预制对象。接着,为了避免显示顺序问题,修改下游戏对象的Z坐标,如下所示:
Layer | Z Position |
0 - Background | 10 |
1 - Middleground | 5 |
2 - Foreground | 0 |
此时,点击"
Scene"面板上的2D到3D视图切换,可以清楚看到层次:
![](https://i-blog.csdnimg.cn/blog_migrate/64d86a59a1968887299e519805570e42.gif)
3.创建主角和敌人
导入主角图片 到 "
Textures"文件夹,创建一个Sprite游戏对象,命名为"
Player", 设置其"
Sprite"属性为刚才导入的主角图片。将此对象放入"
2 - Foreground"层里,设置其
Scale为 (0.2, 0.2, 1)。接着,为主角添加盒碰撞体组件,点击"
Add Component"按钮,选择"
Box Collider 2D",设置其
Size为 (10, 10),虽然这还是大于实际的区域,但已比图片小多了,如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/90a73ce9a84537c1ec153a0f6317ac7c.png)
(可以通过按住Shift键,来调整绿色碰撞范围)
接着,再为主角对象添加"
Rigidbody 2D"刚体组件,现在运行可以看到如下结果:
可以看到主角往下落了,这是因为刚体带有重力,但在这个游戏不需要用到,将" Gravity Scale"属性设为0即可。另外,不想因为物理而引起的主角旋转,则将" Fixed Angles"属性勾选上。完整的设置如下图所示:
开始准备让主角移动。在" Scripts"文件夹里,创建一个C#脚本,名称为" PlayerScript",实现让方向键移动主角,代码如下:
![](https://i-blog.csdnimg.cn/blog_migrate/4ac80e0f61a6194e602a5cca18e65fed.gif)
可以看到主角往下落了,这是因为刚体带有重力,但在这个游戏不需要用到,将" Gravity Scale"属性设为0即可。另外,不想因为物理而引起的主角旋转,则将" Fixed Angles"属性勾选上。完整的设置如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/770ea29714099fefc44f914467320b0b.png)
开始准备让主角移动。在" Scripts"文件夹里,创建一个C#脚本,名称为" PlayerScript",实现让方向键移动主角,代码如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using UnityEngine;
/// <summary> /// Player controller and behavior /// </summary> public class PlayerScript : MonoBehaviour { /// <summary> /// 1 - The speed of the ship /// </summary> public Vector2 speed = new Vector2( 50, 50); // 2 - Store the movement private Vector2 moveme |