Yソートを使う
課題
多くの2Dゲームでは「3/4視点」と呼ばれるアングルが採用されており、カメラが少し斜め上から見下ろしているような構図になっています。これを実現するためには、より「奥」にあるオブジェクトを先に描画し、手前のオブジェクトの後ろに配置が必要です。実際には、これは「y軸ソート」(描画順序をオブジェクトのy座標に紐付けること)を意味します。画面上の高い位置にあるものほど遠くに位置するため、レンダリング順序もそれに応じて低く設定されることになります。
以下のような問題が発生します。
以下のオブジェクトはデフォルトのレンダリング順序(ツリー順)で描画されています。シーンツリー上での配置は以下の通りです。
解決策
Godotにはレンダリング順序を変更する組み込みオプションが用意されています。任意のCanvasItemノード(Node2DまたはControl)に対して、Y軸ソート有効化 プロパティを有効にできます。この機能が有効になると、すべての子ノードがY軸に沿って並べ替えられます。
上記の例では、TileMapノード上でプロパティを有効にできます。ただし、まだ解決すべき問題が残っています。
ドロー順序は各オブジェクトの y 座標に基づいています。デフォルトではこれはオブジェクトの中心座標となります。
オブジェクトが「地面」の上に配置されているように見せたい場合、オブジェクトの position プロパティがスプライトの最下部位置と一致するようにオフセットすることで解決できます。
だいぶ良くなりました。
プロジェクトのダウンロード
プロジェクトのサンプルコード: https://github.com/godotrecipes/using_ysort