抽象クラスとして GeneratorBase クラスを作成し、IGeneratable インターフェースを実装します。
実装にあたり、GenerateBullet メソッドを
抽象メソッドとして定義します。
抽象メソッドも、あくまでもメソッドを定義するのみで、振る舞いについてはサブクラスに委ねています。
通常のメソッドでインターフェースのメソッドを実装してしまうと、このクラス内での定義となり、サブクラスでの上書きが任意になってしまいますが、
抽象メソッドとして定義しておくことで、このクラスでは内部の実装をせず、サブクラスでの実装を強制することができます。
GeneratorBase.cs
<= クリックしたら開きます。
using UnityEngine;
using UnityEngine.Pool;
public abstract class GeneratorBase : MonoBehaviour, IGeneratable
{
[SerializeField] protected float bulletSpeed = 30;
[SerializeField] protected GeneratorBase bulletPrefab;
protected CharaController charaController;
// TODO オブジェクトプール機能を追加する
/// <summary>
/// 初期設定
/// </summary>
public virtual void SetUpBulletGenerator(CharaController charaController)
{
this.charaController = charaController;
Debug.Log("初期設定 完了");
}
public abstract void GenerateBullet(Vector2 direction);
public abstract void GenerateBullet<T>(Vector2 direction, T t);
}
インターフェースのメソッドを定義する順番に指定はありません。
例えば、GenerateBullet メソッドの定義をしてから SetUp メソッドの定義を行うこともできます。
GeneratorBase クラスは、アクションゲームにおける弾の生成機能の
基盤となる親クラスです。
以下はその設計と実装についての説明です。