Menu
CoddyTech

すべてにダメージを与える

CoddyのUnityジャーニー「Unityにおけるゲームアーキテクチャ」セクションの一部。レッスン 43/50。

challenge icon

チャレンジ

中級

これで敵も反撃してくるようになります。これまでのレッスンの内容はすべて残してください。敵にはもうタグを付けません。代わりに、攻撃はインターフェースを通じてダメージを与えられる対象を見つけ、敵も同じインターフェースを通じてヒーローにダメージを与えます。

  • IDamageableは1つのメソッド、void TakeDamage(int amount);を宣言します。
  • Enemyはこれを実装します。health、damage、attackEveryを用意し、Inspectorで設定します(gruntは2、1、1、dasherは1、2、1)。TakeDamageはamountをhealthから差し引き、0以下になったら敵を破棄します。Startでは、ヒーローのIDamageableも保持します。毎フレーム、ヒーローが1.2ユニット以内にいるとき、そのTakeDamage(damage)を呼び出します。ただし、呼び出しはattackEvery秒に1回までです。
  • Heroもこれを実装します。InspectorでswingDamage(1)、maxHealth(5)、safeTime(1)を設定し、AwakeでhealthをmaxHealthから開始させます。攻撃を受けるとamountを差し引き、体力をHero HP: 4としてログに出力し、safeTime秒間、ヒーローがそれ以上攻撃を受けないようにします。体力が0になったらThe hero fallsをログに出力し、Heroスクリプトをオフにします(enabled = false)。倒れたヒーローは攻撃を受けても無視します。
  • 攻撃ではもうタグの確認もオブジェクトの破棄もしません。攻撃範囲内かつ前方にいて、IDamageableを持つすべての対象にTakeDamage(swingDamage)を呼び出します。

Playを押して戦い、その後Checkを押してください。

自分で試してみよう

// 後のレッスンでこれを具体化します:ダメージを受ける可能性があるものすべて。
public interface IDamageable
{
}

Unityにおけるゲームアーキテクチャのすべてのレッスン