概要
RPGやアクションゲームを作っていると、同じ種類の敵キャラクター(スライム、ゴブリンなど)を大量に、しかし少しずつ異なる設定(HPが多い、攻撃力が高いなど)で配置したくなります。一体一体手作業でコピー&ペーストして設定を変更するのは、非常に面倒で、後からの修正も大変です。
Godotには、このような「テンプレートから派生した個別のオブジェクト」を効率的に作成・管理するための強力な仕組みとして、シーン継承(Scene Inheritance) と編集可能な子(Editable Children) の2つの方法があります。
この記事では、特に推奨される「シーン継承」を中心に、NPCや敵キャラクターを効率的に量産する方法を解説します。

なぜ「継承」が必要なのか?
まず、基本となる「敵」のシーン(BaseEnemy.tscn)を作成したとします。このシーンには、CharacterBody2D、Sprite2D、CollisionShape2Dなどが含まれています。
このBaseEnemy.tscnをメインシーンに複数インスタンス化すると、すべての敵は全く同じ見た目、同じ性能になります。もし「この一体だけHPを2倍にしたい」と思っても、インスタンス化したシーンの内部プロパティを直接変更することはできません。すべての変更は元のBaseEnemy.tscnに影響してしまいます。
この問題を解決するのが「継承」の考え方です。
方法1: シーン継承 (Scene Inheritance) - 推奨!
シーン継承は、既存のシーンを「親」として、その構造と機能をすべて受け継いだ新しい「子」シーンを作成する方法です。これが最も柔軟で推奨される方法です。
手順
1. ベースとなるシーンを作成
まず、すべての敵の基本となるBaseEnemy.tscnを作成します。
2. 継承シーンを作成
ファイルシステムドックでBaseEnemy.tscnを右クリックし、「新しい継承シーン」を選択します。
3. 新しいシーンを保存
新しいシーンが開かれるので、例えばStrongEnemy.tscnのような名前で保存します。
これで、StrongEnemy.tscnはBaseEnemy.tscnの完全なコピーでありながら、独立したシーンファイルとなりました。しかし、ただのコピーではありません。親シーンへのリンクが維持されています。
継承のメリット
- 差分だけを編集:
StrongEnemy.tscnでは、親シーンから継承したプロパティ(例:Sprite2Dの色、CollisionShape2Dの大きさ、スクリプトで@exportしたHPの値など)を自由に変更できます。変更されたプロパティは黄色い丸い矢印アイコンで示されます。 - 親の変更が子に反映される: 最も強力なのがこの点です。後から親である
BaseEnemy.tscnのスクリプトに新しい機能を追加したり、ノード構造を変更したりすると、その変更はすべての子シーン(StrongEnemy.tscnなど)に自動的に反映されます。
これにより、「すべての敵に共通のバグ修正」と「特定の敵だけの個別調整」を両立できるのです。
方法2: 編集可能な子 (Editable Children)
これは、シーンにインスタンス化した別のシーン(子シーン)の内部ノードを直接編集可能にする機能です。
手順
- メインシーンに
BaseEnemy.tscnをインスタンス化します。 - シーンツリーでインスタンス化した
BaseEnemyノードを右クリックし、「編集可能な子」にチェックを入れます。
これにより、シーンツリー上でBaseEnemyの階層が展開され、その中のSprite2DやCollisionShape2Dを直接選択し、プロパティを変更できるようになります。
シーン継承との違い
- 手軽さ: 新しいシーンファイルを作成する必要がなく、その場で素早く変更できるのがメリットです。
- 再利用性の低さ: この方法で行った変更は、そのメインシーン内にしか保存されません。「HPが高いゴブリン」を別のレベルでも使いたい、と思った場合、再利用が困難です。
そのため、「この場所にいる、この一体だけ」を特別に変更したい、といった限定的なケースを除き、基本的にはシーン継承を使うのがベストプラクティスとされています。
まとめ
NPCや敵キャラクターのバリエーションを作成する際は、以下の使い分けを意識しましょう。
- 基本は「シーン継承」: 再利用可能で保守性の高いテンプレート(
StrongEnemy,FastEnemyなど)を作成する場合。 - 限定的には「編集可能な子」: 特定のシーンの、特定のインスタンス一体だけを微調整したい場合。
継承の概念をマスターすることで、ゲーム内のコンテンツを体系的に、そして効率的に管理できるようになります。ぜひ、あなたのゲーム開発に「シーン継承」を取り入れてみてください。