本文へスキップ

Godotのテレインで違うタイルが出る · 原因と直し方

Godot 4のテレインで縁の合わないタイルが置かれたりセルが空になったりする原因は、たいていその隣接パターン用のタイルがタイルセットにないか、ピアリングビットの設定ミスです。Godotは最も近いタイルで代用するかセルを空のままにし、塗る順番で結果が変わることもあります。

Godot 4の地形が違うタイルを塗ったりセルを空にしたりする原因は4つです。地形セットにその近傍用のタイルがない(多くは孤立タイル、1タイル幅の帯、内角)、セットのマッチモードが絵に合っていない、タイルのピアリングビットが違う位置や地形を指している、タイルとブラシが別の地形セットにある、のいずれかです。Godotは警告せずに最も近いパターンを選び、それが空のパターンのこともあります。下の表の順に確認してください。最初の3つはGodotを開く前にStudioで見えます。

タイルセットやオートタイルのシート(PNG)をドロップ
空のStudioを開く
ブラウザ内で処理し、ファイルはアップロードされません。
Studio のタイル作業画面:Godotのルールで塗ったテストマップで、孤立タイルがないため1セルが空になり、チェックパネルがそれを示した画面
CC0アセット(OpenGameArt)を開いた実際のStudio画面です。
書き出し先
  • Godot 4 TileSet検証済み· Godot 4.7.2
  • Tiled検証済み· Tiled 1.12.2
  • Unity 6 Rule Tile検証済み· Unity 6000.5.3f1 + 2D Tilemap Extras 8.0.3
  • LDtk一部検証· LDtk 1.5.3 schema + loader

Godotがタイルを選ぶ仕組みと、おかしくなる理由

Terrainsタブやset_cells_terrain_connectで塗ると、Godotは塗ったセルの中央・辺・角に制約を置き、セルを1つずつ解きます。塗ったセルは逆順に、その後で隣のセルです。セルごとに地形セットの全パターンと、常に存在する空のパターンを採点し、最も低いものを選びます。TileMapLayerのリファレンスは条件を明記しています。TileSetには「必要なすべての地形の組み合わせ」が必要で、「そうでなければ予期しない結果になることがある」とあります。

最大の原因は欠けた組み合わせです。空に対する地形1つに、Match Corners and Sidesでは47枚、Match Sidesでは16枚、Match Cornersでは16枚が必要で、地形のペアにはさらに遷移タイルが要ります。よく欠けるのは孤立タイル、辺セットの行き止まり4枚と直線2枚(3 × 3のボックスは16枚中9枚だけ)、そして内角です。2つ目の原因はモードです。ブロブの絵をMatch Sidesにすると47枚が16パターンにまとまり、内角の違うタイルがGodotがランダムに選ぶ重複になります。

残りの2つはデータの誤りです。Godotのドキュメントによれば、Terrain SetとTerrainの番号は0から始まり、−1はなしを意味します。Terrain Setが−1のままのタイルや、セット0を塗っているのにセット1にあるタイルは選ばれません。ピアリングビットが違う辺にあったり、地形0ではなく1を指していたりすると、そのタイルはどのマップにも現れない近傍にしか合いません。Nerulioは既存の.tresを開いてその場で直すことはできず、画像と正しいビットからTileSetを作り直します。

空のパターン
Godotが常に候補にする「タイルなし」。ほかが十分に合わないとこれが勝ちます。
必要な組み合わせ
モードごとにマップが求めうるすべての近傍。空に対する地形1つにつき47、16、16。
重複パターン
地形とビットが同じ2枚のタイル。Godotは確率でどちらかを選びます。
開いた辺の後ろの角ビット
隣の辺が開いているのに立っている角ビット。どのマップも求めないので、そのタイルは使われません。

例:不完全なセットでGodotがすること(Godotルール、4.7.2と同じ)

孤立タイルのないブロブセット、1セルだけ塗る
  set_cells_terrain_connect([Vector2i(1, 1)], 0, 0)   →  セルは空のまま
Match Sidesの3 × 3ボックス(辺タイル16枚中9枚)、横4セルの帯
  →  4セルとも空:上下が開いたタイルがない
マスク223のないブロブセット、マップ  X X X
                                   X C X     Cが求めるもの N NE E SE S W NW = 223
                                   . X X     Godotは215を描く:左下と右下の両方に内角
Match Sidesのブロブの絵  →  47枚が16の辺パターンに、31枚がほかと重複

3つ目のケースでは、マップが埋まっているCの右下に内角が1つ余分に出ます。よく報告される典型的な「角の間違い」です。

できること

  • チェックパネルが地形ごとに「ある組み合わせ/必要な組み合わせ」を数え、足りないものをゴーストタイルで表示。何を描き足せばいいかが一目で分かります。
  • 同じビットのタイルが2枚ある重複はクリックできる一覧に。開いた辺の裏に角ビットがあるタイル(どのマップも要求しない組み合わせ)は別に数えます。
  • 絵とビットの照合は、各タイルの縁のピクセルとビットを比べます。コーパスでは入れ替えた2枚を過不足なく検出し、誤検出はありませんでした。
  • テストマップのGodot規則はset_cells_terrain_connectの移植で、Godot 4.7.2とセル単位で一致。空いたセルや代用されたセルは枠で示し、カーソルを乗せるとどのタイルがなぜ選ばれたかを表示。
  • 足りない組み合わせが多いときは、ジェネレーターが小さな元ブロック(ツクールのA2、Blobsmithベース、A4壁、5タイル、手続き的な縁)からブロブ47やデュアルグリッド16を丸ごと組み立てます。

使い方

  1. タイル作業画面にタイルセットのPNGを入れ、「このグリッドを使う」を押す。
  2. 認識されたレイアウトを適用。合うものがなければBでビットを塗る。
  3. チェックパネルで指摘されたビットを直し、ゴーストタイルの組み合わせを描くか生成する。
  4. Mでテストマップを開き、Godot規則のまま塗って枠付きのセルがなくなるまで確認。
  5. Godot 4向けに書き出し、nerulio_tileset_import.gdを実行して直したビットでTileSetを作り直す。

結果の確認

  • 孤立した1セル、1タイル幅の帯、3 × 3の四角、L字の内角を含むテスト形状を塗ります。全セルに縁のつながったタイルが表示されるはずです。
  • コードでは、空のまま残ったセルに対してget_cell_source_id(coords)が−1を返します。塗ったセルを順に調べて残りを見つけてください。
  • Studioのチェックパネルがすべての組み合わせにタイルが1枚ずつあり不正なビットがないと表示し、Godotルールのテストマップに印の付いたセルがないはずです。

Godotのテレインの不具合:症状・原因・直し方

症状よくある原因Studioでの直し方
内角や分岐に縁の合わないタイルが出るその隣接パターンのタイルがなく、最も近いもので代用チェックパネルのゴーストタイルを描くか、ジェネレーターで作り直す
塗ったセルが空のままどのタイルも隣接パターンに合わないテストマップ(Godot規則)が空きを枠で示し、欠けた組み合わせを表示
同じ場所に2種類のタイルがランダムに出る同じビットのタイルが2枚あり、確率で選ばれる重複一覧で1枚に絞るか、バリエーションなら確率を設定
タイルがあるのに一度も使われない開いた辺の裏に角ビットがある3×3ビット編集で余分な角ビットを消す
ビットは正しそうなのに継ぎ目が見えるビットと絵が食い違う(2枚の入れ替わりなど)絵とビットの照合が両方を指摘。直すかレイアウトを再適用
塗る順番で結果が変わるGodotの照合が経路に依存地形ごとに1回、行順に塗る(テストマップと同じ方法)

コーパスでの結果:Godot 4.7.2はすべての試験セルをStudioの予測どおりに塗りました(ブロブ各セット485/485、4地形のデュアルグリッド251/251)。

トラブルシューティング

この順に原因を確認してください。各行にGodotでの確認方法と、役立つ場合はStudioでの確認方法を書いています。

症状考えられる原因確認方法対処
1セルだけ塗ると空のままセットに孤立タイル(マスク0)がないTileSetエディター:ピアリングビット8つがすべて−1の地形タイルがあるか。Studioのチェックパネルでは欠けとして表示描くか、外角4つを含むセットを生成する
1タイル幅の道や帯が空になる、または縁が付く3 × 3ボックスの9枚だけの辺セットで、行き止まりと直線がない地形タイルの数を数える:Match Sidesには16枚必要欠けている辺タイル7枚を足すか、16枚すべてを生成
内角が違う側に出るセットにその内角の組み合わせがなく、Godotが最も近いタイルで代用Studioのテストマップ(Godotルール)が代用されたセルを示し、欠けたパターンを表示欠けている角のタイルを描く
同じ形の場所に別々のタイルが置かれ、内角が無視される絵に対してマッチモードが粗い(ブロブセットをMatch Sidesに)TileSetインスペクター › Terrain Sets › Mode47タイルの絵はMatch Corners and Sides、角16の絵はMatch Corners
描いたタイルがまったく使われないピアリングビットが違う位置(開いた辺の後ろの角)にある、または地形番号が違うTileSetエディター › Selectモード › そのタイルのTerrainsセクション。Studioは「開いた辺の後ろの角ビット」を数えるビットを消すか移す。ビットの値は0から始まる地形番号
ブラシが何も塗らない、または特定のタイルを選ばないタイルのTerrain Setが−1、またはTerrainsタブで選んだセットと別のセットにあるタイルのTerrain Setの値とTerrainsタブで選んだセットを比べるその地形のタイルをすべて同じ地形セットに入れる
塗る順番で結果が変わるGodotはセルを順に解くので、セットの穴がストロークごとに違う形で埋まる同じ範囲を1回で塗った場合と複数ストロークの場合を比べるセットを完成させる。完全なセットなら順番は結果に影響しない
2つの地形の境目に隙間が出るAとBの間の遷移タイルがないA–BのペアについてのStudioのチェックパネルAからBの遷移を生成するか描く

ほかの方法

方法こんなときに向いています
TileSetエディターでビットを手で直すほかは完全なセットで、間違ったタイルが1〜2枚のとき。
画像からTileSetを作り直す:Godot 4のオートタイル間違ったビットや欠けたビットが多い、または既存の.tresが信用できないとき。
Godotの前にセットを試す:オートタイルテスターまだタイルを描いている途中で、穴をその場で確認したいとき。

エンジン別の書き出しと検証方法

「検証済み」は、実際のCC0アセットから書き出したファイルを本物のエンジン・ツールで読み込み、元データと比較したという意味です。読み込んでいない形式はそのように表示します。

書き出し先ファイル検証
Godot 4 TileSetPNG · nerulio-tileset.json · nerulio_tileset_import.gd検証済み Godot 4.7.2同梱のインポートスクリプトが地形ピアリングビット付きのTileSetを作成。set_cells_terrain_connectで塗ったマップが、9つのコーパスシートの全セルでStudioのプレビューと一致。
Tiled.tsx Wang set · sample.tmx検証済み Tiled 1.12.2Tiled自身の読み込みで全Wang IDが記述どおりに読まれ、サンプルマップはピクセル単位で一致。地形ブラシ自体は操作していません。
Unity 6 Rule Tilenerulio-ruletile.json · Editor/NerulioRuleTileImporter.cs検証済み Unity 6000.5.3f1 + 2D Tilemap Extras 8.0.3ブロブ・辺タイルセット:塗ったTilemapの全セルが予測どおりのスプライト。角/デュアルグリッドはUnityへ書き出しません。
LDtk.ldtk (1.5.3) · rules · sample level一部検証 LDtk 1.5.3 schema + loaderLDtkのJSONスキーマと公式ローダーで受理され、ルールを再実行すると書き出したタイルと一致。LDtkアプリでは未確認。

検証の根拠

タイルコーパスでピクセルだけから配置を判定:ブロブ47テンプレート4つとWangテンプレート2つは高信頼度、実在の64px洞窟タイルセットは中信頼度で全タイルのビットが正解。Godot 4.7.2は全テストセルをStudioの予測どおりに塗りました(ブロブセットごとに485/485、4地形のデュアルグリッド251/251)。Tiled 1.12.2は全Wang IDを読み戻し、Unity 6000.5はブロブ・辺セットの塗った全セルで一致。

制限

  • Nerulioは既存の.tresを開けません。画像とビットからTileSetを作り直すので、比べ終わるまで古いリソースは残しておいてください。
  • 存在しない絵はビットでは直せません。欠けたタイルは描くか生成する必要があります。
  • 不完全なセットでは、Godotの塗りは順番に左右されます。Studioは地形ごとに行単位で1回塗った結果を示します。
  • Tiledの地形ブラシ、LDtkアプリ、Godotエディターでの塗りは操作していません。検証はエンジンの読み込み機能とset_cells_terrain_connectで行いました。
  • Unityへはブロブ・辺タイルセットのみ。地形が複数あると、互いにつながらないRule Tileが複数になります。
  • アイソメトリック・六角タイル、アニメーションタイル、オクルージョン・ナビゲーションレイヤーは対象外です。
  • 既知の配置なしでビットを提案するには基準となる「塗りつぶし」タイルが必要です。辺だけの道テンプレートでは、そのタイルを選ぶまで推定を誤ることがあります。

バージョンと出典

StudioのGodotルールはGodot 4の地形マッチングの移植で、コーパスでは不完全なセットや複数地形のセットの代用タイルと空セルも含め、Godot 4.7.2とセル単位で一致しました(テストのフィクスチャとして記録)。上の例はこの移植で計算しました。地形の設定と番号はGodot 4.7の公式ドキュメントに基づきます。

参照した公式ドキュメント

よくある質問

タイルマップにテレインがまったく表示されないのはなぜ?

隣接パターンに合うタイルがないと、Godotはセルを空にします。広い範囲が空なら、マップが求める組み合わせの大半が欠けています。チェックパネルの組み合わせ数とテストマップの空きセル表示で確認できます。

手元のTileSetの.tresを開ける?

いいえ。タイルセットの画像から始めます。Godot 4向けに書き出すと、同梱のGDScriptが直した地形ビットでGodot内に新しいTileSetを作ります。比べ終わるまで元のリソースは残しておいてください。

デュアルグリッド(角)のセットがGodotで半マスずれる

Godotは角合わせのセットを格子点ではなくセルの上に描くため、デュアルグリッドにはTileMapDualのようなプラグインが必要です。Godot規則はGodotの描き方、Tiled規則は半マスずらすTiledの描き方で表示します。

Godotエディターのテレインブラシでも確認した?

いいえ。ブラシが内部で呼ぶset_cells_terrain_connectをGodot 4.7.2で実行し、全セルを比較しました。ブラシ自体は操作していません。

無料ですか?アカウントは必要ですか?

このページの機能はすべて無料で、アカウントなしで使えます。透かしや制限された書き出しはありません。

スプライトはアップロードされますか?

いいえ。Studioはこのブラウザのタブ内でデコード・パック・書き出しを行います。プロジェクトはブラウザ(IndexedDB)に自動保存され、.nerulioファイルとして保存できます。

Asepriteやエンジンのプラグインは必要ですか?

いいえ。.asepriteファイルはブラウザで読み書きします。エンジン別のバンドルには必要なものが入っています(Godotはインポート設定とシーン、UnityとGodotのタイルセットは小さなエディタースクリプト)。