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で設定します。上記のようにイベントを購読します。OnReachedBaseでは、ライフからenemy.data.damageを差し引きます。

「プレイ」を押します。両方の敵が基地で消えます。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

// 後で追加するもの:残機、お金、HUD、勝利と敗北。
public class GameManager : MonoBehaviour
{
}

Unityゲーム:タワーディフェンスのすべてのレッスン

自分で練習してみよう: Unityプレイグラウンド