教程来自:
http://pixelnest.io/tutorials/2d-game-unity/
中文版教程:
http://www.litpo.com/category/易学的教程/
1.创建第一个场景
Project
“面板上创建如下文件夹:
Scene
“面板上的2D到3D视图切换,可以清楚看到层次:
3.创建主角和敌人
到
”
Textures
“文件夹,创建一个Sprite游戏对象,命名为”
Player
“,
设置其”
Sprite
“属性为刚才导入的主角图片。将此对象放入”
2 – Foreground
“层里,设置其
Scale
为
(0.2, 0.2, 1)。接着,为主角添加盒碰撞体组件,点击”
Add Component
“按钮,选择”
Box Collider 2D
“,设置其
Size
为
(10, 10),虽然这还是大于实际的区域,但已比图片小多了,如下图所示:
Rigidbody 2D
“刚体组件,现在运行可以看到如下结果:
到
”
Textures
“文件夹,创建一个Sprite游戏对象,命名为”
PlayerShot
“,
设置其”
Sprite
“属性为刚才导入的图片
,设置”
Scale
“属性为
(0.75, 0.75, 1)
,添加”
Rigidbody 2D
“组件,其”
Gravity Scale
“属性为0,并且勾选”
Fixed Angles
“属性框
,添加”
Box Collider 2D
“组件,其
Size
为(1, 1),并且勾选”
IsTrigger
“属性
。勾选”
IsTrigger
“属性表示该碰撞体用于触发事件,并将被物理引擎所忽略。意味着,子弹将穿过触碰到的对象,而不会阻碍对象的移动,触碰的时候将会引发”
OnTriggerEnter2D
“事件。创建一个脚本,命名为”
ShotScript
“,代码如下:
|
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 |
|
using UnityEngine; |
MoveScript
“脚本也附加到子弹对象上以便可以移动。保存此对象为预制。接着,让碰撞产生伤害效果。创建一个脚本,命名为”
HealthScript
“,代码如下:
|
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
|
using UnityEngine; |
Poulpi
预制体上。现在运行,让子弹和章鱼碰撞,可以看到如下结果:
如果章鱼的生命值大于子弹的伤害值,那么章鱼就不会被消灭,可以试着通过改变章鱼对象的”
HealthScript
“的hp值。接着,准备可以射击。创建一个脚本,命名为”
WeaponScript
“,代码如下:
|
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
|
using UnityEngine; |
Shot Prefab
“属性为”
PlayerShot
“预制体。打开”
PlayerScript
“脚本,在
Update
()方法里面,加入以下片段:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
void Update() { // … // 5 – Shooting bool shoot = Input.GetButtonDown( “Fire1” ); shoot |= Input.GetButtonDown( “Fire2” ); // Careful: For Mac users, ctrl + arrow is a bad idea if (shoot) { WeaponScript weapon = GetComponent<WeaponScript>(); if (weapon != null ) { // false because the player is not an enemy weapon.Attack( false ); } } |
Attack(false)
方法。现在运行,可以看到如下结果:
接下来,准备创建敌人的子弹。
导入敌人子弹图片
到
”
Textures
“文件夹,
选中”
PlayerShot
“预制体,按下
Ctrl+D
进行复制,命名为”
EnemyShot1
“,然后改变其
Sprite
为刚才导入的图片,设置其
Scale
为
(0.35, 0.35, 1)。接着,让章鱼可以射击。将”
WeaponScript
“脚本附加到章鱼对象上,拖动”
EnemyShot1
“预制体到其”
Shot Prefab
“属性,创建一个脚本,命名为”
EnemyScript
“,用来简单地每一帧进行自动射击,代码如下:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
using UnityEngine; |
可以看到章鱼向右射击了子弹,这是因为代码就是让它那么做的。实际上,应该做到可以朝向任何方向射击子弹。在这里,创建一个空对象,命名为”
WeaponObject
“,删除章鱼预制体身上的”
WeaponScript
“脚本,将”
WeaponScript
“脚本附加到”
WeaponObject
“对象上,并且
拖动”
EnemyShot1
“预制体到其”
Shot Prefab
“属性,设置
”
WeaponObject
“对象的”
Rotation
“属性为(0, 0, 180),然后保存为预制,如下所示:
EnemyScript
“,代码为如下:
|
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 |
|
using System.Collections.Generic; using UnityEngine; |
按这种方式,可以轻易实现多个方向的射击。复制添加一个”
WeaponObject
“对象,让这两个”
WeaponObject
“对象的旋转不同即可。现在主角被章鱼攻击到,但是没有任何伤害。将”
HealthScript
“脚本附加到主角对象上,确保”
Is Enemy
“属性不被勾选。现在运行,可以看到如下结果:
目前,当主角和章鱼碰撞时,仅仅只是阻碍对方的移动而已,在这里改成互相受到伤害。打开”
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 |
|
//PlayerScript.cs //…. void OnCollisionEnter2D(Collision2D collision) { bool damagePlayer = false ; damagePlayer = |
