パワーアップ
CoddyのUnityジャーニー「Unityにおけるゲームアーキテクチャ」セクションの一部。レッスン 45/50。
チャレンジ
中級パワーアップ。これまでのレッスンの内容はすべてそのままにします。アリーナにはハートとシールドが置かれており、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
{
}