HUD
CoddyのUnityジャーニー「Unityにおけるゲームアーキテクチャ」セクションの一部。レッスン 46/50。
チャレンジ
中級只负责监听的 HUD。保留之前课程中的所有内容。名为 HUD 的画布上有一个生命值条(HealthFill,一张填充图像)、HealthText 和 WaveText,以及你的 HUD 脚本;在 Inspector 中设置好 hero、spawner、healthBar、healthText 和 waveText。HUD 从不向英雄或生成器询问任何信息:它们通过 C# 事件通知状态变化,HUD 则显示它收到的信息。
Hero添加public event Action<int, int> HealthChanged,在Start中以及每当受到攻击或治疗导致生命值变化时,都会使用当前生命值和maxHealth触发该事件。WaveSpawner添加public event Action<int> WaveStarted,并在一波开始时使用该波的编号触发该事件。HUD在OnEnable中订阅这两个事件,并在OnDisable中取消订阅。收到HealthChanged时,它会根据剩余生命值的比例填充生命值条,并显示生命值,例如HP 3/5。收到WaveStarted时,它会显示Wave 2。它没有Update。
在 Start 中触发 HealthChanged,不要在 Awake 中触发:所有对象的 OnEnable 都会在任何对象的 Start 之前运行,因此到那时 HUD 已经开始监听。按下 Play,一边战斗一边观察 HUD,然后点击 Check。
自分で試してみよう
using UnityEngine;
public class HUD : MonoBehaviour
{
// 後のレッスンでここに実装を追加します:画面に体力とウェーブを表示します。
}