ゲーム開発ログ #115 Unity:敵ごとの初期化が増えたのでインターフェースで整理した話
Unityでカジュアルゲームを作っています。
今回は
敵の種類が増えてきたことで、生成処理の管理方法を見直した話です。
忘れないように自分用メモとして残しておきます。
直面した問題
敵の種類を増やしたかった
敵は共通部分もあるが、基本的にはすべて仕様が異なる
そのためプレハブにつけるクラスも種類ごとに分かれており、生成時にクラスごとの取得が必要になっていた。
やりたかったこと
・異なるクラスでも、できるだけ処理を統一したかった
・今後敵が増えても生成処理が増えないようにしたかった
調べてわかったこと
Unity の GetComponent<T>() は、コンポーネントがその型(またはインターフェース)を実装している場合でも取得できるため、クラスごとの指定ではなく共通の型を基準に取得する形にできることが分かりました。
最終的な対処
public interface IEnemySpawnを作成し、
public class EnemyType1 : MonoBehaviour, IEnemySpawnのように各敵クラスへ実装。
取得側は
var enemy = obj.GetComponent<IEnemySpawn>();とすることで、敵の種類に依存しない形で扱えるようにした。
気づき(自分用メモ)
クラスごとに分かれていた取得方法をインターフェースに統一することで、同じ初期化処理を適用できるようになった
クラス名ではなく共通の取得対象として扱えるようになったため、管理がしやすくなった
その結果、生成側の分岐を大きく減らすことができた
まとめ
敵ごとの実装はそのまま維持
生成処理だけを共通化できる形に整理
今後敵の種類が増えても、生成側のコードが増えにくくなった
※あくまで自分用のメモです。勘違いや不正確な部分が含まれる可能性があります。
次にやること
敵タイプの追加
生成処理の整理
共通化できる部分の見直し
引き続き、チェック作業と開発を進めていきます。
