如何在unity中制作塔防游戏——通知系统

如果你喜欢我们的教程,欢迎加入泰然网Unity交流群201505161

很久没有更新Unity相关的教程了,这一次我们接着上一次的游戏继续制作

通知玩家

在设置成群的运动之前,需要让玩家知道即将到来的袭击。还有,为什么不在屏幕顶部显示当前这波敌人的数量?
几个GameObjects都需要这波敌人的信息,所以要将它添加到GameManager的GameManagerBehavior 组件。
在MonoDevelop中打开GameManagerBehavior.cs 并添加这两个变量

public Text waveLabel;
public GameObject[] nextWaveLabels;

waveLabel 存储了从屏幕右上角读取的一波敌人数量的引用。nextWaveLabels 存储了两个GameObjects,当两个游戏对象结合到一起时,会创建一个动画来显示新一波进攻的开始,像下图所显示:

保存文件并切换到unity。在Hierarchy中选择GameManager 。点击Wave Label右边的小圆圈,在Select Text 对话框中,选择 Scene 标签中的WaveLabel 。

现在将Next Wave Labels 的Size 设置为2。然后和设置Wave Label的方法一样给 Element 0 分配NextWaveBottomLabel 并且Element 1 分配NextWaveTopLabel 。

如果玩家在游戏中输掉了,将不会再看到下一波敌人的消息。为了控制这个,在MonoDevelop切换到GameManagerBehavior.cs 并添加另一个变量:

publicbool gameOver = false;

在gameOver 存储玩家是否输掉了游戏。
再次,会用这个属性来保持游戏元素与当前这波敌人同步。在GameManagerBehavior中添加以下代码:

private int wave;
public int Wave {
  get {return wave;}
  set {
    wave = value;
if(!gameOver){
for(int i =0; i < nextWaveLabels.Length; i++){
        nextWaveLabels.GetComponent<Animator>().SetTrigger("nextWave");
    }
}
    waveLabel.text="WAVE: "+(wave +1);
}
}

创建私有变量,属性和getter方法应该已经习惯了,不过setter方法有些棘手。
用新的value来更新wave 。
然后检查游戏还没有结束。如果是这样,就要迭代nextWaveLabels 里所有的标签——这些有Animator 组件的标签。为了触发Animator 的动画需要设置一个nextWave触发器。
最后,将waveLabel的text 设置为wave + 1。为什么是+1?——正常人不会从零开始计数。奇怪哈,我也知道:]
在Start()中,设置成这个属性值:

Wave = 0;

从Wave 为 0开始计数。
保存文件,然后运行unity场景。Wave正是从1开始读取。

Waves: Spawn, Spawn, Spawn一波波敌人:一大批,一大批,一大批

这点显而易见,不过需要能够创建更多的敌人来成群结队释放——现在还不能做这个。比外,当前这波敌人没有被彻底消灭时不可以产生下一波敌人——至少现在是这样。
因此,游戏必须能够识别出场景中是否还有敌人, Tags 是一个分辨游戏对象的好方法。

下一期我们会讲解如何创建敌人标签

标签: 新手入门, unity, unity2d, unity制作塔防游戏

?>