前回作成したItemRecoverクラスに、MonoBehaviourの代わりにItemBaseを継承させます。
これによって親クラスItemBase、子クラスItemRecoverという関連性が生まれます。
なお、ゲームオブジェクトにアタッチするのは子クラス(ここではItemRecover)のみで大丈夫です。
以下はItemRecoverを修正したスクリプトになります。
<= +ボタンを押すと開きますので、自分なりの実装を行った上で確認をしてみましょう。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ItemRecover : ItemBase // <= 修正。継承するクラスをItemBaseに変更する
{
// 親クラスのメソッドを上書き
protected override void TriggerItemEffect() {
RecoverLife();
}
/// <summary>
/// HP回復処理
/// </summary>
private void RecoverLife() {
// PlayerのHPを回復 親クラスの持つefficacyPointをキャストして回復量として使用する
playerController.hp += (int)efficacyPoint;
// HPが最大値を超えないように制御
playerController.hp = Mathf.Clamp(playerController.hp, 0, playerController.maxHp);
// アイテム破壊
DestroyItem();
}
}
子クラスの処理はこれだけです。他の必要な処理はすべて親クラスに記載されていますので、そちらで処理を行ってくれます。
そのため子クラスには、親クラスに足りない情報や、親クラスのメソッド内容に対して修正したい処理だけを記述すれば大丈夫です。
子クラスにおいて親クラスのメソッドに変更を加えた場合、親クラスの処理は無視されます。これをオーバーライドといいます。
もしも親クラスのメソッドの処理に加えて、子クラスの処理を追加したい場合には、メソッド内に base.メソッド名(); を記述します。
詳しい使い方については長くなってしまうため別のページで行いますが、まずはご自分で継承について調べてみましょう。
プレファブになっている回復用ゲームオブジェクトItemRecoverPrefabに、修正したItemRecoverクラスをアタッチします。
インスペクター上には継承している親の情報も表示されます。忘れずに設定を行いましょう。