【Godot】Editable ChildrenとScene継承によるNPCの量産

作成: 2025-06-20最終更新: 2025-12-06

ベースシーンから効率的にバリエーションを作る2つの方法。モブNPCと機能NPCの使い分け

概要

RPGやアクションゲームを作っていると、同じ種類の敵キャラクター(スライム、ゴブリンなど)を大量に、しかし少しずつ異なる設定(HPが多い、攻撃力が高いなど)で配置したくなります。一体一体手作業でコピー&ペーストして設定を変更するのは、非常に面倒で、後からの修正も大変です。

Godotには、このような「テンプレートから派生した個別のオブジェクト」を効率的に作成・管理するための強力な仕組みとして、シーン継承(Scene Inheritance)編集可能な子(Editable Children) の2つの方法があります。

この記事では、特に推奨される「シーン継承」を中心に、NPCや敵キャラクターを効率的に量産する方法を解説します。

Editable Childrenの設定方法

なぜ「継承」が必要なのか?

まず、基本となる「敵」のシーン(BaseEnemy.tscn)を作成したとします。このシーンには、CharacterBody2DSprite2DCollisionShape2Dなどが含まれています。

このBaseEnemy.tscnをメインシーンに複数インスタンス化すると、すべての敵は全く同じ見た目、同じ性能になります。もし「この一体だけHPを2倍にしたい」と思っても、インスタンス化したシーンの内部プロパティを直接変更することはできません。すべての変更は元のBaseEnemy.tscnに影響してしまいます。

この問題を解決するのが「継承」の考え方です。

方法1: シーン継承 (Scene Inheritance) - 推奨!

シーン継承は、既存のシーンを「親」として、その構造と機能をすべて受け継いだ新しい「子」シーンを作成する方法です。これが最も柔軟で推奨される方法です。

手順

1. ベースとなるシーンを作成

まず、すべての敵の基本となるBaseEnemy.tscnを作成します。

2. 継承シーンを作成

ファイルシステムドックでBaseEnemy.tscnを右クリックし、「新しい継承シーン」を選択します。

3. 新しいシーンを保存

新しいシーンが開かれるので、例えばStrongEnemy.tscnのような名前で保存します。

これで、StrongEnemy.tscnBaseEnemy.tscnの完全なコピーでありながら、独立したシーンファイルとなりました。しかし、ただのコピーではありません。親シーンへのリンクが維持されています

継承のメリット

  • 差分だけを編集: StrongEnemy.tscnでは、親シーンから継承したプロパティ(例: Sprite2Dの色、CollisionShape2Dの大きさ、スクリプトで@exportしたHPの値など)を自由に変更できます。変更されたプロパティは黄色い丸い矢印アイコンで示されます。
  • 親の変更が子に反映される: 最も強力なのがこの点です。後から親であるBaseEnemy.tscnのスクリプトに新しい機能を追加したり、ノード構造を変更したりすると、その変更はすべての子シーン(StrongEnemy.tscnなど)に自動的に反映されます

これにより、「すべての敵に共通のバグ修正」と「特定の敵だけの個別調整」を両立できるのです。

方法2: 編集可能な子 (Editable Children)

これは、シーンにインスタンス化した別のシーン(子シーン)の内部ノードを直接編集可能にする機能です。

手順

  1. メインシーンにBaseEnemy.tscnをインスタンス化します。
  2. シーンツリーでインスタンス化したBaseEnemyノードを右クリックし、「編集可能な子」にチェックを入れます。

これにより、シーンツリー上でBaseEnemyの階層が展開され、その中のSprite2DCollisionShape2Dを直接選択し、プロパティを変更できるようになります。

シーン継承との違い

  • 手軽さ: 新しいシーンファイルを作成する必要がなく、その場で素早く変更できるのがメリットです。
  • 再利用性の低さ: この方法で行った変更は、そのメインシーン内にしか保存されません。「HPが高いゴブリン」を別のレベルでも使いたい、と思った場合、再利用が困難です。

そのため、「この場所にいる、この一体だけ」を特別に変更したい、といった限定的なケースを除き、基本的にはシーン継承を使うのがベストプラクティスとされています。

まとめ

NPCや敵キャラクターのバリエーションを作成する際は、以下の使い分けを意識しましょう。

  • 基本は「シーン継承」: 再利用可能で保守性の高いテンプレート(StrongEnemy, FastEnemyなど)を作成する場合。
  • 限定的には「編集可能な子」: 特定のシーンの、特定のインスタンス一体だけを微調整したい場合。

継承の概念をマスターすることで、ゲーム内のコンテンツを体系的に、そして効率的に管理できるようになります。ぜひ、あなたのゲーム開発に「シーン継承」を取り入れてみてください。