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