用途
该技能用于在 Unity 中根据现有地形或边缘精灵自动创建 RuleTile(规则瓦片),使瓦片在绘制时能够自动拼接。它通过分析精灵的 3x3 网格模式,将文本模式转换为 RuleTile 的邻居规则配置,从而减少手动配置瓦片规则的工作量。
主要能力
- 依赖 sprite-segment-3x3grid 技能分析每个精灵,输出单行文本模式,格式为
[TopRow] / [MiddleRow] / [BottomRow],每行 3 个字符,用空格分隔。 - 字符含义:
X表示该格未达到匹配阈值;.表示该格达到匹配阈值(与中心颜色匹配);*表示中心格(瓦片自身)。 - 将模式中的符号映射为 RuleTile 邻居规则:
.映射为 This(值 1),表示邻居必须是此 RuleTile 的实例;X映射为 DontCare(值 0),表示该位置不加入邻居列表;*为中心格,忽略。 - 邻居位置映射采用标准 3x3 网格,对应 Unity Vector3Int 坐标:左上 (-1,1,0)、上 (0,1,0)、右上 (1,1,0)、左 (-1,0,0)、右 (1,0,0)、左下 (-1,-1,0)、下 (0,-1,0)、右下 (1,-1,0),中心格跳过。
- 默认过滤非标准模式:仅保留 Common Tile Patterns 表中的 47 种已知模式,避免产生意外或噪声规则。若用户明确要求保留非标准模式,可设置
filterToKnownPatterns: false绕过过滤。 - 自动去重:具有相同邻居配置的重复 TilingRule 会被移除,多个精灵产生相同模式时仅保留第一个遇到的精灵。
- 规则排序:按特异性(This 规则数量)降序排列,更具体的规则优先评估。
- 精灵分配:每个 TilingRule 最多分配 1 个精灵,设置
m_Output为TilingRuleOutput.OutputSprite.Single,并将精灵赋给m_Sprites[0]。RuleTile 的m_DefaultSprite设为最不具体(最后一条)规则的精灵,用于无规则匹配时的回退。
使用方式
工作流分为两步:
- 第一步:应用 sprite-segment-3x3grid(必需)。对纹理中的每个精灵调用
SpriteSegment3x3Grid.AnalyzeSpriteGrid(sprite, matchThreshold: 0.75f)生成文本模式。 - 第二步:从模式创建 TilingRules。解析文本模式,映射为邻居规则,按特异性排序,应用到 RuleTile 资产。
快速用法示例:
// 获取精灵并一次性创建规则
var rules = TilemapRuleTileCreateFromSegment.CreateRuleTileFromSprites(
sprites, matchThreshold: 0.75f, colorTolerance: 0.04f);
// 应用到 RuleTile
var ruleTile = ScriptableObject.CreateInstance<RuleTile>();
TilemapRuleTileCreateFromSegment.ApplyRulesToTile(ruleTile, rules);
脚本文件夹中包含:
TilemapRuleTileCreateFromSegment.cs:核心实现,含CreateRuleTileFromSprites、CreateTilingRuleFromPattern、ParsePattern、ApplyRulesToTile。RuleTileGenerator.cs:编辑器窗口示例(Tools > Generate RuleTile from Sprites)。ManualWorkflowExample.cs:手动两步工作流,便于更精细控制分析过程。
适用场景
适用于 Unity 2D 项目中需要根据现有地形或边缘精灵自动生成 RuleTile 的场景,尤其是希望瓦片在绘制时自动拼接、减少手动配置规则的情况。支持标准 3x3 网格;对于六边形或等距网格,应使用 HexagonalRuleTile 或 IsometricRuleTile。
限制
- 必须先运行 sprite-segment-3x3grid 技能生成输入模式,该技能随同一插件提供,可直接调用。
- 需要
com.unity.2d.tilemap.extras包以使用 RuleTile 类。 - 默认仅保留 47 种已知模式,非标准模式会被丢弃,除非显式设置
filterToKnownPatterns: false。 - 规则按顺序评估,首个匹配的规则生效;This 条件为 0 的规则匹配任意配置,可作为回退。
- 中心格
*始终在邻居计算中忽略。 - Unity 的 RuleTile 在标准 3x3 网格中最多支持 8 个邻居。
- 关于收费、价格、平台等具体信息暂未提供。