Godotのキーコンセプトの概要

すべてのゲームエンジンは、アプリケーションを作成するための抽象的な概念を軸に構築されています。Godotでは、ゲームは シーン のなかにグループ化されている ノードツリー で表されます。これらのノード同士はつなぐことができ、シグナル を使ってお互いに交信できます。

ここで学習できるコンセプトは4つあります。それらを大まかに見ていきながら、エンジンがどのように動くのかの感覚をつかんでいきましょう。入門シリーズでは、実際にそれらを使っていきます。

シーン

Godot では、ゲームを再利用可能なシーンに分割します。シーンは、キャラクター、武器、ユーザーインターフェースのメニュー、個々の建物、レベル全体など、考えられるあらゆるものに成り得ます。Godot のシーンはフレキシブルであり、他のゲームエンジンでいうプレハブとシーン両方の役割を果たします。

../../_images/key_concepts_main_menu.webp

シーンを入れ子にすることもできます。たとえば、キャラクターをレベルに配置するために、キャラクターシーンをレベルシーンの子としてドラッグアンドドロップできます。

../../_images/key_concepts_scene_example.webp

ノード

シーンは一つ以上の ノード で構成されています。ノードはゲームを構成する最小ブロックで、ツリー型に配置することが出来ます。キャラクターのノードはこのようになります。

../../_images/key_concepts_character_nodes.webp

このシーンは「Player」という名前にした CharacterBody2D ノードと、 Sprite2DCamera2DCollisionShape2D で構成されています。

注釈

ここでは2Dシーンなので、ノードの名前は末尾に「2D」が付きます。3D部分で使用するノードは名前が「3D」で終わります。Godot 4 以降、「空間」ノードは「Node3D」と呼ばれるようになったことに注意してください。

ノードとシーンはエディタでは同じように見えることに注意してください。ノードツリーはシーンとして保存されると単体のノードのように見えるようになり、エディタからは内部構造が見えなくなります。

Godotエンジンでは広範囲のタイプの基本ノードを提供しており、組み合わせたり、拡張してよりパワフルなものを作ったりすることが出来ます。2D、3D、UIなど、たいていのものを基本ノードで表現できます。

../../_images/key_concepts_node_menu.webp

シーンツリー

ゲームシーンは、1つの シーンツリー (文字通りシーンの木構造)に収められます。シーンがノードのツリーで出来ているように、シーンツリーもノードのツリーで出来ています。シーンはゲームの中で、キャラクタ・武器・ドア・UIを表す事ができるもの、と考えるとわかりやすいでしょう。

../../_images/key_concepts_scene_tree.webp

シグナル

ノードはなにかイベントが発生すると、シグナルを発信します。この仕組みはノード同士がコードで密結合することなく、やり取りすることを可能にし、シーンの構築に柔軟さをもたらします。

../../_images/key_concepts_signals.webp

注釈

シグナルは、Observer パターンの Godot バージョンです。Observerの詳細については、ここで読むことができます(英語): http://gameprogrammingpatterns.com/observer.html

例えば、ボタンが押されたときシグナルが発信されます。このシグナルに接続することで、(ボタンを押したという)イベントへの反応として、ゲームの開始やメニューを開く処理を実行することができるようになります。

他の組み込み済みのシグナルでは2つのオブジェクトの接触や、キャラクターやモンスターが一定のエリアに侵入したりといったことを通知することが出来ます。あなたのゲームに合わせた独自のシグナルを定義することも出来ます。

要約

ノード、シーン、シーンツリー、シグナルは Godot において 4 つの中核となる概念で、常に操作することになります。

ノードはゲームを構成する最小ブロックです。それらを組み合わせてシーンを作り、シーンツリーの中に入れ子にしていきます。シーンツリーの別の枝葉のノードへイベントに反応させるために、シグナルを使うことが出来ます。

この短い概要を読んだことで、たくさんの疑問が浮かんでいるかもしれません。この「はじめに」シリーズを通して多くの答えが得られると思いますので、もう少しお付き合いください。