「スライムもゴーレムも、移動とダメージ処理がほぼ同じなのに、スクリプトをコピペしている…」
敵の種類が増えると、似たコードがファイルごとに増えていきます。
放置すると修正漏れが起きやすく、バグの温床になります。
でも安心してください。
C#の継承を使えば、共通部分を親クラスにまとめ、違う部分だけ子クラスで書けます。
この記事では、継承の目的、virtualとoverride、敵タイプを派生クラスで分ける具体例まで解説します。
クラスの基本(061)を読んだあとに進める構成です。
- 敵スクリプトをコピペしていて、修正のたびに全部直している
- 継承とoverrideの違いが分からず、子クラスの処理が動かない
- いつ継承を使えばいいか、判断基準が持てていない
✨ この記事でわかること
- C#継承の基本とMonoBehaviour継承との関係
- virtualとoverrideで処理を差し替える方法
- EnemyBaseから派生クラスを作る具体例
- 継承を使いすぎないための判断基準
- 初心者がつまずきやすいエラーの対処
- 初心者でも理解できる解説
\プログラミング未経験でも大丈夫!まずは1本作り切ろう/
初心者が最初に選ぶならコレ
Unity ノンフィールドRPG
+スレスパ風JRPG講座
Unity6対応・スマホ化対応の最新カリキュラム。「何から始めればいいかわからない」という初心者でも、ステップごとに手を動かすだけでRPGが完成します。
憧れのアクションゲームに挑戦
Unity 2Dアクションゲーム
の作り方講座(ロックマン風)
初心者でもロックマン風の横スクロールACTが作れる講座。7ステージ+ラスボスという本格構成で、スマホ化・広告実装まで対応。「自分のゲームをリリースしたい」夢を叶えます。
3Dゲーム開発の入口はここ
ゼルダ風3Dアクションゲーム
の作り方講座
「3Dゲームって難しそう…」と感じている初心者向けの講座。全16回でゼルダ風3Dアクションがスマホ対応で作れるようになります。3D開発の基礎がしっかり身につきます。
C#継承とは何か
継承は、既存のクラスを土台にして、新しいクラスを作る仕組みです。
土台になるクラスを親(基底クラス)、そこから作ったクラスを子(派生クラス)と呼びます。
Unityでは、すでにMonoBehaviourを継承している状態からスタートしています。
PlayerMove : MonoBehaviour の「: MonoBehaviour」が継承の記号です。
今回学ぶのは、自分で作ったクラス同士の継承です。
public class EnemyBase : MonoBehaviour
{
[SerializeField] protected int hp = 30;
protected virtual void Attack
{
Debug.Log("敵が攻撃した");
}
public void TakeDamage(int amount)
{
hp -= amount;
if (hp <= 0) Destroy(gameObject);
}
}
protectedは「子クラスからも使える」アクセス修飾子です。
共通のHP管理は親に置き、攻撃の中身だけ子で変える、という設計が可能になります。
継承を使う目的
継承の主な目的は、次の2つに集約されます。
- 共通処理の重複を減らす:移動・被ダメ・撃破判定を1か所にまとめる
- 型としてまとめて扱う:EnemyBase型のリストに、スライムもボスも入れられる
「全部継承で解決しよう」とすると、親子関係が複雑になり読みにくくなります。
最初は「明らかに同じ処理が3つ以上ある」と感じたときだけ検討する、くらいの温度感で十分です。

継承は「似ているから」ではなく、「本当に共通のままにしたい処理があるから」使うのがコツです。
1行だけ違うなら、別の方法の方がシンプルなことも多いですよ。
overrideで処理を差し替える
親クラスのメソッドを子クラスで書き換えるには、親側にvirtual、子側にoverrideを付けます。
public class SlimeEnemy : EnemyBase
{
protected override void Attack
{
Debug.Log("スライムが体当たり!");
}
}
public class MageEnemy : EnemyBase
{
[SerializeField] private GameObject fireballPrefab;
protected override void Attack
{
Debug.Log("魔法使いがファイアボール!");
Instantiate(fireballPrefab, transform.position, Quaternion.identity);
}
}
TakeDamageは親のまま使い、Attackだけ子ごとに変える、という分担が典型的です。
Update内でAttackを呼ぶ処理は親に1つ書いておけば、子は攻撃内容だけ考えればよくなります。
virtualとoverrideの対応関係
| キーワード | 書く場所 | 意味 |
|---|---|---|
| virtual | 親クラスのメソッド | 子クラスで上書きしてよい、という宣言 |
| override | 子クラスのメソッド | 親のvirtualメソッドを実際に上書きする |
virtualを付け忘れると、子クラスで同名メソッドを書いても「隠すだけ」になり、親型の変数から呼ぶと親の処理が実行されます。
意図どおり動かない原因になりやすいので、セットで覚えておきましょう。
敵タイプを派生クラスで分ける例
実際のゲームでは、次のような構成がよく使われます。
- STEP1EnemyBaseを作る
HP・被ダメ・撃破・Attackの枠組みを親クラスに書く
- STEP2SlimeEnemyなど派生クラスを作る
Attackや移動速度だけ子クラスでoverrideする
- STEP3Prefabにアタッチして使う
スライムPrefabにはSlimeEnemy、ボスPrefabにはBossEnemyを付ける
public class EnemyBase : MonoBehaviour
{
[SerializeField] protected float moveSpeed = 2f;
[SerializeField] protected int hp = 30;
protected virtual void Update
{
transform.Translate(Vector3.left * moveSpeed * Time.deltaTime);
if (Random.value < 0.01f) Attack;
}
protected virtual void Attack { }
}
public class SlimeEnemy : EnemyBase
{
protected override void Attack
{
Debug.Log("スライム攻撃");
}
}
親のUpdateが毎フレーム動き、一定確率でAttackを呼ぶ流れを共通化できます。
子は攻撃の見た目と効果だけ変えれば、移動ロジックのコピペが不要になります。
MonoBehaviour継承との関係
UnityのスクリプトはすべてMonoBehaviourを継承しています。
自分で作るEnemyBaseもMonoBehaviourを継承し、そのEnemyBaseをさらにSlimeEnemyが継承する、という多段継承の形になります。
SlimeEnemy : EnemyBase : MonoBehaviour という関係です。
SlimeEnemyからは、EnemyBaseのprotectedメンバーと、MonoBehaviourのStart・Updateなどが使えます。
ただし、C#ではクラスの継承は1つだけです。
複数の親クラスは持てません。
「ダメージを受けられる」「拾える」など複数の能力を組み合わせたい場合は、後で学ぶインターフェースの方が向いている場面もあります。
継承を使いすぎないために
継承は便利ですが、次のようなサインが出たら一度立ち止まりましょう。
- 親クラスが10個以上のメソッドを持ち、子がほとんど使っていない
- 「is-a(〜である)」関係が言えない(例:PlayerがWeaponを継承する)
- 継承の階層が4段以上になっている
「has-a(〜を持つ)」の関係なら、継承ではなくコンポーネントを別スクリプトとして持たせる方が自然です。
Unityはもともとコンポーネント指向のエンジンなので、無理に深い継承木を作る必要はありません。

敵が2種類だけなら、if文で分岐する方が読みやすいこともあります。
継承は「増え続ける共通処理」に効いてきます。
まずは1つのEnemyBaseから試してみましょう。
よくあるつまずき
継承を書くとき、初心者がつまずきやすい点を整理します。
- override忘れ → 子のメソッドが親の処理を置き換えられない
- privateのまま → 子からhpなどに触れない。
protectedに変更する - ファイル名とクラス名不一致 → SlimeEnemy.csにはclass SlimeEnemyを書く
- 親をnewして使おうとする → MonoBehaviourはAddComponentかPrefabが基本
Consoleに「does not override an accessible ‘virtual’ member」と出たら、親側にvirtualがあるか、スペルが一致しているかを確認してください。

継承は「コードの共有」が目的です。
設計の正解を当てにいく必要はありません。
動く敵を1体作ってから、共通化できる部分を親に移していく進め方で大丈夫ですよ。
記事を読んで「作ってみたい!」と思ったら!初心者でも1本完成できる講座で実力をつけよう
知識を読むだけで終わらせるのはもったいない。実際に手を動かしてゲームを1本完成させることで、理解が一気に深まります。プログラミング未経験からでも取り組める講座で、ゲーム開発の第一歩を踏み出しましょう。
Unity ノンフィールドRPG+スレスパ風JRPG講座【Unity6対応!初心者でもデッキ構築×JRPGをスマホ向けに作れる!】

- Unity6対応・スマホ化対応で最新環境のゲーム開発が学べる
- Slay the Spire風のデッキ構築システム×JRPGの組み合わせを実装
- 初心者でも迷わず進められる丁寧な解説構成
- ノンフィールドRPGとデッキ構築JRPGの2つをまとめて学べるセット講座
Unity ノンフィールドRPGの作り方講座+Slay the Spire風デッキ構築JRPGの作り方講座は、プログラミング未経験の初心者でも取り組みやすい、ステップバイステップ形式の講座です。
Unity6対応・スマホ化対応の最新カリキュラムで、読んで「なるほど」と思った知識を、実際に動くゲームとして形にする体験ができます。
「何から始めればいいかわからない…」という初心者が最初に選ぶ一本として最適な講座です。
Unity6対応・スマホ化対応の最新カリキュラム
ゼロからでもRPGを完成させよう
→ スレスパ風デッキ構築JRPG講座を見てみる
初心者でもスマホ対応のRPGが作れる!まずは1本完成を目指そう!
Unity 2Dアクションゲームの作り方講座(ロックマン風)【全16回!初心者でもスマホ化・広告実装まで対応した本格横スクロールACTが作れる!】

- ロックマン・マリオ・カービィのような横スクロールACTをゼロから開発
- 7ステージ+ラスボスステージの本格的なゲーム設計を初心者でも実現
- スマホ化・AdMob広告実装まで対応してリリースまで見据えた構成
- 敵AI15体・多彩なマップギミック・武器システムを完全実装
- 完全オリジナルゲームをアセット不使用で素材提供付きで制作
Unity 2Dアクションゲームの作り方講座(ロックマン風)は、ロックマン・スーパーマリオ・星のカービィのような2D横スクロールアクションゲームを、初心者でもゼロから開発できるようになる講座です。
全16回で当たり判定・物理挙動・敵AIの知識を実際のゲームコードとして実装する体験が詰め込まれています。スマホ化・広告実装まで対応しているため、「作って終わり」ではなくリリースまで見据えた実践スキルが身につきます。
「憧れのアクションゲームを自分の手で作ってみたい」という初心者に強くおすすめの一本です。
スマホ化・広告実装まで対応した本格横スクロールACT
初心者でもロックマン風2Dアクションをリリースまで作り上げよう
→ 2Dアクションゲームの作り方講座を見てみる
初心者でも本格ACTが完成する!広告収益まで視野に入れた実践スキルを手に入れよう!
ゼルダ風3Dアクションゲームの作り方講座【全16回!初心者でも3Dアクションがスマホ対応で作れる!】

- ゼルダの伝説・モンハン・原神のような3Dアクションをゼロから開発
- 「3Dは難しそう」と感じている初心者でも取り組みやすい丁寧な解説構成
- スマホ化対応で実機で動かせるゲームが完成
- アセットを使った実践的なゲーム開発手法が身につく
- 画像・動画・全ソースコード公開の充実したサポート
ゼルダ風3Dアクションゲームの作り方講座は、「3Dゲームは難しそう…」と感じている初心者こそおすすめの入門講座です。
全16回の丁寧な解説で、ゼルダの伝説・モンハン・原神のような本格的な3Dアクションゲームを確実に完成まで導きます。スマホ化対応で実機で動かせるため、初めて3Dゲームを作り上げた達成感がひときわ大きい講座です。
「3Dゲームを自分でも作れるか試してみたい」という初心者の最初の一歩として最適です。
初心者でも3Dアクションがスマホ対応で完成する
ゼルダ風3Dアクションゲームで3D開発の壁を一気に突破しよう
→ ゼルダ風3Dアクションゲームの作り方講座を見てみる
全16回でスマホで動くオリジナル3Dゲームを完成させよう!
まとめ
C#の継承は、共通処理を親クラスにまとめ、違う部分だけ子クラスでoverrideする仕組みです。
EnemyBaseにHP管理や移動を置き、SlimeEnemyやMageEnemyでAttackだけ差し替える構成は、ゲーム制作現場でもよく使われます。
virtualとoverrideはセットで覚え、使いすぎには注意しましょう。
敵が2〜3種類から増えてきたタイミングで、1つEnemyBaseを試すのがおすすめです。
体系的にC#を学びたい方は、Unity入門の森の講座も参考になります。
クラス設計から実践的なゲーム制作まで、順番に身につけられます。
今日は既存の敵スクリプトから、共通化できる処理を1つ探してみてください。



コメント