Unity 2D 瓦片地图
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/unity-tilemap-2d-sh-boz40q。
技能介绍
在 Unity 6 里做 2D 关卡,如果靠手工摆 Sprite 拼地面和墙体,很容易在瓦片接缝、碰撞体缝隙和层级排序上反复返工。这个技能关注的是如何用引擎自带的 Grid/Tilemap 体系把地图从美术资产变成可用关卡,而不是替代关卡设计本身。
核心能力
- Grid 与多 Tilemap 分层:通过
GameObject → 2D Object → Tilemap → Rectangular建立网格,用多个 Tilemap 分别承载背景、地面、前景,并为每个TilemapRenderer指定 Sorting Layer 与 Order in Layer。 - Tile Palette 资产化:在
Window → 2D → Tile Palette中放入切片后的 Sprite Sheets,生成Tile资产并用画笔绘制到网格。 - 碰撞合并:在实心层使用
TilemapCollider2D,需要更省性能且无缝隙时,叠加CompositeCollider2D与静态Rigidbody2D,并勾选Used By Composite。 - Rule Tiles 自动拼接:使用外部包
2D Tilemap Extras中的RuleTile,让边缘与拐角自动匹配合适的贴图,减少手工摆放变体。 - 运行时脚本读写:用
Vector3Int单元格坐标调用SetTile、GetTile、SetTilesBlock,并通过WorldToCell/CellToWorld与世界坐标互转。
典型流程
- 先建立 Grid 与各层 Tilemap,确认渲染排序。
- 打开 Tile Palette,从 Sprite Sheet 生成 Tile 并完成基础刷涂。
- 为可碰撞层添加
TilemapCollider2D,按需合并成CompositeCollider2D。 - 需要自动拼接时启用
RuleTile,让边缘、角落自动选择正确 Sprite。 - 在 Play 模式或生成流程中通过脚本批量填充区域。
- 用 Physics Debugger、Sorting Layer 设置和刷新逻辑做验证。
注意点
RuleTile不在内置包中,必须通过 Package Manager 安装com.unity.2d.tilemap.extras,否则会找不到类型。- 每块 Tile 一个 Collider 会明显拖慢性能并留缝隙,优先考虑 Composite 方案。
SetTile/GetTile使用的是单元格坐标,不是世界坐标;脚本里写入前要先做坐标转换。- 多个 Tilemap 的前后遮挡依赖 Sorting Layer 与 Order in Layer,否则会出现渲染层级异常。
- 脚本修改后,Rule / Animated Tile 不会自动刷新;少量修改用
RefreshTile(cell),只有整图重建才用RefreshAllTiles()。 - Tile Palette 的 Active Tilemap 决定刷到哪一层,批量操作前要确认当前目标层。
使用场景
- 搭建 2D 关卡时,需要创建 Grid、分层 Tilemap 并设置渲染排序,为后续刷涂做准备
- 地面层需要碰撞时,要在 TilemapCollider2D 上叠加 CompositeCollider2D 与静态 Rigidbody2D,合并成一个无缝碰撞体
- 开放世界或地牢地图的边缘与拐角太多,希望用 RuleTile 自动匹配贴图,避免手工摆每个变体
- 需要用脚本在运行时批量填充区域或生成地图时,要通过 SetTilesBlock 写入并处理坐标转换与刷新
适合人员
- 使用 Unity 6 开发 2D 游戏、正在拼第一张可玩关卡的客户端工程师
- 负责 2D 关卡美术与地编、需要把切片图集刷进 Tilemap 并管理多个图层的关卡美术
- 编写程序化生成、需要通过脚本读写 Tile 并控制碰撞与刷新性能的技术美术或工具开发者