【Unity2D】【4】构建你的世界,关卡设计与Tilemap艺术

Unity 2D 从零精通:第四阶段 - 构建你的世界,关卡设计与Tilemap艺术

引言:从单体到世界的构建师

在前三篇中,我们塑造了角色,赋予了它们生命与交互。现在,是时候为这些角色搭建一个完整的舞台了。一个精心设计的关卡是游戏的骨架,它引导玩家、提供挑战、并讲述无声的故事。

手动放置每一个平台、每一块砖瓦无疑是低效且痛苦的。幸运的是,Unity为我们提供了极其强大的 Tilemap 系统。它就像游戏世界的“网格纸”和“印章”,允许我们以像素级的精度和惊人的效率来绘制、编辑和迭代整个关卡。

在本篇中,我们将从零开始创建一个经典的2D平台跳跃关卡。我们将学习如何利用Tilemap绘制静态环境,如何使用强大的Rule Tiles实现智能绘制,如何管理视觉层次,并最终让我们的角色在这个新世界中奔跑跳跃。

第一章:Tilemap系统初探——创建你的第一块砖

Tilemap系统的核心是Grid(网格)、Tilemap(瓦片地图)和Tile(瓦片)。

  1. 创建Grid和Tilemap

    • 在Hierarchy中右键 -> 2D Object -> Tilemap -> Rectangular。Unity会自动创建一个名为Grid的父对象和一个名为Tilemap的子对象。
    • Grid:负责定义整个关卡世界的坐标系和单元格(Cell)大小。所有的Tilemap都是它的子对象。
    • Tilemap:是实际绘制瓦片的地方。一个Grid下可以有多个Tilemap,用于分层绘制(例如,地面一层、装饰物一层、背景细节一层)。
  2. 认识瓦片(Tile)

    • 瓦片(Tile)是一种特殊的资源,它把一张Sprite图片和一些属性(如碰撞体、颜色)打包在一起,方便在Tilemap上重复使用。
    • 它和我们之前直接使用的Sprite是不同的概念。
  3. 制作你的第一个瓦片

    • 准备一张简单的土壤或草地的Sprite图片(可以是单张,也可以是图集)。将其导入项目。
    • 在Project窗口中右键 -> Create -> 2D -> Tiles -> Tile(或者选择Default,这是我们最常用的类型)。将其命名为GrassTile
    • 选中这个新创建的GrassTile资源,在Inspector窗口中,将你的草地Sprite拖拽到Sprite字段上。
  4. 开始绘制

    • 打开瓦片调色板窗口: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实现智能拼接。

  1. 准备素材:你需要一套规则一致的瓦片Sprite。通常包括:

    • grass_center:纯粹的草地顶部。
    • grass_left:左侧边缘。
    • grass_right:右侧边缘。
    • dirt:草地下的泥土。
  2. 安装Rule Tile扩展(如未安装)

    • 在Unity菜单栏,点击Window -> Package Manager
    • 在上方的Packages下拉菜单中选择Unity Registry
    • 搜索2D Tilemap Extras并安装。这个官方包包含了Rule Tile等极其有用的工具。
  3. 创建Rule Tile

    • 在Project窗口中右键 -> Create -> 2D -> Tiles -> Rule Tile。命名为GroundRuleTile
    • 选中它,在Inspector中可以看到一个规则列表。
  4. 配置Rule Tile规则

    • Default Sprite:放入你的默认泥土Sprite(dirt)。
    • 点击Add New Rule来添加一条规则。规则的核心是:“如果我周围的瓦片满足这些条件,那我就显示为这个Sprite。”

    示例:配置顶部草地规则

    • grass_center Sprite拖入新规则的Sprite字段。
    • 我们希望这块瓦片只有在正下方(-Y)有相同类型的瓦片(即另一个GroundRuleTile)时,才显示为草地。
    • 在规则的网格中,将正下方(中间列,最下面一行)的单元格设置为This(表示必须是同类型的Tile)。
    • 正上方(+Y) 的单元格设置为Not This(表示上方不能有同类型Tile,这样它才是顶部)。
    • 其他方向保持Don't Care(不关心)。

    同理,配置左侧边缘规则

    • 添加新规则,Sprite放入grass_left
    • 条件:正下方(-Y)是This(保证它是顶部),右侧(+X)是This(保证它右边有砖块,所以它是边缘),左侧(-X)是Not ThisEmpty(保证它左边是空的)。
  5. 使用Rule Tile绘制

    • 将创建好的GroundRuleTile拖入你的Tile Palette。
    • 现在,使用画笔在Tilemap上大面积绘制。你会发现,Unity自动为你生成了完美的顶部草地、边缘和填充的泥土!当你增加或删除砖块时,它们也会自动更新其外观。
第三章:视觉层次与排序——Sorting Layers与Order in Layer

当你开始添加多个Tilemap(如地面层、装饰层)和游戏对象(如玩家)时,你会发现遮挡关系错乱。玩家可能被背景遮挡,或者装饰物飘在空中。这就需要使用Sorting LayersOrder in Layer来管理渲染顺序。

  1. Sorting Layers(排序图层)

    • 这是一个粗粒度的渲染队列。在更高Sorting Layer上的所有东西,都会渲染在更低Layer的东西之上。
    • 如何设置:选中任何一个有渲染器(如Sprite Renderer, Tilemap Renderer)的对象,在Inspector中找到Sorting Layer下拉框。点击Add Sorting Layer...可以创建新的图层。
    • 典型设置(从上到下):
      • UI(用于UI元素)
      • Foreground(前景装饰)
      • PlayerEnemies(角色层,可以合并为一个Entities层)
      • Ground(地面和平台)
      • Background(远处背景)
    • 为你的TilemapPlayerShip对象分配合适的Sorting Layer。
  2. Order in Layer(图层内顺序)

    • 在同一个Sorting Layer内,用这个值来精细控制谁前谁后。值越大,越靠前
    • 例如,在Ground层中,你可以让一个桥墩的Tilemap的Order in Layer0,桥面的Tilemap为1,这样桥面就会渲染在桥墩前面。
  3. 配置Tilemap Renderer

    • 选中你的Tilemap,注意看它的Tilemap Renderer组件。Sorting LayerOrder in Layer就在这里设置。为你不同的Tilemap(地面、装饰物)设置不同的值。
第四章:让世界活起来——摄像机跟随与碰撞体

一个不会移动的摄像机是死板的。我们需要让摄像机平滑地跟随玩家,将玩家始终保持在画面中央。

  1. 使用Cinemachine(官方相机系统)

    • Unity提供了一个无比强大的相机工具包Cinemachine,它让复杂的相机行为变得简单。
    • 安装:通过Package Manager搜索并安装Cinemachine
    • 创建虚拟相机:在Unity菜单栏,点击Cinemachine -> Create 2D Camera。这会创建一个CinemachineBrain(主摄像机上的组件)和一个Cinemachine Virtual Camera
    • 设置跟随目标:选中新创建的虚拟相机,在Inspector中,将Follow属性设置为你的PlayerShip对象。
    • 调整参数:你可以在虚拟相机上调整BodyAim的设置,例如添加Dead Zone(死区,玩家在此区域内移动相机不跟随)和Soft Zone(软区,玩家接近边界时相机开始平滑跟随)。
  2. 为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会自动将所有相邻的瓦片碰撞体合并成一个个大的、连续的碰撞体多边形,极大地提升了物理性能!
第五章:综合实践——搭建平台跳跃关卡

现在,运用所有学到的知识,来搭建一个简单的关卡。

  1. 规划:在纸上或脑子里简单画一下关卡布局:起点、平台、障碍、终点。
  2. 创建多层Tilemap
    • Grid下创建多个Tilemap:Ground(主要地面)、Platforms(可跳跃通过的平台)、Decorations(无碰撞的装饰物如云朵、灌木)。
    • 为它们分别设置Tilemap Collider 2D(对于GroundPlatforms)和正确的Sorting Layer
    • 对于Platforms,你希望玩家能从下方跳上来穿透它,但从上方站住。这需要用到Platform Effector 2D
      • Platforms Tilemap添加Tilemap Collider 2DComposite Collider 2D
      • 然后,再添加一个Platform Effector 2D组件。
      • Tilemap Collider 2D上,勾选Used By Effector
      • 这样,平台就只允许从一个方向(默认是下方)穿透了。
  3. 绘制
    • 使用你的GroundRuleTile绘制主要地面轮廓。
    • 使用单独的瓦片(比如石头瓦片)在Tile Palette中创建新画笔,来绘制平台。
    • 使用装饰性瓦片丰富你的关卡背景。
  4. 测试与迭代:不断播放游戏,测试角色的移动、跳跃(下一篇会实现)和碰撞是否如预期。调整平台位置,让跳跃手感舒适。
第六章:总结与展望

你在本篇成为了一名关卡建筑师:

  1. 掌握了Tilemap核心工作流:从创建Grid、Tilemap到制作和使用普通Tile。
  2. 学会了效率神器Rule Tile:能够创建智能拼接的瓦片,极大提升关卡绘制速度和美观度。
  3. 理解了渲染秩序:使用Sorting LayersOrder in Layer解决了物体间的遮挡问题。
  4. 实现了专业效果:使用Cinemachine实现了平滑的摄像机跟随,使用Composite Collider 2D优化了Tilemap的物理性能。
  5. 搭建了游戏关卡:综合运用所有知识,创建了一个可玩的平台跳跃关卡原型。

你的游戏世界已经从一个小小的场景,扩展成了一个具有结构、层次和边界的完整舞台。

下一篇预告:《第五阶段:游戏的骨架——架构与系统设计》
在下一篇文章中,我们将深入游戏的核心逻辑,学习如何构建健壮、可维护的代码架构:

  • 完善玩家控制器:实现跳跃、二段跳、蹬墙跳等平台跳跃功能。
  • 高级UI系统:创建动态更新的血条、技能图标和暂停菜单。
  • 单例模式与事件中心:学习如何让游戏中的不同模块(如UI和玩家)高效、解耦地通信。
  • 数据持久化:实现游戏的存档和读档功能。
  • 我们将为这个平台游戏注入真正的“游戏性”。

练习与思考:

  1. 尝试创建一种“危险”瓦片(如尖刺),为其添加碰撞体,并编写脚本,当玩家触碰时触发游戏结束。
  2. 探索2D Tilemap Extras包中的其他瓦片类型,如Animated Tile(动画瓦片)来制作闪烁的宝石或岩浆,Random Tile(随机瓦片)来让草地纹理更多样。
  3. 使用多个Tilemap层,制作一个具有 parallax scrolling(视差滚动)效果的背景层,让关卡更有深度。

世界已搭建完毕,等待英雄的登场。我们下一篇将塑造英雄的能力与游戏的规则!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值