Menu
CoddyTech

抵达基地

Coddy Unity 塔防游戏 课程的第 3 课,共 25 课。

最后一个路标上的敌人到达了基地:它离开了,基地损失了生命值。生命值由 GameManager 管理。很快,敌人将由预制体创建,而预制体无法指向场景中的 GameManager,因此敌人会通过静态事件报告。这个事件属于 Enemy 类,所以 GameManager 只需订阅一次,就能收到每个敌人的消息,包括之后创建的敌人。敌人通过 ReachedBase?.Invoke(this); 触发事件:如果没有监听者,? 会跳过调用;this 则会告诉监听者是哪个对象成功到达了基地。

void OnEnable()
{
    Enemy.ReachedBase += OnReachedBase;
}

void OnDisable()
{
    Enemy.ReachedBase -= OnReachedBase;
}

静态事件会一直存在,直到游戏结束,因此每个 += 都需要对应的 -=:如果已销毁的 GameManager 没有取消订阅,仍然会收到调用。

challenge icon

挑战

简单

到达基地的敌人会扣除生命值。

  1. 在 EnemyData 中,添加 public int damage;。
  2. 在 Enemy 中,添加 public static event Action<Enemy> ReachedBase;(using System;)。到达最后一个路径点时,触发该事件并销毁敌人。
  3. 在 GameManager 中,添加 [SerializeField] private int startLives = 20; 和 private int lives;,并在 Start 中设置 lives。像上面那样订阅事件;OnReachedBase 会从生命值中扣除 enemy.data.damage。

按下“开始”:两名敌人都会在基地消失。然后点击“检查”。

亲手试试

using UnityEngine;

// 之后再实现:生命值、金钱、HUD,以及胜负判定。
public class GameManager : MonoBehaviour
{
}

Unity 塔防游戏中的所有课

自己练习: Unity 在线编辑器