tilemap-ruletile-createfromsegment について
Sprite またはスプライトシートから RuleTile のタイルルールを生成する Unity 向けスキルです。sprite-segment-3x3grid で各 Sprite を分析し、近傍ルールを絞り込み、重複を除き、具体性順に並べて適用します。
主な機能
- 01Sprite を 3×3 パターンとして分析
- 02パターンを近傍ルールに変換
- 03既知のパターンをデフォルトで選別
- 04具体性に基づく重複排除と並べ替え
- 05Sprite とデフォルト Sprite の割り当て
活用シーン
- 01スプライトシートから RuleTile ルールを生成
- 02分析済み Sprite パターンからルールを構築
- 03必要に応じて標準外パターンを保持
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ unity-technologies/ skills --skill tilemap-ruletile-createfromsegmentインストール後、Claude Code で/tilemap-ruletile-createfromsegmentを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/ManualWorkflowExample.csRuleTileGenerator.csTilemapRuleTileCreateFromSegment.cs詳細
セグメントからTilemap RuleTileを作成
目的
このスキルは、まず sprite-segment-3x3grid スキルを使ってスプライトを分析し、次に得られたテキストパターンを隣接ルールの設定に変換して、Unity RuleTileのTilingRulesを作成します。ユーザーはSpritesまたはSpritesheetの入力を指定する必要があります。
ワークフロー
Step 1: sprite-segment-3x3grid Step 2: Create TilingRules
+--------------------------+ +--------------------------+
| Analyze each Sprite | | Parse text patterns |
| using color matching | -> | Map to neighbor rules |
| Output: text pattern | | Sort by specificity |
+--------------------------+ +--------------------------+
重要: 各スプライトについて、必ず最初に sprite-segment-3x3grid スキルを実行してテキストパターンを生成してください。
ステップ1:sprite-segment-3x3gridを適用する(必須)
テクスチャ内の各スプライトを、sprite-segment-3x3grid を使って分析します。
string pattern = SpriteSegment3x3Grid.AnalyzeSpriteGrid(sprite, matchThreshold: 0.75f);
パターンの出力形式
1行のテキストパターン:[TopRow] / [MiddleRow] / [BottomRow]
各行には、スペースで区切られた3文字が含まれます。
X- セルが一致しきい値を満たさない.- セルが一致しきい値を満たす(中央の色と一致)*- 中央のセル(タイル自体)
例:X X X / X * X / . . .
ステップ2:パターンからTilingRulesを作成する
記号からルールへのマッピング
| 記号 | RuleTileの隣接ルール | 値 | 動作 |
|---|---|---|---|
. | This | 1 | 隣接セルがこのRuleTileのインスタンスである必要があります |
X | DontCare | 0 | この位置は隣接セルのリストに追加されません |
* | (中央) | N/A | 無視されます - タイル自体を表します |
注: 「DontCare」は明示的な定数ではありません。位置が m_Neighbors と m_NeighborPositions のリストに含まれていない場合、その位置は「条件なし」として扱われます。
隣接位置のマッピング
Grid Layout: Unity Vector3Int positions:
[0] [1] [2] (Top) (-1,1,0) (0,1,0) (1,1,0)
[3] [*] [5] (Middle) (-1,0,0) --- (1,0,0)
[6] [7] [8] (Bottom) (-1,-1,0) (0,-1,0) (1,-1,0)
| インデックス | 位置 | Vector3Int |
|---|---|---|
| 0 | 左上 | (-1, 1, 0) |
| 1 | 上 | (0, 1, 0) |
| 2 | 右上 | (1, 1, 0) |
| 3 | 左 | (-1, 0, 0) |
| 4 | 中央 | (スキップ) |
| 5 | 右 | (1, 0, 0) |
| 6 | 左下 | (-1, -1, 0) |
| 7 | 下 | (0, -1, 0) |
| 8 | 右下 | (1, -1, 0) |
パターンのフィルタリング
デフォルトでは、Common Tile Patternsの表に一致する項目がない検出パターンは破棄されます。既知の47パターンのみが保持されます。これにより、予期しないルールやノイズの多いルールが最終的なRuleTileに含まれるのを防ぎます。
ユーザーが標準外のパターンを保持するよう明示的に求めた場合は、filterToKnownPatterns: false を設定して、このフィルタリングを無効にします。
重複の除去
隣接設定が同一のTilingRulesは、自動的に削除されます。複数のスプライトが同じパターンを生成する場合、最初に検出されたスプライトのみが保持されます。
ルールの並べ替え
ルールは具体性(This ルールの数)の降順で並べ替えられます。より具体的なルールが先に評価されます。
| Thisの数 | パターン例 | 優先度 |
|---|---|---|
| 8 | . . . / . * . / . . . | 先頭 |
| 5 | . . . / . * . / X X X | ... |
| 3 | X X X / X * X / . . . | ... |
| 0 | X X X / X * X / X X X | 末尾 |
スプライトの割り当て
各TilingRuleに割り当てられるSpriteは最大1つです。
m_OutputをTilingRuleOutput.OutputSprite.Singleに設定します- スプライトを
m_Sprites[0]に割り当てます
RuleTileの m_DefaultSprite には、最下位(最も具体性の低い)ルールのスプライトを設定します。ルールは具体性の降順に並べ替えられるため、これはリストの最後のルールです。このスプライトは、どのTilingRuleにも一致しない場合に使用されます。
アルゴリズムの概要
- 各スプライトについて:
sprite-segment-3x3gridを実行し、パターンを保存します - フィルタリング:ユーザーが無効にしない限り、一般的なタイルパターンに含まれないパターンを破棄します
- 重複排除:重複するパターンを削除します(最初のスプライトを優先します)
- 解析:
/で行に分割し、続いてスペースでセルに分割します - 隣接セルの抽出:
.の場合はThis(1)を指定した位置を追加し、Xの場合はスキップします - TilingRuleの作成:
m_Neighborsとm_NeighborPositionsを設定します - スプライトの割り当て:単一のスプライト出力を設定します
- 並べ替え:具体性の高い順に並べます
- 適用:並べ替えたルールをRuleTileアセットに追加します
- デフォルトスプライト:
m_DefaultSpriteに、最後(最も具体性の低い)のルールのスプライトを設定します
スクリプト
実装と使用例は scripts/フォルダーにあります:
| ファイル | 説明 |
|---|---|
TilemapRuleTileCreateFromSegment.cs | CreateRuleTileFromSprites、CreateTilingRuleFromPattern、ParsePattern、ApplyRulesToTileを含むコア実装 |
RuleTileGenerator.cs | エディターウィンドウの例(Tools > Generate RuleTile from Sprites) |
ManualWorkflowExample.cs | 分析をより細かく制御するための手動の2段階ワークフロー |
クイック使用方法
// Get sprites and create rules in one call
var rules = TilemapRuleTileCreateFromSegment.CreateRuleTileFromSprites(
sprites, matchThreshold: 0.75f, colorTolerance: 0.04f);
// Apply to RuleTile
var ruleTile = ScriptableObject.CreateInstance<RuleTile>();
TilemapRuleTileCreateFromSegment.ApplyRulesToTile(ruleTile, rules);
一般的なタイルパターン
| タイルの種類 | パターン | この回数 |
|---|---|---|
| 完全に囲まれている(内側のタイル) | . . . / . * . / . . . | 8 |
| 左上の角が欠けている | X . . / . * . / . . . | 7 |
| 右上の角が欠けている | . . X / . * . / . . . | 7 |
| 左下の角が欠けている | . . . / . * . / X . . | 7 |
| 右下の角が欠けている | . . . / . * . / . . X | 7 |
| 上の角が欠けている | X . X / . * . / . . . | 6 |
| 下の角が欠けている | . . . / . * . / X . X | 6 |
| 左の角が欠けている | X . . / . * . / X . . | 6 |
| 右の角が欠けている | . . X / . * . / . . X | 6 |
| 左上と右下の対角の角が欠けている | X . . / . * . / . . X | 6 |
| 右上と左下の対角の角が欠けている | . . X / . * . / X . . | 6 |
| 左上、右上、左下の角が欠けている | X . X / . * . / X . . | 5 |
| 左上、右上、右下の角が欠けている | X . X / . * . / . . X | 5 |
| 左上、左下、右下の角が欠けている | X . . / . * . / X . X | 5 |
| 右上、左下、右下の角が欠けている | . . X / . * . / X . X | 5 |
| 十字 | X . X / . * . / X . X | 4 |
| 平らな辺(下) | X X X / . * . / . . . | 5 |
| 平らな辺(上) | . . . / . * . / X X X | 5 |
| 平らな辺(左) | . . X / . * X / . . X | 5 |
| 平らな辺(右) | X . . / X * . / X . . | 5 |
| L字型、先端が右 | X X X / . * . / . . X | 4 |
| L字型、先端が下 | . . X / . * X / X . X | 3 |
| L字型、先端が左 | X . . / . * . / X X X | 4 |
| L字型、先端が上 | X . X / X * . / X . . | 3 |
| 逆L字型、先端が左 | X X X / . * . / X . . | 4 |
| 逆L字型、先端が下 | X . . / X * . / X . X | 3 |
| 逆L字型、先端が右 | . . X / . * . / X X X | 4 |
| 逆L字型、先端が上 | X . X / . * . / . . X | 5 |
| T字型、下向き | X X X / . * . / X . X | 3 |
| T字型、上向き | X . X / . * . / X X X | 3 |
| T字型、左向き | X . X / . * X / X . X | 3 |
| T字型、右向き | X . X / X * . / X . X | 3 |
| 横ブリッジ | X X X / . * . / X X X | 2 |
| 縦ブリッジ | X . X / X * X / X . X | 2 |
| 角のピース、右下 | X X X / X * . / X . . | 3 |
| 角のピース、左下 | X X X / . * X / . . X | 3 |
| 角のピース、左上 | . . X / . * X / X X X | 3 |
| 角のピース、右上 | X . . / X * . / X X X | 3 |
| 辺の端、右下 | X X X / X * . / X . X | 2 |
| 辺の端、左下 | X X X / . * X / X . X | 2 |
| 辺の端、左上 | X . X / . * X / X X X | 2 |
| 辺の端、右上 | X . X / X * . / X X X | 2 |
| 単独のタイル、左 | X X X / . * X / X X X | 1 |
| 単独のタイル、右 | X X X / X * . / X X X | 1 |
| 単独のタイル、上 | X . X / X * X / X X X | 1 |
| 単独のタイル、下 | X X X / X * X / X . X | 1 |
| 中央 | X X X / X * X / X X X | 0 |
注意事項
- 必ず最初に
sprite-segment-3x3gridを実行してください。このスキルはその出力に依存します - ルールは順番に評価され、最初に一致したルールが適用されます
This条件が 0 個のルールは、どの設定にも一致します(フォールバックとして使用します)- 中央のセル(
*)は、隣接セルの計算では常に無視されます - Unity の RuleTile は、標準の 3x3 グリッドで最大 8 個の隣接セルをサポートします
- 六角形グリッドまたはアイソメトリックグリッドでは、
HexagonalRuleTileまたはIsometricRuleTileを使用してください
前提条件
sprite-segment-3x3gridスキル:入力パターンを生成します。sprite-segment-3x3gridと同じプラグインに含まれているため、常に使用できます。満たされていない依存関係として扱うのではなく、実行してください。- com.unity.2d.tilemap.extras パッケージ:RuleTile クラスに必要です
関連項目
sprite-segment-3x3grid- 必須の前提条件です。入力パターンを生成します- RuleTile の実装については
Packages/com.unity.2d.tilemap.extras/Runtime/Tiles/RuleTile/RuleTile.csを参照してください - Unity マニュアル:Rule Tile