シーンとノード

はじめに

../../_images/chef.png

ちょっとの間、ゲーム開発者でない自分を想像してみてください。代わりにあなたは今、シェフです!ヒップスターの服から、コック帽とダブル仕立てのジャケットに着替えましょう。これからゲームをつくる代わりに、ゲストのために新たに美味しいレシピを考えるのです。

では、シェフはどうやってレシピをつくるのでしょう? レシピは2つに分けられます。ひとつは材料の種類で、もうひとつはその調理法です。これにより、レシピに従ってつくれば誰でも、あなたの卓越した料理を味わうことができるのです。

Godotでのゲーム作りも、とても似た感覚です。このエンジンを使うときはキッチンにいるような気分になります。このキッチンでは ノード が、冷蔵庫にいっぱいの新鮮な料理材料です。

ノードにはたくさんの種類があります。画像を表示するためのものや、音を再生したり、3Dモデルを表示するためのもの等、数十種類があります。

ノード

まずは基本から始めましょう。ノードはゲームを構築する際に基礎となる要素です。上で触れたように、ノードはさまざまな機能に特化することができます。しかし、どのようなノードも常に以下の性質をもっています:

  • 名前がある。
  • 編集できるプロパティを持つ。
  • 毎フレームで処理するコールバックを受け取れる。
  • 拡張できる(機能を追加するため)。
  • ほかのノードを子に持てる。
../../_images/tree.png

この最後のものが重要です。ノードは他のノードたちを子に持てます。こうやって配置していくと、ノードはツリーになります。

Godotでは、このようにノードを配置できることが、プロジェクトを構築するための強力な道具となっています。異なる機能を持った異なるノードを組み合わせれば、さらに複雑な機能を作り出せます。

これについては次の何節かにわたって掘り下げていくので、まだうまく掴めなくても大丈夫です。今はただ、ノードというものが存在し、このように配置できるという重要点のみを覚えておいてください。

シーン

../../_images/scene_tree_example.png

ノードの概念を定義したので、つぎはシーンについて説明するべきでしょう。

シーンは、ツリーの形で階層構造をしたノードのグループから構成されます。それに加え、シーンは:

  • 常にルートノードをひとつ持ちます。
  • ディスクに保存でき、それをまた読み込めます。
  • インスタンス化できる(詳しくは後で)。

ゲームを走らせることは、シーンを走らせることです。プロジェクトは複数のシーンを持てますが、ゲームを開始するためには、どれか一つをメインシーンに指定する必要があります。

基本的に、Godotエディタはシーンエディタです。2Dおよび3Dのシーンや、ユーザーインターフェースを編集するツールを多く備えていますが、基礎としているのは、シーンやそれを構成するノードを編集するという概念だけです。

エディタ

Godotエディタ・イントロダクション で作成したプロジェクトを開くか、新しいプロジェクトを作成します。これにより、Godotエディタが開きます。

../../_images/empty_editor.png

前述の通り、Godotでのゲーム作りはキッチンで作業している感覚に似ています。では冷蔵庫を開けて、いくつか新鮮なノードをプロジェクトに加えてみましょう。まずは画面に表示する「Hello World」のメッセージから始めます。

これを行うためには、ラベルノードを追加する必要があります。シーンドックの左上にある「子ノードを追加する」ボタン(プラスアイコン)を押してください。このボタンが新規ノードをシーンに追加する主な方法です。選ばれたノードは常にいま選択中のノードの子ノード(空のシーンの場合はルートノードとして)として追加されます。

注釈

(ルートノードを除いて) 空のシーンの場合、素早くルートノードをシーンに追加する方法がいくつかシーンドックにあります。例えば「2Dシーン」はNode2Dノードを、「3Dシーン」はSpatialノードを、「ユーザーインターフェイス」はControlノードを、そして「その他のノード」は好きなノード (この場合は「子ノードを追加」ボタンと一緒です) をそれぞれ追加します。また、星の形のアイコンを押すことで、お気に入りノードの表示と非表示を切り替えることができます。

これらのプリセットは利便性のためにここにあり、シーンの異なる型の為に必ず設定しなければならないわけではなりません。全ての3DシーンがルートノードとしてSpatialノードを必要としているわけではありません。同様に全てのGUIシーンや2Dシーンが、コントロールノードやNode2Dノードをルートノードに必要としているわけではありません。

では、このシーンにラベルノードを追加するために、「その他のノード」ボタンか、あるいは上にある「ノードを追加」ボタンをクリックしてください。空ではないシーンの場合は、子ノードを作るには「ノードを追加」ボタンを使います。

../../_images/newnode_button.png

するとノード作成のダイアログが開いて、作成できるノードの長いリストが表示されます:

../../_images/node_classes.png

そこからまず「Label」ノードを選択します。検索するのが恐らく一番早いでしょう:

../../_images/node_search_label.png

最後に、Labelを作ります!作成ボタンを押したときに、色々なことが起こります:

../../_images/editor_with_label.png

まず初めに、シーンが2Dエディタに切り替わり(Labelは2Dノードのため)、選択された状態でLabelがビューポート左上の角にあらわれます。

ノードはシーンドックのシーンツリーエディタに表示され、ラベルプロパティはインスペクタドックに表示されます。

次の一歩はLabelの「Text(テキスト)」プロパティを変更することです。「Hello world」に変えてみましょう:

../../_images/hw.png

さて、シーンを実行する準備がすべて整いました!トップバーの[シーンを実行]ボタンを押します (または F6 を押します):

../../_images/playscene.png

すると……あらら。

../../_images/neversaved.png

シーンを動かすにはまず保存する必要があるので、「シーン → シーンを保存」にて Hello.tscn のような名前を付けてから保存してください:

../../_images/save_scene.png

ここで変わったことが起こります。これはプロジェクト内にのみ保存が許される、特殊なファイルダイアログです。プロジェクトのルートは res:// で、『リソースのパス』を意味します。これはプロジェクト内にのみに保存できることを意味します。Godotでファイル操作するときは res:// がリソースのパスであることを覚えておきましょう。プラットフォームやインストール場所にかかわらず、ゲーム内にあるリソースファイルを見つけるための手段です。

シーンを保存してから、シーン再生をまた押すと、ついに「Hello World」のデモが動くはずです:

../../_images/helloworld.png

成功!

注釈

もし、これがすぐに機能せず、(マルチモニターまたはシングルモニターでの使用環境を問わず)少なくとも1つのモニターに高DPIディスプレイがある場合は、プロジェクト → プロジェクト設定 → Display → Windowに進み、DpiAllow Hidpiをオンにします。

プロジェクトの設定

それでは、プロジェクトの設定に取り掛かりましょう。今のところ、実行できるのは現在のシーンのみです。しかし、プロジェクトは複数のシーンを持つことができるため、メインとなるシーンを決めなければなりません。プロジェクトを実行するときは常にそのシーンから読み込まれます。

これらの設定はすべて project.godot ファイルに格納されます。これは編集しやすいように win.ini 形式に沿ったプレーンテキストになっていて、プロジェクトの動作を変更するための設定が数十項目あります。それらを簡単に変更できるよう、project.godotファイル編集用フロントエンドともいえる、プロジェクト設定ダイアログがGodotにはあります。

ダイアログは『プロジェクト -> プロジェクト設定』からアクセスできます。開いてみてください。

ウィンドウが開いたら、メインメニューを設定しましょう。Application/Run/Main Sceneのプロパティを押してHello.tscnを選んでください。

../../_images/main_scene.png

この変更により、通常の再生ボタン (またはF5) を押すと、どのシーンがアクティブに編集されているかにかかわらず、このシーンが実行されます。

プロジェクト設定ダイアログには、project.godotファイルに保存できる多くのオプションが表示され、既定値が表示されます。値を変更すると、目盛りは名前の左側にマークされます。つまり、プロパティはproject.godotファイルに保存され、記憶されます。

ちなみに、ProjectSettingsシングルトンを使って、実行時にカスタム設定オプションの追加と読み込みをすることも可能です。

続く...

このチュートリアルはシーンとノードについて説明しました。ここまでは、まだ一つのシーンと一つのノードだけしかありませんが、心配いりません。次のチュートリアルではこれを拡張します。