どうも太田アベル(@LandscapeSketch)です。
公式サイトはこちら / 公式ドキュメント(Godot 4) / 公式ドキュメント(Godot 3) / 当サイトのGodot記事一覧はこちら
Godotは全てのオブジェクトをツリー状に保持し、ツリー項目は「ノード」と呼ばれます。
あらゆるノードは親にも子にもなることができ、動きやエフェクトなどの効果はノード下のオブジェクトに影響します。
つまり親ノードの座標を動かせば、特に設定をしない限り下位ノードも同じく動きます。この影響をうまく使うことで、ノード単位でグループ的に動作させることができます。
スプライトの下位ノードに体力ゲージを付ければ、スプライトと体力ゲージがいっしょに動くことができるわけです。
基本のノード
2Dゲームを選択した場合、初期状態でノードは「Node2D」となっています。
Node2Dは座標、角度、大きさなど、基本的なビジュアルプロパティを備えた基底クラスです。
いくつかのノードがツリー状にまとまったものを「シーン」と呼びます。
他のゲームエンジンで「シーン」というと、1つの場面やステージ1セットを思い浮かべますが、Godotでは単なるノードのまとまりをシーンと呼ぶので気をつけてください。とにかく複数のオブジェクトが集まれば、全部シーンです。
シーンはファイルとしても切り出すことができ、再利用が可能です。
僕はここでいきなりつまずいていました。1つの場面がシーンと思い込んでいたので、どんなオブジェクトもシーンになったら場面切り替えはどうするのか?と疑問ばかりでした。
Godotは1つの画面もシーンですし、1つ1つのオブジェクトの集まりもシーンです。場面切り替えはその全てを入れ替えたり、増やしたりすればいいだけなのです。
ノードの追加
ノードの追加はカンタン。
親にしたいノードを選び、右クリックから「子ノードを追加」をクリック。クラスの一覧から目的のクラスを追加するだけです。
ノードの影響範囲
ノートの影響範囲を把握します。
基本的に子ノードは親のノードの影響を全て受けます。
たとえば単純なSpriteがあり、その下にLabelを配置したとします。
Iconが親、Labelが子となっています。
上の状況の場合、LabelはIconからの相対位置になります。表示スクリーン(Viewport)からの絶対位置ではありません。Iconが移動すれば、いっしょにLabelも移動することになります。
たとえばキャラクターが動いたらアイテムもいっしょに動かしたい場合、単純にキャラクターの子ノードとして設定すればOK。キャラクターの位置をフックし、いちいち座標計算する必要はありません。
また、ノード内の同じ階層の子ノードは、すべてワンセットで効力を発揮します。
親ノード(Area2D)の下に当たり判定(Collision)、スプライト(Sprite)を入れれば、「当たり判定を持ったスプライト」として動きます。互いを設定やコードで結びつけ合う必要はありません。単に階層にすれば良いのです。
重ね合わせ
ノードは「下のノードほど手前に」表示されます。並べ替えるとわかります。
ですが全部がこのルールですと、多数のオブジェクトになったときにツリー管理が非常に大変です。1000発の弾幕シューティングなんて作ったら、自機よりも先に自分の手首が爆発します。(笑)
もちろん解決策があります。
ノードの順番以外には「Z Index」でも設定できます。この値が大きいほど手前、小さいほど(マイナスもあり)奥に表示されます。
コメント