Yソートを使う

課題

多くの2Dゲームでは「3/4視点」と呼ばれるアングルが採用されており、カメラが少し斜め上から見下ろしているような構図になっています。これを実現するためには、より「奥」にあるオブジェクトを先に描画し、手前のオブジェクトの後ろに配置が必要です。実際には、これは「y軸ソート」(描画順序をオブジェクトのy座標に紐付けること)を意味します。画面上の高い位置にあるものほど遠くに位置するため、レンダリング順序もそれに応じて低く設定されることになります。

以下のような問題が発生します。

alt alt

以下のオブジェクトはデフォルトのレンダリング順序(ツリー順)で描画されています。シーンツリー上での配置は以下の通りです。

alt alt

解決策

Godotにはレンダリング順序を変更する組み込みオプションが用意されています。任意のCanvasItemノード(Node2DまたはControl)に対して、Y軸ソート有効化 プロパティを有効にできます。この機能が有効になると、すべての子ノードがY軸に沿って並べ替えられます。

上記の例では、TileMapノード上でプロパティを有効にできます。ただし、まだ解決すべき問題が残っています。

alt alt

ドロー順序は各オブジェクトの y 座標に基づいています。デフォルトではこれはオブジェクトの中心座標となります。

alt alt

オブジェクトが「地面」の上に配置されているように見せたい場合、オブジェクトの position プロパティがスプライトの最下部位置と一致するようにオフセットすることで解決できます。

alt alt

だいぶ良くなりました。

alt alt

プロジェクトのダウンロード

プロジェクトのサンプルコード: https://github.com/godotrecipes/using_ysort