unity——Survival Shooter:计分&生成敌人

9.计分

我们现在要记录下来屠杀的人头数,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是一个静态数据,直接通过类调用。

10.生成敌人

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加入进去。到这时,就可以生成敌人了。

至此,我们的游戏就差最后一步。

你可能感兴趣的:(unity)