mcpField
T
tilemap-ruletile-createfromsegment

tilemap-ruletile-createfromsegment

github.com/unity-technologies开发1.2k1.0k 次安装1 天前更新
代码仓库

关于 tilemap-ruletile-createfromsegment

用于 Unity 的技能,可从 Sprite 或精灵表生成 RuleTile 拼接规则。它先通过 sprite-segment-3x3grid 分析 Sprite,再筛选、去重并按具体程度排序邻居规则,最后应用到 RuleTile。

主要功能

  1. 01将 Sprite 分析为 3×3 模式
  2. 02把模式映射为邻居规则
  3. 03默认筛选已知模式
  4. 04按具体程度去重并排序规则
  5. 05分配 Sprite 和默认 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。用户必须指定精灵或 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);
模式输出格式

单行文本模式:[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)

模式筛选

默认情况下,不匹配“常见瓦片模式”表中任何条目的已检测模式都会被丢弃。仅保留 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 最多分配 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.cs核心实现,包含 CreateRuleTileFromSprites、CreateTilingRuleFromPattern、ParsePattern 和 ApplyRulesToTile
RuleTileGenerator.cs编辑器窗口示例(Tools > Generate RuleTile from Sprites)
ManualWorkflowExample.cs用于更精细控制分析过程的手动两步工作流
快速使用
// 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——此技能依赖其输出
  • 按顺序评估规则;第一个匹配的规则优先生效
  • 条件数为 0 的规则 This 可匹配任意配置(用作回退规则)
  • 计算邻居时始终忽略中心单元格(*)
  • Unity 的 RuleTile 在标准 3×3 网格中最多支持 8 个邻居
  • 对于六边形或等距网格,请使用 HexagonalRuleTile 或 IsometricRuleTile

前提条件

  • sprite-segment-3x3grid 技能:生成输入模式。它与 sprite-segment-3x3grid 一同包含在此插件中,因此始终可用——请调用它,而不要将其视为尚未满足的依赖项。
  • com.unity.2d.tilemap.extras package:RuleTile 类的必需组件

另请参阅

  • sprite-segment-3x3grid——必需的前置条件;生成输入模式
  • Packages/com.unity.2d.tilemap.extras/Runtime/Tiles/RuleTile/RuleTile.cs,了解 RuleTile 的实现
  • Unity 手册:规则瓦片

评论

支持 Markdown