Unity 2D 从零精通:第四阶段 - 构建你的世界,关卡设计与Tilemap艺术
引言:从单体到世界的构建师
在前三篇中,我们塑造了角色,赋予了它们生命与交互。现在,是时候为这些角色搭建一个完整的舞台了。一个精心设计的关卡是游戏的骨架,它引导玩家、提供挑战、并讲述无声的故事。
手动放置每一个平台、每一块砖瓦无疑是低效且痛苦的。幸运的是,Unity为我们提供了极其强大的 Tilemap 系统。它就像游戏世界的“网格纸”和“印章”,允许我们以像素级的精度和惊人的效率来绘制、编辑和迭代整个关卡。
在本篇中,我们将从零开始创建一个经典的2D平台跳跃关卡。我们将学习如何利用Tilemap绘制静态环境,如何使用强大的Rule Tiles实现智能绘制,如何管理视觉层次,并最终让我们的角色在这个新世界中奔跑跳跃。
第一章:Tilemap系统初探——创建你的第一块砖
Tilemap系统的核心是Grid(网格)、Tilemap(瓦片地图)和Tile(瓦片)。
-
创建Grid和Tilemap:
- 在Hierarchy中右键 ->
2D Object -> Tilemap -> Rectangular。Unity会自动创建一个名为Grid的父对象和一个名为Tilemap的子对象。 Grid:负责定义整个关卡世界的坐标系和单元格(Cell)大小。所有的Tilemap都是它的子对象。Tilemap:是实际绘制瓦片的地方。一个Grid下可以有多个Tilemap,用于分层绘制(例如,地面一层、装饰物一层、背景细节一层)。
- 在Hierarchy中右键 ->
-
认识瓦片(Tile):
- 瓦片(Tile)是一种特殊的资源,它把一张Sprite图片和一些属性(如碰撞体、颜色)打包在一起,方便在Tilemap上重复使用。
- 它和我们之前直接使用的Sprite是不同的概念。
-
制作你的第一个瓦片:
- 准备一张简单的土壤或草地的Sprite图片(可以是单张,也可以是图集)。将其导入项目。
- 在Project窗口中右键 -> Create -> 2D -> Tiles -> Tile(或者选择
Default,这是我们最常用的类型)。将其命名为GrassTile。 - 选中这个新创建的
GrassTile资源,在Inspector窗口中,将你的草地Sprite拖拽到Sprite字段上。
-
开始绘制:
- 打开瓦片调色板窗口:
Window -> 2D -> Tile Palette。 - 如果还没有调色板,点击
Create New Palette,命名为LevelTiles,保存到你的Assets文件夹中。 - 将刚才创建的
GrassTile从Project窗口拖拽到Tile Palette窗口中。 - 在Tile Palette窗口中,选择画笔工具(Paintbrush),然后在Scene视图中你的Tilemap上点击或拖动,即可绘制出草地砖块!
- 打开瓦片调色板窗口:
第二章:高效关卡设计——Rule Tiles与自动化
如果每一块砖都要手动选择、放置,效率依然低下。Rule Tile(规则瓦片)是Tilemap系统的灵魂所在,它能根据相邻瓦片的情况自动选择正确的Sprite,极大地提升关卡绘制速度和一致性。
目标:创建一套地 tiles(草地、泥土、左边缘、右边缘),并使用Rule Tile实现智能拼接。
-
准备素材:你需要一套规则一致的瓦片Sprite。通常包括:
grass_center:纯粹的草地顶部。grass_left:左侧边缘。grass_right:右侧边缘。dirt:草地下的泥土。
-
安装Rule Tile扩展(如未安装):
- 在Unity菜单栏,点击
Window -> Package Manager。 - 在上方的Packages下拉菜单中选择
Unity Registry。 - 搜索
2D Tilemap Extras并安装。这个官方包包含了Rule Tile等极其有用的工具。
- 在Unity菜单栏,点击
-
创建Rule Tile:
- 在Project窗口中右键 ->
Create -> 2D -> Tiles -> Rule Tile。命名为GroundRuleTile。 - 选中它,在Inspector中可以看到一个规则列表。
- 在Project窗口中右键 ->
-
配置Rule Tile规则:
Default Sprite:放入你的默认泥土Sprite(dirt)。- 点击
Add New Rule来添加一条规则。规则的核心是:“如果我周围的瓦片满足这些条件,那我就显示为这个Sprite。”
示例:配置顶部草地规则
- 将
grass_centerSprite拖入新规则的Sprite字段。 - 我们希望这块瓦片只有在正下方(-Y)有相同类型的瓦片(即另一个GroundRuleTile)时,才显示为草地。
- 在规则的网格中,将正下方(中间列,最下面一行)的单元格设置为
This(表示必须是同类型的Tile)。 - 将正上方(+Y) 的单元格设置为
Not This(表示上方不能有同类型Tile,这样它才是顶部)。 - 其他方向保持
Don't Care(不关心)。
同理,配置左侧边缘规则
- 添加新规则,Sprite放入
grass_left。 - 条件:正下方(-Y)是
This(保证它是顶部),右侧(+X)是This(保证它右边有砖块,所以它是边缘),左侧(-X)是Not This或Empty(保证它左边是空的)。
-
使用Rule Tile绘制:
- 将创建好的
GroundRuleTile拖入你的Tile Palette。 - 现在,使用画笔在Tilemap上大面积绘制。你会发现,Unity自动为你生成了完美的顶部草地、边缘和填充的泥土!当你增加或删除砖块时,它们也会自动更新其外观。
- 将创建好的
第三章:视觉层次与排序——Sorting Layers与Order in Layer
当你开始添加多个Tilemap(如地面层、装饰层)和游戏对象(如玩家)时,你会发现遮挡关系错乱。玩家可能被背景遮挡,或者装饰物飘在空中。这就需要使用Sorting Layers和Order in Layer来管理渲染顺序。
-
Sorting Layers(排序图层):
- 这是一个粗粒度的渲染队列。在更高Sorting Layer上的所有东西,都会渲染在更低Layer的东西之上。
- 如何设置:选中任何一个有渲染器(如Sprite Renderer, Tilemap Renderer)的对象,在Inspector中找到
Sorting Layer下拉框。点击Add Sorting Layer...可以创建新的图层。 - 典型设置(从上到下):
UI(用于UI元素)Foreground(前景装饰)Player、Enemies(角色层,可以合并为一个Entities层)Ground(地面和平台)Background(远处背景)
- 为你的
Tilemap和PlayerShip对象分配合适的Sorting Layer。
-
Order in Layer(图层内顺序):
- 在同一个Sorting Layer内,用这个值来精细控制谁前谁后。值越大,越靠前。
- 例如,在
Ground层中,你可以让一个桥墩的Tilemap的Order in Layer为0,桥面的Tilemap为1,这样桥面就会渲染在桥墩前面。
-
配置Tilemap Renderer:
- 选中你的Tilemap,注意看它的
Tilemap Renderer组件。Sorting Layer和Order in Layer就在这里设置。为你不同的Tilemap(地面、装饰物)设置不同的值。
- 选中你的Tilemap,注意看它的
第四章:让世界活起来——摄像机跟随与碰撞体
一个不会移动的摄像机是死板的。我们需要让摄像机平滑地跟随玩家,将玩家始终保持在画面中央。
-
使用Cinemachine(官方相机系统):
- Unity提供了一个无比强大的相机工具包
Cinemachine,它让复杂的相机行为变得简单。 - 安装:通过
Package Manager搜索并安装Cinemachine。 - 创建虚拟相机:在Unity菜单栏,点击
Cinemachine -> Create 2D Camera。这会创建一个CinemachineBrain(主摄像机上的组件)和一个Cinemachine Virtual Camera。 - 设置跟随目标:选中新创建的虚拟相机,在Inspector中,将
Follow属性设置为你的PlayerShip对象。 - 调整参数:你可以在虚拟相机上调整
Body和Aim的设置,例如添加Dead Zone(死区,玩家在此区域内移动相机不跟随)和Soft Zone(软区,玩家接近边界时相机开始平滑跟随)。
- Unity提供了一个无比强大的相机工具包
-
为Tilemap添加碰撞体:
- 我们的地面目前只是图片,玩家会穿透它。我们需要物理碰撞。
- 添加碰撞体:选中你的地面Tilemap,点击
Add Component,添加一个Tilemap Collider 2D。 - 优化碰撞体:
Tilemap Collider 2D会为每一个瓦片生成一个碰撞体,这对于性能是灾难性的。解决方案是:在添加了Tilemap Collider 2D后,再添加一个Composite Collider 2D。 - Unity会自动提示你为Tilemap添加
Rigidbody 2D,点击Yes。并将该刚体的Body Type设置为Static。 - 魔法发生了:
Composite Collider 2D会自动将所有相邻的瓦片碰撞体合并成一个个大的、连续的碰撞体多边形,极大地提升了物理性能!
第五章:综合实践——搭建平台跳跃关卡
现在,运用所有学到的知识,来搭建一个简单的关卡。
- 规划:在纸上或脑子里简单画一下关卡布局:起点、平台、障碍、终点。
- 创建多层Tilemap:
- 在
Grid下创建多个Tilemap:Ground(主要地面)、Platforms(可跳跃通过的平台)、Decorations(无碰撞的装饰物如云朵、灌木)。 - 为它们分别设置
Tilemap Collider 2D(对于Ground和Platforms)和正确的Sorting Layer。 - 对于
Platforms,你希望玩家能从下方跳上来穿透它,但从上方站住。这需要用到Platform Effector 2D。- 为
PlatformsTilemap添加Tilemap Collider 2D和Composite Collider 2D。 - 然后,再添加一个
Platform Effector 2D组件。 - 在
Tilemap Collider 2D上,勾选Used By Effector。 - 这样,平台就只允许从一个方向(默认是下方)穿透了。
- 为
- 在
- 绘制:
- 使用你的
GroundRuleTile绘制主要地面轮廓。 - 使用单独的瓦片(比如石头瓦片)在Tile Palette中创建新画笔,来绘制平台。
- 使用装饰性瓦片丰富你的关卡背景。
- 使用你的
- 测试与迭代:不断播放游戏,测试角色的移动、跳跃(下一篇会实现)和碰撞是否如预期。调整平台位置,让跳跃手感舒适。
第六章:总结与展望
你在本篇成为了一名关卡建筑师:
- 掌握了Tilemap核心工作流:从创建Grid、Tilemap到制作和使用普通Tile。
- 学会了效率神器Rule Tile:能够创建智能拼接的瓦片,极大提升关卡绘制速度和美观度。
- 理解了渲染秩序:使用Sorting Layers和Order in Layer解决了物体间的遮挡问题。
- 实现了专业效果:使用Cinemachine实现了平滑的摄像机跟随,使用Composite Collider 2D优化了Tilemap的物理性能。
- 搭建了游戏关卡:综合运用所有知识,创建了一个可玩的平台跳跃关卡原型。
你的游戏世界已经从一个小小的场景,扩展成了一个具有结构、层次和边界的完整舞台。
下一篇预告:《第五阶段:游戏的骨架——架构与系统设计》
在下一篇文章中,我们将深入游戏的核心逻辑,学习如何构建健壮、可维护的代码架构:
- 完善玩家控制器:实现跳跃、二段跳、蹬墙跳等平台跳跃功能。
- 高级UI系统:创建动态更新的血条、技能图标和暂停菜单。
- 单例模式与事件中心:学习如何让游戏中的不同模块(如UI和玩家)高效、解耦地通信。
- 数据持久化:实现游戏的存档和读档功能。
- 我们将为这个平台游戏注入真正的“游戏性”。
练习与思考:
- 尝试创建一种“危险”瓦片(如尖刺),为其添加碰撞体,并编写脚本,当玩家触碰时触发游戏结束。
- 探索
2D Tilemap Extras包中的其他瓦片类型,如Animated Tile(动画瓦片)来制作闪烁的宝石或岩浆,Random Tile(随机瓦片)来让草地纹理更多样。 - 使用多个Tilemap层,制作一个具有 parallax scrolling(视差滚动)效果的背景层,让关卡更有深度。
世界已搭建完毕,等待英雄的登场。我们下一篇将塑造英雄的能力与游戏的规则!
1万+

被折叠的 条评论
为什么被折叠?



