UnityのRule Tileを47・16タイルセットから · ルールの手作業なし
シートを切って47の近傍ルールをクリックする代わりに、ここへドロップ。配置を認識し、Unityバンドルのエディタースクリプトがスプライトを切り(Point・無圧縮)、ビットからRule Tileを作ります。
Rule Tile(2D Tilemap Extrasパッケージ)はタイリングルールのリストです。ルールごとに3 × 3のグリッドがあり、各隣セルは無視するか、このRule Tileであること(緑の矢印)か、そうでないこと(赤い×)を指定します。Unityはルールを上から調べて最初に合ったものを描き、どれも合わなければDefault Spriteを描きます。ブロブのタイルセットなら47個のルールを手で作ることになります。Nerulioはタイルのビットからルールを書き、PNGを切り分けて地形ごとにRuleTileを作るエディタースクリプトを添えます。Unity 6000.5.3f1とTilemap Extras 8.0.3で確認済みです。角・デュアルグリッドのセットはUnityへは書き出しません。

- Unity 6 Rule Tile検証済み· Unity 6000.5.3f1 + 2D Tilemap Extras 8.0.3
- Godot 4 TileSet検証済み· Godot 4.7.2
- Tiled検証済み· Tiled 1.12.2
- LDtk一部検証· LDtk 1.5.3 schema + loader
Rule Tileがスプライトを選ぶ仕組み
Tilemap Extrasのマニュアルが構成を説明しています。Default Sprite(合うルールがないときに描く)、Default Collider、そしてTiling Rulesのリストがあり、各ルールはルールグリッド・スプライト・出力(Single、Random、Animation)を持ちます。ルールグリッドのセルは空(その隣は無視)、緑の矢印(隣がこのRule Tileであること)、赤い×(そうでないこと)のいずれかです。マニュアルには、Unityは「上から順に各ルールを調べる」とあります。
最初に合ったルールが勝つので、順序が重要です。緩いルールが上にあると厳しいルールが隠れます。Nerulioは調べる隣の数が多いルールから並べ、隣の辺が開いている角は絵を変えないので空にします。そのためブロブのルールは4〜8セルを見ます。Unityのグリッドはy軸が上向きなので、北の隣は(0, 1)です。
Rule Tileは自分が置かれたセルに描き、周りのセルを見ます。デュアルグリッドのタイルは4セルの間の点に属するためRule Tileでは表現できず、角セットはUnityの書き出しから外れます。1枚のシートの複数の地形はそれぞれ別のRule Tileになり、互いを「これではない」と見なすので、遷移タイルなしで接します。
- Rule Tile
- 隣のタイルからスプライトを選ぶ、2D Tilemap Extrasのタイルアセット。
- Default Sprite
- どのルールにも合わないときにUnityが描くスプライト。Nerulioの書き出しでは内側の全面タイル。
- This / Not This
- 緑の矢印:隣がこのRule Tile。赤い×:そうでない。空:無視。
- ルールの順序
- ルールは上から調べられ、最初に合ったものが描かれます。
例:ブロブタイル1枚のルール
タイルマスク31:N、NE、E、SE、Sがつながり、Wが開いている(Unityグリッド、y上向き)
. ✓ ✓ . = 無視(開いた西の辺の後ろの角)
✕ C ✓ ✓ = This(緑の矢印)
. ✓ ✓ ✕ = Not This(赤い×)
JSONの隣 [[0,1,1],[1,1,1],[1,0,1],[1,-1,1],[0,-1,1],[-1,0,2]] (dx, dy, 1 This / 2 NotThis)
ブロブ47 → ルール47個、確認数の多い順;Default Sprite = 全面タイル
辺16のセット → ルール16個、それぞれ4辺を確認スプライト名はシート上の列と行から付き(cr31の8 × 6シートなら上のマスク31のタイルはtile_4_1)、矩形はUnityの数え方どおりテクスチャの左下から測ります。
できること
- ブロブ47・辺16のセット。ルールは認識または塗った地形ビットから作成。
- Editor/NerulioRuleTileImporter.csが2D Tilemap Extrasで地形ごとにRuleTileを作成。
- Unity 6000.5.3f1+Tilemap Extras 8.0.3で確認:塗ったTilemapの全セルが予測どおり、スプライト範囲とピクセルも正確。
- 組み合わせが足りない所にはUnityがRule Tileの既定スプライトを描きます。Studioのテストマップもそれを表示。
使い方
- タイルセットを入れて配置を適用。
- チェックパネルを読み、足りない組み合わせを埋める。
- Unity 6向けに書き出し。
- バンドルをAssets/にコピーし(.csはEditorフォルダーへ)、JSONを選んでTools › Nerulio › Build Rule Tilesを実行します。
出力されるファイル
| ファイル | 用途 |
|---|---|
nerulio-ruletile.json | スプライトの矩形、ユニットあたりのピクセル(= タイル幅)、地形ごとの既定スプライトと並べ替えたルール。 |
Editor/NerulioRuleTileImporter.cs | Tools › Nerulio › Build Rule Tilesを追加:PNGをSprite(Multiple)・Point・ミップマップなし・無圧縮にし、切り分けて地形ごとにRuleTileを書きます。 |
cave.png | タイルセット画像。 |
README.txt | この手順。 |
Terrain.asset | スクリプト実行時にUnityがJSONの隣に書きます。名前は地形名に従います(変更していなければ「Terrain」)。 |
Unity 6でRule Tileを作って塗る
- プロジェクトになければ2D Tilemap Extrasを入れます。Window › Package Manager › Unity Registry › 2D Tilemap Extras › Install。
- PNGと
nerulio-ruletile.jsonをAssets/以下の同じフォルダーに、NerulioRuleTileImporter.csをEditorという名前の任意のフォルダーにコピーします。 - ProjectウィンドウでJSONを選び、Tools › Nerulio › Build Rule Tilesを実行します。Consoleに
Nerulio: wrote 1 RuleTile(s)と出て、JSONの隣に.assetができます。 - タイルマップを作ります。Hierarchyで右クリック › 2D Object › Tilemap › Rectangular。
- Window › 2D › Tile Paletteを開き、RuleTileアセットをパレットにドラッグし、選択してPaint with Active Brushツールで塗ります。
- 衝突が必要なら、Rule TileのインスペクターでDefault Collider(と各ルールのCollider)をGridにし(スクリプトはNoneで書きます)、タイルマップにTilemap Collider 2Dを追加します。
結果の確認
- RuleTileのインスペクターに、ブロブセットならタイリングルール47個(辺のセットなら16個)が表示され、Default Spriteは内側の全面タイルです。
- 3 × 3の範囲と孤立した1セルを塗ります。異なるスプライト9つと孤立スプライトが出るはずです。縁に全面タイルが出たら、その組み合わせがシートにありません。
- スクリプトがPNGをPointフィルター・無圧縮で取り込むので、どの倍率でもスプライトはくっきりしているはずです。
トラブルシューティング
| 症状 | 考えられる原因 | 確認方法 | 対処 |
|---|---|---|---|
| Tools › Nerulioメニューがない | スクリプトがEditorフォルダーにない、または2D Tilemap Extrasや2D Spriteパッケージがなくてコンパイルできない | ConsoleのRuleTileやSpriteDataProviderFactoriesに関するコンパイルエラー | 両パッケージを入れ、スクリプトをEditorフォルダーへ移す |
Nerulio: select nerulio-ruletile.json first. | JSON以外が選択されている | Projectウィンドウの選択 | JSONを選んでメニューを再実行 |
| PNGが「プロジェクトにない」という例外 | PNGがJSONの隣にない、または名前が変わった | JSONのimageとファイル名を比べる | 書き出したときの名前のままPNGをJSONの隣に置く |
| 縁や角に全面タイルが出る | シートにその組み合わせがなく、UnityがDefault Spriteを描いた | Studioのチェックパネルの欠けている組み合わせ | 足りないタイルを描くか生成して書き出し直す |
| 2つの地形がくっきり途切れて接する | 地形ごとに別のRuleTileで、互いを「これではない」と見なす | ビルド後に.assetが2つある | 1つのタイルマップに地形1つにするか、遷移が必要ならGodot・Tiledを使う |
ZIPにunityフォルダーがない | 角・デュアルグリッドのセットなので省かれた(NOTES.txtに記載) | Studioのマッチモードがcorners | デュアルグリッドのセットはGodotかTiledへ |
| キャラクターがタイルマップをすり抜けて落ちる | RuleTileのColliderがNone、またはTilemap Collider 2Dがない | RuleTileのインスペクターのDefault Collider | Grid(またはSprite)にしてTilemap Collider 2Dを追加 |
ほかの方法
エンジン別の書き出しと検証方法
「検証済み」は、実際の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はブロブ・辺セットの塗った全セルで一致。
制限
- 角・デュアルグリッドのセットはUnityへ書き出しません。
- 複数の地形は、互いに遷移のない別々のRuleTileになります。
- 衝突形状はありません。RuleTileはCollider Noneで書かれ、Nerulioで取ったポリゴンはGodotにだけ渡ります。
- Tiledの地形ブラシ、LDtkアプリ、Godotエディターでの塗りは操作していません。検証はエンジンの読み込み機能とset_cells_terrain_connectで行いました。
- Unityへはブロブ・辺タイルセットのみ。地形が複数あると、互いにつながらないRule Tileが複数になります。
- アイソメトリック・六角タイル、アニメーションタイル、オクルージョン・ナビゲーションレイヤーは対象外です。
- 既知の配置なしでビットを提案するには基準となる「塗りつぶし」タイルが必要です。辺だけの道テンプレートでは、そのタイルを選ぶまで推定を誤ることがあります。
バージョンと出典
Unity 6000.5.3f1(バッチモード)と2D Tilemap Extras 8.0.3で確認しました。同梱のスクリプトがRuleTileを作り、塗ったTilemapがコーパス10セットの全セルでStudioの予測どおりのスプライトを返し、スプライトの矩形とピクセルも正確でした。ルールJSONでスプライトを2つ入れ替えるとこのチェックは失敗します。上のUnityのメニューパスはUnity 6のマニュアルとTilemap Extras 8.0.3のドキュメントに基づきます。
参照した公式ドキュメント
よくある質問
Unityの2D Tilemap Extrasは必要?
はい。Rule Tileはそのパッケージのものです(8.0.3で確認)。
1枚に複数の地形があるときは?
地形ごとに別のRule Tileになり、Unityはその間の遷移を描きません。
無料ですか?アカウントは必要ですか?
このページの機能はすべて無料で、アカウントなしで使えます。透かしや制限された書き出しはありません。
スプライトはアップロードされますか?
いいえ。Studioはこのブラウザのタブ内でデコード・パック・書き出しを行います。プロジェクトはブラウザ(IndexedDB)に自動保存され、.nerulioファイルとして保存できます。
Asepriteやエンジンのプラグインは必要ですか?
いいえ。.asepriteファイルはブラウザで読み書きします。エンジン別のバンドルには必要なものが入っています(Godotはインポート設定とシーン、UnityとGodotのタイルセットは小さなエディタースクリプト)。