コンテンツにスキップ

Subclass Sandbox

親が安全な拡張 API を提供し、子はその範囲内だけで実装するよう制限するパターンです。

  • スキルや AI を拡張しつつコア規則を守りたいとき
  • デザイナー向け拡張ポイントを制御したいとき
  • Base Class: 安全な API 提供
  • Hook: 子クラス実装ポイント
  • Subclass: 拡張実装

以下のコードは、上で説明した状況を Unity プロジェクトの文脈で単純化した例です。

public abstract class SkillBase
{
public void ExecuteSkill()
{
if (!CanExecute())
{
return;
}
ConsumeResource();
PlayCastAnimation();
ApplyEffect();
}
protected virtual bool CanExecute() => true;
protected virtual void ConsumeResource() { }
protected virtual void PlayCastAnimation() { }
protected abstract void ApplyEffect();
}
public sealed class FireballSkill : SkillBase
{
protected override void ApplyEffect()
{
// Spawn fireball projectile.
}
}
  • 親が許可した API だけを公開するため、拡張コードを安全に制限できます。
  • クールダウンやリソース消費などの共通ルールをベース側で強制しやすいです。
  • ベースクラスが肥大化すると、かえって拡張の柔軟性が下がります。
  • フックメソッドの契約が曖昧だと、サブクラス間で動作の一貫性が崩れます。

親テンプレートが共通ルールを強制し、子はフックだけを実装する流れです。

Subclass Sandbox の流れ