Menu
CoddyTech

パワーアップ

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

challenge icon

チャレンジ

中級

パワーアップ。これまでのレッスンの内容はすべてそのままにします。アリーナにはハートとシールドが置かれており、HeartとShieldのプレハブはウェーブでドロップされる準備ができています。ヒーローが拾えるものはすべて1つのインターフェースを実装するため、ヒーローが種類を知る必要はありません。

  • IPickupは1つのメソッド、void Collect(Hero hero);を宣言します。
  • Heartはこれを実装し、Inspectorで設定するamount(2)を使って、ヒーローをamount分回復させ、自身を破棄します。
  • Shieldはこれを実装し、Inspectorで設定するduration(5)を使って、duration秒間、ヒーローがあらゆる攻撃を受けないようにし、自身を破棄します。
  • Heroに、体力を加算するpublic void Heal(int amount)を追加します。ただし、maxHealthを超えて回復することはなく、攻撃を受けたときと同じように体力をログに出力します。倒れたヒーローは回復しません。また、public void Protect(float seconds)も追加します。これは、攻撃を受けたときのsafeTimeと同様に、今からseconds秒後まで攻撃を受けないようにします。さらに、OnTriggerEnterも追加します。触れたものがIPickupを持っているとき、そのオブジェクトに対してCollect(this)を呼び出します。CharacterControllerは、Rigidbodyがなくてもトリガーメッセージを受け取ります。
  • 各Waveにpublic GameObject rewardを追加します。Inspectorではインターフェース型のフィールドを表示できないため、このフィールドにはGameObjectとしてプレハブを保持します。ウェーブを倒すと、休憩に入る前に、スポーナーは報酬があればアリーナ中央にある自身の位置にドロップします。アセットでは、ウェーブ1にHeart、ウェーブ2にShieldを設定します。

Playを押し、ウェーブをクリアして報酬を拾ってから、Checkを押します。

自分で試してみよう

// 後のレッスンでここに追加します:主人公が拾えるものすべて。
public interface IPickup
{
}

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