SuperAPI AI 工具集

tilemap-ruletile-createfromsegment

编程与开发

查看项目

更新于 10-16 04:39

技能介绍

用途

该技能用于在 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 设为最不具体(最后一条)规则的精灵,用于无规则匹配时的回退。

使用方式

工作流分为两步:

  1. 第一步:应用 sprite-segment-3x3grid(必需)。对纹理中的每个精灵调用 SpriteSegment3x3Grid.AnalyzeSpriteGrid(sprite, matchThreshold: 0.75f) 生成文本模式。
  2. 第二步:从模式创建 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 个邻居。
  • 关于收费、价格、平台等具体信息暂未提供。