mcpField
T
tilemap-ruletile-createfromsegment

tilemap-ruletile-createfromsegment

github.com/unity-technologies開発1.2k1.0k 回インストール1 日前に更新
リポジトリ

tilemap-ruletile-createfromsegment について

Sprite またはスプライトシートから RuleTile のタイルルールを生成する Unity 向けスキルです。sprite-segment-3x3grid で各 Sprite を分析し、近傍ルールを絞り込み、重複を除き、具体性順に並べて適用します。

主な機能

  1. 01Sprite を 3×3 パターンとして分析
  2. 02パターンを近傍ルールに変換
  3. 03既知のパターンをデフォルトで選別
  4. 04具体性に基づく重複排除と並べ替え
  5. 05Sprite とデフォルト Sprite の割り当て

活用シーン

  1. 01スプライトシートから RuleTile ルールを生成
  2. 02分析済み Sprite パターンからルールを構築
  3. 03必要に応じて標準外パターンを保持

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/unity-technologies/skills --skill tilemap-ruletile-createfromsegment

インストール後、Claude Code で/tilemap-ruletile-createfromsegmentを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

scripts/
ManualWorkflowExample.cs
RuleTileGenerator.cs
TilemapRuleTileCreateFromSegment.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の隣接ルール値動作
.This1隣接セルがこのRuleTileのインスタンスである必要があります
XDontCare0この位置は隣接セルのリストに追加されません
*(中央)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...
3X X X / X * X / . . ....
0X X X / X * X / X X X末尾

スプライトの割り当て

各TilingRuleに割り当てられるSpriteは最大1つです。

  • m_Output を TilingRuleOutput.OutputSprite.Single に設定します
  • スプライトを m_Sprites[0] に割り当てます

RuleTileの m_DefaultSprite には、最下位(最も具体性の低い)ルールのスプライトを設定します。ルールは具体性の降順に並べ替えられるため、これはリストの最後のルールです。このスプライトは、どのTilingRuleにも一致しない場合に使用されます。

アルゴリズムの概要

  1. 各スプライトについて:sprite-segment-3x3gridを実行し、パターンを保存します
  2. フィルタリング:ユーザーが無効にしない限り、一般的なタイルパターンに含まれないパターンを破棄します
  3. 重複排除:重複するパターンを削除します(最初のスプライトを優先します)
  4. 解析:/で行に分割し、続いてスペースでセルに分割します
  5. 隣接セルの抽出:.の場合はThis(1)を指定した位置を追加し、Xの場合はスキップします
  6. TilingRuleの作成:m_Neighborsとm_NeighborPositionsを設定します
  7. スプライトの割り当て:単一のスプライト出力を設定します
  8. 並べ替え:具体性の高い順に並べます
  9. 適用:並べ替えたルールをRuleTileアセットに追加します
  10. デフォルトスプライト:m_DefaultSpriteに、最後(最も具体性の低い)のルールのスプライトを設定します

スクリプト

実装と使用例は scripts/フォルダーにあります:

ファイル説明
TilemapRuleTileCreateFromSegment.csCreateRuleTileFromSprites、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
右下の角が欠けている. . . / . * . / . . X7
上の角が欠けているX . X / . * . / . . .6
下の角が欠けている. . . / . * . / X . X6
左の角が欠けているX . . / . * . / X . .6
右の角が欠けている. . X / . * . / . . X6
左上と右下の対角の角が欠けているX . . / . * . / . . X6
右上と左下の対角の角が欠けている. . X / . * . / X . .6
左上、右上、左下の角が欠けているX . X / . * . / X . .5
左上、右上、右下の角が欠けているX . X / . * . / . . X5
左上、左下、右下の角が欠けているX . . / . * . / X . X5
右上、左下、右下の角が欠けている. . X / . * . / X . X5
十字X . X / . * . / X . X4
平らな辺(下)X X X / . * . / . . .5
平らな辺(上). . . / . * . / X X X5
平らな辺(左). . X / . * X / . . X5
平らな辺(右)X . . / X * . / X . .5
L字型、先端が右X X X / . * . / . . X4
L字型、先端が下. . X / . * X / X . X3
L字型、先端が左X . . / . * . / X X X4
L字型、先端が上X . X / X * . / X . .3
逆L字型、先端が左X X X / . * . / X . .4
逆L字型、先端が下X . . / X * . / X . X3
逆L字型、先端が右. . X / . * . / X X X4
逆L字型、先端が上X . X / . * . / . . X5
T字型、下向きX X X / . * . / X . X3
T字型、上向きX . X / . * . / X X X3
T字型、左向きX . X / . * X / X . X3
T字型、右向きX . X / X * . / X . X3
横ブリッジX X X / . * . / X X X2
縦ブリッジX . X / X * X / X . X2
角のピース、右下X X X / X * . / X . .3
角のピース、左下X X X / . * X / . . X3
角のピース、左上. . X / . * X / X X X3
角のピース、右上X . . / X * . / X X X3
辺の端、右下X X X / X * . / X . X2
辺の端、左下X X X / . * X / X . X2
辺の端、左上X . X / . * X / X X X2
辺の端、右上X . X / X * . / X X X2
単独のタイル、左X X X / . * X / X X X1
単独のタイル、右X X X / X * . / X X X1
単独のタイル、上X . X / X * X / X X X1
単独のタイル、下X X X / X * X / X . X1
中央X X X / X * X / X X X0

注意事項

  • 必ず最初に 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

コメント