本文へスキップ

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へは書き出しません。

タイルセットやオートタイルのシート(PNG)をドロップ
空のStudioを開く
ブラウザ内で処理し、ファイルはアップロードされません。
Studio のタイル作業画面:GameMaker配置と認識した47タイルのシート、地形ビット、完了したチェック
CC0アセット(OpenGameArt)を開いた実際のStudio画面です。
書き出し先
  • 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のテストマップもそれを表示。

使い方

  1. タイルセットを入れて配置を適用。
  2. チェックパネルを読み、足りない組み合わせを埋める。
  3. Unity 6向けに書き出し。
  4. バンドルをAssets/にコピーし(.csはEditorフォルダーへ)、JSONを選んでTools › Nerulio › Build Rule Tilesを実行します。

出力されるファイル

ファイル用途
nerulio-ruletile.jsonスプライトの矩形、ユニットあたりのピクセル(= タイル幅)、地形ごとの既定スプライトと並べ替えたルール。
Editor/NerulioRuleTileImporter.csTools › Nerulio › Build Rule Tilesを追加:PNGをSprite(Multiple)・Point・ミップマップなし・無圧縮にし、切り分けて地形ごとにRuleTileを書きます。
cave.pngタイルセット画像。
README.txtこの手順。
Terrain.assetスクリプト実行時にUnityがJSONの隣に書きます。名前は地形名に従います(変更していなければ「Terrain」)。

Unity 6でRule Tileを作って塗る

  1. プロジェクトになければ2D Tilemap Extrasを入れます。Window › Package Manager › Unity Registry › 2D Tilemap Extras › Install。
  2. PNGとnerulio-ruletile.jsonをAssets/以下の同じフォルダーに、NerulioRuleTileImporter.csをEditorという名前の任意のフォルダーにコピーします。
  3. ProjectウィンドウでJSONを選び、Tools › Nerulio › Build Rule Tilesを実行します。ConsoleにNerulio: wrote 1 RuleTile(s)と出て、JSONの隣に.assetができます。
  4. タイルマップを作ります。Hierarchyで右クリック › 2D Object › Tilemap › Rectangular。
  5. Window › 2D › Tile Paletteを開き、RuleTileアセットをパレットにドラッグし、選択してPaint with Active Brushツールで塗ります。
  6. 衝突が必要なら、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 ColliderGrid(またはSprite)にしてTilemap Collider 2Dを追加

ほかの方法

方法こんなときに向いています
Rule Tileのインスペクターでルールを手作業で作るタイルが少ないとき、または書き出しが書かないルールが必要なとき:Extend Neighbor(3 × 3の外)、Random・Animationの出力。
Rule Override Tile(Create › 2D › Tiles › Rule Override Tile)同じ配置で描いた2つ目のタイルセット。生成したルールを使い回し、スプライトだけ差し替えます。
Godotの地形やTiledのWangセットデュアルグリッドや地形間の遷移が必要なとき:Godot 4、Tiled。

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

「検証済み」は、実際の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はブロブ・辺セットの塗った全セルで一致。

制限

  • 角・デュアルグリッドのセットは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のタイルセットは小さなエディタースクリプト)。