我们现在要记录下来屠杀的人头数,emmm确切的说是积分榜。
回到Canvas里面,在HUDCanvas下新建一个Text。打字,设置字体。unity没有内置字体,也不能访问系统字体,所以字体必须导入。
然后我们加入一些炫酷的阴影效果,加入一个Shadow的组件。
下面我们把计分的脚本拉到ScoreText上面。
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class ScoreManager : MonoBehaviour
{
public static int score;
Text text;
void Awake ()
{
text = GetComponent ();
score = 0;
}
void Update ()
{
text.text = "Score: " + score;
}
}
score是一个静态数据,直接通过类调用。
ok now,我们基本上完成了对所有角色和敌人的设置。现在我们要自动的生成敌人。将Hierarchy里面的ZomBunny存为一个prefab,然后再Hierarchy里面删掉他。
同样,我们建立ZomBear和Helephant的预设。建立预设的时候可以有一些小技巧,因为每一个预设里面有很多的设置,一个一个把组件复制过去显得有一丢丢愚蠢。我们直接在Hierarchy里面复制一个ZomBunny的对象,在我们复制过来的ZomBunny1的Inspector里面进行修改。
在得到ZomBear和Hellephant的预设后,我们通过设定一个新的GameObject来进行对敌人生成的管理。我们将它命名为EnemyManager。首先将位置设置在(0,0,0)(这是个好习惯一定要坚持)。
接下来我们将EnemyManange的Script添加进去。
public PlayerHealth playerHealth;
public GameObject enemy;
public float spawnTime = 3f;
public Transform[] spawnPoints;
约定了玩家生命值(因为只有在活着的时候才生成敌人),敌人,生成的时间差(在后续的Inspector里面可以更改),生成的位置。
值得一提的是,生成位置的这个变量是一个可以储存多个变量的数组,在每一个元素中能储存的是xyz的坐标和旋转角度和scale。但实际上本例中我们并不准备使用它,我们对于每一个敌人只产生一个生成点,如果后续打算产生多个生成点的话,可以直接进行使用。
void Start ()
{
InvokeRepeating ("Spawn", spawnTime, spawnTime);
}
InvokeRepeating方法有三个参数(A,B,C)。意思是在B时间结束后,执行A方法,在等待C时间后再次执行A方法。此处A的调用方式是字符串。
void Spawn ()
{
if(playerHealth.currentHealth <= 0f){
return;
}
int spawnPointIndex = Random.Range (0, spawnPoints.Length);
Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
}
ok,如果我们的人物已经死的话,就结束这个脚本。如果没有的话,我们继续生成。但实际上在本例中我们并没有使用这个方法,因为这个方法实际上是在随机的点处生成了随机的敌人。当然这样可能就充满了乐趣。使用一个Random方法,从0到spawnPoints的最后选择一个位置,接下来使用Instantiate方法,在B位置旋转C的角度生成A。
完整代码:
using UnityEngine;
public class EnemyManager : MonoBehaviour
{
public PlayerHealth playerHealth;
public GameObject enemy;
public float spawnTime = 3f;
public Transform[] spawnPoints;
void Start ()
{
InvokeRepeating ("Spawn", spawnTime, spawnTime);
}
void Spawn ()
{
if(playerHealth.currentHealth <= 0f){
return;
}
int spawnPointIndex = Random.Range (0, spawnPoints.Length);
Instantiate (enemy, spawnPoints[spawnPointIndex].position, spawnPoints[spawnPointIndex].rotation);
}
}
在搞定这个代码段后,我们要做的是把他加入到EnemyManager里面,一次性加入3个,同时把player和每个对应的Enemy加入进去。到这时,就可以生成敌人了。
至此,我们的游戏就差最后一步。