关于 tilemap-ruletile-createfromsegment
用于 Unity 的技能,可从 Sprite 或精灵表生成 RuleTile 拼接规则。它先通过 sprite-segment-3x3grid 分析 Sprite,再筛选、去重并按具体程度排序邻居规则,最后应用到 RuleTile。
主要功能
- 01将 Sprite 分析为 3×3 模式
- 02把模式映射为邻居规则
- 03默认筛选已知模式
- 04按具体程度去重并排序规则
- 05分配 Sprite 和默认 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。用户必须指定精灵或 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 邻居 | 值 | 行为 |
|---|---|---|---|
. | 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) |
模式筛选
默认情况下,不匹配“常见瓦片模式”表中任何条目的已检测模式都会被丢弃。仅保留 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 最多分配 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 | 用于更精细控制分析过程的手动两步工作流 |
快速使用
// 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——此技能依赖其输出 - 按顺序评估规则;第一个匹配的规则优先生效
- 条件数为 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 手册:规则瓦片