前回Nodeを触ってみて、見た目を持たない土台のノードっぽいことは分かったが、もっといろいろなノードを理解する必要があると感じました。次は同じような土台であるNode2Dを触ってみました。
Nodeのときと同じように、Node2Dだけをシーンに置いてみるとこんな感じ。

すると今度は、ビューポートの原点に小さな十字のマークが表示されました。Nodeのときは本当に何も出なかったので、違いはありますね。ただ、これだけじゃ何もわかりません。

インスペクターは違いがたくさんありますね。というかこんなに覚えられなくて心配になりました。
一番上にTransformという項目があり、Position・Rotation・Scale・Skewが並んでいます。GodotではTransformが座標や角度を示すものだと覚えておくと、他のノードやプログラムを書く時に便利だと思います。
さらに下にスクロールすると、CanvasItemという区切りがあり、その中にVisibilityやOrdering、Textureといった項目が並んでいました。そしてそのさらに下には、前回見たNodeの項目(Process、Physics Interpolationなど)がそのまま入っています。Node2Dは、NodeにCanvasItemの機能が足され、さらにその上にNode2D独自のTransformが足されたもの、という積み重ねになっているということですね。なんでCanvasItemが挟まっているのかはピンときませんでしたが、一旦「そういうもの」として理解しました。

試しにビューポート上でNode2Dの赤い小さな十字をドラッグして動かしてみると、Positionの数値が530.0、225.0に変わりました。この赤いのがやっぱりNode2Dってことなんですね。
赤い十字じゃわかりにくいので子ノードとしてSprite2D(Godotのデフォルトアイコン)を追加してみました。

Node2Dの下にSprite2Dを子ノードとして追加し、Node2D自体を動かしてみると、Positionが184.0、110.0になったところに、子のSprite2Dも一緒に移動しました。これが親子関係ってことなんですね。親の座標が動けば子も動く、というのはゲーム作りに絶対的に必要な感覚だと思います。

さらにNode2Dのスケールを小さくしてみると、子のSprite2Dも一緒に小さくなりました。小さくなったというより、Node2Dとの距離もスケール通りに縮小して近づいたという感じですね。子が複数ある場合に位置や大きさをまとめて動かす基準点として働いていることが、実際に動かしてみてようやく実感できました。



コメント