抵达基地
Coddy Unity 塔防游戏 课程的第 3 课,共 25 课。
最后一个路标上的敌人到达了基地:它离开了,基地损失了生命值。生命值由 GameManager 管理。很快,敌人将由预制体创建,而预制体无法指向场景中的 GameManager,因此敌人会通过静态事件报告。这个事件属于 Enemy 类,所以 GameManager 只需订阅一次,就能收到每个敌人的消息,包括之后创建的敌人。敌人通过 ReachedBase?.Invoke(this); 触发事件:如果没有监听者,? 会跳过调用;this 则会告诉监听者是哪个对象成功到达了基地。
void OnEnable()
{
Enemy.ReachedBase += OnReachedBase;
}
void OnDisable()
{
Enemy.ReachedBase -= OnReachedBase;
}静态事件会一直存在,直到游戏结束,因此每个 += 都需要对应的 -=:如果已销毁的 GameManager 没有取消订阅,仍然会收到调用。
挑战
简单到达基地的敌人会扣除生命值。
- 在
EnemyData中,添加public int damage;。 - 在
Enemy中,添加public static event Action<Enemy> ReachedBase;(using System;)。到达最后一个路径点时,触发该事件并销毁敌人。 - 在
GameManager中,添加[SerializeField] private int startLives = 20;和private int lives;,并在 Start 中设置lives。像上面那样订阅事件;OnReachedBase会从生命值中扣除enemy.data.damage。
按下“开始”:两名敌人都会在基地消失。然后点击“检查”。
亲手试试
using UnityEngine;
// 之后再实现:生命值、金钱、HUD,以及胜负判定。
public class GameManager : MonoBehaviour
{
}
Unity 塔防游戏中的所有课
自己练习: Unity 在线编辑器