オートタイルシートからLDtkのオートレイヤールール
LDtkのオートレイヤールールは強力ですが準備が大変です。Studioは認識した地形ビットからタイルごとにルールを書きます。LDtkのJSONスキーマ・公式ローダー・独立したルールの再実行で確認しましたが、LDtkエディターでは開いていません。
LDtkのオートタイルは、タイルセットとオートレイヤールールを持つIntGridレイヤーです。ルールごとにIntGrid値のパターン(1 × 1〜7 × 7)があり、合った場所にタイルを塗ります。ルールは上から実行され、「break on match」が有効ならそのセルでは以降のルールが止まります。Nerulioはオートタイルシートのタイル1枚ごとに3 × 3のルールを1つ作り(ブロブセットなら47個)、サンプルレベル付きのLDtk 1.5.3プロジェクトとして書き出します。ファイルはLDtkのJSONスキーマと公式ローダーを通り、ルールを再実行すると同じタイルになりますが、LDtkアプリでは開いていません。

- LDtk一部検証· LDtk 1.5.3 schema + loader
- 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
IntGrid値、ルール、そしてその順序
LDtkのマニュアルはオートレイヤーを「ひと工夫したIntGridレイヤー」と説明しています。タイルセットがリンクされ、ルールが自動でタイルを塗ります。ユーザーは整数値を塗り(JSONリファレンス:0は空セル、値は1から)、ルールがそれをタイルに変えます。純粋なオートレイヤーは別のIntGridレイヤーから値を読むこともできます。
ルールは、セルと隣を覆う正方形のパターンと、塗るタイルからなります。Nerulioが書くファイルでは、パターンのセルはv(隣が値vであること)、−v(vでないこと)、0(何でもよい)のいずれかで、左上から行ごとに並び、タイルは中央のセルに置かれます。開いた辺の後ろの角は0なので、ブロブのルールは5〜9セルを確認します。JSONリファレンスはbreakOnMatchを「合った場合、同じセルに他のルールを適用させない」と定義しているので、Nerulioは最も具体的なルールから並べ、この設定を有効にしています。
角(デュアルグリッド)セットはLDtkのタイルオフセットを使います。ルールはセルとその右・下・右下、つまり1つの格子点で接する4セルを読み、タイルを半タイル右下のその点の上に描きます。
- IntGrid値
- セルごとに塗る整数。地形ごとに1つ(地形1 = 値1 …)。
- オートレイヤールール
- 必要な値と禁止する値のパターンと、合ったときに塗るタイル。
- Break on match
- ルールが合うと、以降のルールはそのセルを飛ばす(LDtkの既定)。
- タイルオフセット
- ルールごとに塗ったタイルをピクセル単位でずらす値。デュアルグリッドでは半タイル。
例:ブロブタイル1枚の3 × 3ルール(地形 = IntGrid値1)
タイルマスク31:N、NE、E、SE、Sがつながり、Wが開いている
パターン(左上から行ごと):
0 1 1 1 = 値1であること
-1 1 1 -1 = 値1でないこと
0 1 1 0 = 何でもよい(開いた西の辺の後ろの角)
JSON "size":3, "pattern":[0,1,1,-1,1,1,0,1,1], "breakOnMatch":true
ルール数 ブロブ47 → 47、辺16 → 16、角16 → 15(すべて空の角タイルは何も描かない)レベル外のセルは空として数えます(outOfBoundsValue 0)。そのためレベルの端に接する地形にも縁のタイルが付きます。
できること
- 地形ごとのIntGrid値とタイルごとの3×3ルール入りの.ldtk(1.5.3)。
- autoLayerTilesを埋めたサンプルレベルつきで、結果をすぐ確認できます。
- 角・デュアルグリッドのセットは半タイルのオフセットで書き出し。
- 一部検証:スキーマ+公式QuickTypeローダー+独立したルール再実行が、コーパス12セットで書き出したタイルと一致。
使い方
- タイルセットを入れて配置を適用(またはビットを塗る)。
- チェックパネルを読み、足りない組み合わせを埋める。
- 書き出して(Ctrl+E)ldtkフォルダーを使う。
- LDtkで.ldtkを開き、IntGridレイヤーを塗る。
出力されるファイル
cave.pngというシートを書き出したときの、ZIP内のldtkフォルダーです。
| ファイル | 用途 |
|---|---|
cave.ldtk | LDtk 1.5.3プロジェクト:タイルセット定義、地形ごとに値を持つIntGridレイヤーTerrain、ルールグループNerulio terrain、autoLayerTilesが埋まったレベルSample。 |
cave.png | タイルセット画像。ファイル名で参照されます。 |
README.txt | プロジェクトの内容と、サンプルレベルに置かれるタイル数。 |
LDtkで開いて塗る
ldtkフォルダーを展開し、PNGを.ldtkファイルの隣に置きます。- LDtkで
.ldtkを開きます。レベルSampleにはルールが置いたタイルがすでに表示されています。 - LAYERSパネルでIntGridレイヤー
Terrainを選びます。値があなたの地形で、AUTO PAINTのタイルセットがあなたのPNGです。 - レイヤーのRULESボタンを押すと、タイルごとに1ルールを持つグループ
Nerulio terrainが、調べられる順に表示されます。 - 左ボタンで値を塗り、右ボタンで消し、Shift + ドラッグで矩形、Shift + クリックで塗りつぶしです。塗るたびにLDtkがルールを再実行します。RulesパネルでShift+Rを押すと元のIntGridが見えます。
- ゲームでは、レベルの
autoLayerTiles(LDtkが表示順に並べて保存)を読むか、自分でルールを回すならintGridCsvを読みます。
結果の確認
- 何も塗る前から、Sampleレベルに完成した地形が表示されるはずです。
- ルールグループには、ブロブセットならルール47個(辺のセットは16個、角のセットは15個)があるはずです。
- 孤立した1セルと3 × 3の四角を塗ると、孤立タイルと異なるタイル9枚が出るはずです。LDtkアプリ内では私たちが実際に確認できていない部分なので、違いがあれば知らせてください。
トラブルシューティング
| 症状 | 考えられる原因 | 確認方法 | 対処 |
|---|---|---|---|
| タイルセット画像が見つからない | PNGが.ldtkの隣にない、または名前が変わった | タイルセット定義の画像パス | 書き出したときの名前のままPNGをプロジェクトの隣に置く |
| 塗っても値だけでタイルが出ない | 別のレイヤーに塗っている、またはレイヤーのルールがオフ | LAYERSパネルの選択、RulesパネルのRenderオプション | Terrainを選び、ルールグループを有効にしておく |
| 専用タイルの位置に汎用のタイルが出る | 自作のルールがグループより上にある、またはBreak on matchを切った | Rulesパネルのルールの順序 | 自作ルールをグループの下へ移すか、Break on matchを戻す |
| デュアルグリッドのタイルがIntGridと半タイルずれる | 仕様:角のルールは半タイルのオフセットで格子点に塗る | グループ内のルールのタイルオフセット | そのままでよい。タイル同士はかみ合い、IntGridのセルとは半タイルずれるのが正常 |
ZIPにldtkフォルダーがない | LDtkは正方形のタイルと、余白・間隔の値を1つずつしか持てない | NOTES.txtに省いた理由がある | 縦横の余白と間隔が同じ正方形のグリッドを使う |
| 2つの地形が遷移なしで接する | 両方の地形が見えるタイルがシートにない | そのペアについてのStudioのチェックパネル | ジェネレーターでAからBのタイルを生成 |
ほかの方法
| 方法 | こんなときに向いています |
|---|---|
| LDtkのルールエディターで手作業で書く | タイルが少なく、書き出しが使わないLDtkの機能が必要なとき:反転パターン、modulo、checker、確率、1ルールに複数タイル。 |
| TiledのWangセット:TiledのWangセット | マップをTiledで編集し、IntGridの代わりに地形ブラシを使いたいとき。 |
| Godotの地形:Godot 4のオートタイル | エンジンがGodotで、LDtkのレベルエディターが要らないとき。 |
エンジン別の書き出しと検証方法
「検証済み」は、実際のCC0アセットから書き出したファイルを本物のエンジン・ツールで読み込み、元データと比較したという意味です。読み込んでいない形式はそのように表示します。
| 書き出し先 | ファイル | 検証 |
|---|---|---|
| Godot 4 TileSet | PNG · 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 Tile | nerulio-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はブロブ・辺セットの塗った全セルで一致。
制限
- LDtkアプリでは開いていません(コマンドラインがないため)。チェックはスキーマ、公式ローダー、独立したルールの再実行です。
- 1タイルに1ルール:反転、modulo、checker、Perlinのオプションは使いません。
- タイルは正方形で、余白と間隔が縦横で同じである必要があります。
- Tiledの地形ブラシ、LDtkアプリ、Godotエディターでの塗りは操作していません。検証はエンジンの読み込み機能とset_cells_terrain_connectで行いました。
- Unityへはブロブ・辺タイルセットのみ。地形が複数あると、互いにつながらないRule Tileが複数になります。
- アイソメトリック・六角タイル、アニメーションタイル、オクルージョン・ナビゲーションレイヤーは対象外です。
- 既知の配置なしでビットを提案するには基準となる「塗りつぶし」タイルが必要です。辺だけの道テンプレートでは、そのタイルを選ぶまで推定を誤ることがあります。
バージョンと出典
コーパス12セットで確認:プロジェクトはLDtk 1.5.3のJSONスキーマを通り、LDtk公式のQuickTypeローダーで読み込め、ルールを独立に再実行すると書き出したタイルと完全に一致しました。タイルidを変えたりルールを反転させたりするとチェックは失敗します。上のUI名はLDtkの公式ドキュメントに基づき、アプリ自体は操作していません。
参照した公式ドキュメント
よくある質問
なぜ「一部検証」なの?
LDtkはコマンドラインのないElectronアプリなので、アプリでは開いていません。ファイルはLDtkのJSONスキーマと公式ローダーを通過し、ルールを再実行すると書き出したタイルと一致しました。
1枚のシートに複数の地形を入れられますか?
はい。地形ごとにIntGrid値とルールが別々にできます。
無料ですか?アカウントは必要ですか?
このページの機能はすべて無料で、アカウントなしで使えます。透かしや制限された書き出しはありません。
スプライトはアップロードされますか?
いいえ。Studioはこのブラウザのタブ内でデコード・パック・書き出しを行います。プロジェクトはブラウザ(IndexedDB)に自動保存され、.nerulioファイルとして保存できます。
Asepriteやエンジンのプラグインは必要ですか?
いいえ。.asepriteファイルはブラウザで読み書きします。エンジン別のバンドルには必要なものが入っています(Godotはインポート設定とシーン、UnityとGodotのタイルセットは小さなエディタースクリプト)。