![Hero background image](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Ffuvbjjlp%2Fproduction%2F56666b56848d06b31729a84612144963710e5aef-1920x1080.jpg&w=3840&q=100)
了解 Unity Tilemap 系统在 Happy Harvest中的使用方式,Happy Harvest 是一款使用 Unity 2022 LTS 制作的 2D 自上而下农业模拟游戏示例。
在电子书《 面向艺术家的 2D 游戏艺术、动画和灯光》中,您可以找到这些技术以及更多适用于艺术和动画的技术。
阅读本系列的其他文章,了解如何复制 《Happy Harvest》中的效果和视觉效果:
- 通用渲染管线中的 2D 光影技术
- 如何在 Unity 2022 LTS 中为 2D 角色制作动画
- 使用 VFX Graph 和 Shader Graph 实现 2D 特效(即将推出)
立即从 Unity Asset Store下载Happy Harvest。
![过度绘制模式](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Ffuvbjjlp%2Fproduction%2Fa99962069b8670c3f9e850dbc680eb917ea24467-1920x1080.jpg&w=3840&q=75)
Unity Tilemap 系统 使您能够使用图块(放置在网格上的小精灵)创建游戏世界。您无需将关卡设计为一张大图像,而是可以将其分割成砖块状的碎片,并在整个关卡中重复这些碎片。这对于具有较大可行走区域的游戏(如模拟器或 RPG)尤其有用。
Tilemaps 可以帮助节省艺术创作时间以及内存和 CPU 使用率。这是因为可以通过专用渲染器渲染图块,并且可以禁用屏幕上不可见的图块。画笔工具可以高效地在网格上绘制图块,并且可以编写脚本来使用绘画规则。它们还具有自动碰撞生成功能,以便更有效地测试和编辑。
创作图块表时,重要的是避免在不需要时合并分层图块地图,因为这有助于减少过度绘制。在 Happy Harvest 中, 所有的图块地图都位于 Grid GameObject 下。您可以看到名为 GroundBase的图块地图如何包含所有地面艺术品。通过在 Tilemap Renderer 中设置渲染模式 为 Chunk,所有这些图块都会同时批处理。这有助于优化性能。
示例中的鹅卵石小路可以用多层瓷砖图案来创建:一个用于鹅卵石,一个用于草地。从艺术创作的角度来看,这可能听起来很方便,但由于像素层层重叠,性能会降低。仅在需要时创建单独的图块地图,例如需要不同深度平面的情况。
要全面了解 Unity Tilemap 系统的工作原理,请下载电子书《 面向艺术家的 2D 游戏艺术、动画和灯光》。
![不同性质的瓷砖](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Ffuvbjjlp%2Fproduction%2Fe6b6584246cfff30940a2f807cbf68d87bd59289-1920x1080.jpg&w=3840&q=75)
Happy Harvest 中的瓷砖是分段创建的,优先考虑游戏中大量使用的瓷砖地图,例如主路径或草地。这些地图需要更多的图块,因为它们用于创建不同形状的路径。相比之下,以方形瓷砖地图布局的背景松树需要的瓷砖较少。
一般来说,垂直的、在角色前面或后面渲染的道具会在另一个排序层中分离为游戏对象 (GameObject)。但是,2D Tilemap Extras 包中包含的功能 GameObject Brush 用于将其中一些对象(如木栅栏)放置在图块地图网格中。为了以更有机的模式分散这些道具,您可以将它们放在图块地图之外的层次结构中的游戏对象中。
瓷砖地图的二级纹理
Tilemaps 文件夹下的每个图块地图都有对应物,称为 法线贴图和遮罩贴图纹理。它们具有相同的尺寸和布局,但经过涂漆以显示灯光。阅读文章“通用渲染管线中的 2D 光影技术”,了解如何在示例中创建光照。
法线贴图和遮罩贴图纹理被添加到 Sprite 编辑器中设置的图块主纹理中。在 《Happy Harvest》中,遮罩贴图用于为角色和道具创建边缘光轮廓效果。但是,由于大多数瓷砖都用于地面,因此不需要轮廓光。这就是为什么这组图块的大部分纹理都是黑色的,以避免反射为边缘效果而产生的任何光线。一个例外是用于屋顶的建筑瓦片,这些瓦片的边缘是突出显示的。
![路径图块示例](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Ffuvbjjlp%2Fproduction%2Fc1da06341a4bed7fd4dd5bab58b083e497be71fd-1920x1080.jpg&w=3840&q=75)
Happy Harvest 使用 Tile Palette 工具来高效地用图块填充每个图块地图的网格。手动放置路径形状的边缘或角落可能非常耗时并且容易出错。每次更改路径或任何其他基于图块的形状时,您都需要重复手动工作。您可以使用 规则图块 功能来避免这种情况。
Rule Tile 根据形状的相邻图块绘制正确的边框图块。在 Happy Harvest的项目文件夹中,您会找到一个名为 Palette_Tiles的图块调色板。调色板的第一行包含经常使用的图块,例如带有草的土壤斑块。这些是规则图块。在 Inspector 中选择 GameObject 以在 Project 视图中显示资产。然后您可以选择此资产来查看此规则图块的设置。
如果适用于您的项目,您可以通过重复使用这些图块资产或绘制纹理来节省时间。
![地图场景中的多个瓦片地图](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Ffuvbjjlp%2Fproduction%2F69100f3332a4b76758e8bed67cacbd5840432190-1920x1080.jpg&w=3840&q=75)
示例中的所有图块都具有相同的大小和形状,并且包含在同一个 Grid GameObject 中。这有助于保持较少的图块地图数量。一个名为“地形管理器”的组件附加到网格游戏对象 (Grid GameObject),提供我们将在下一节中解释的游戏玩法可能性。
Grid GameObject 下的一些图块地图包括:
- 水下瓷砖:它们用于水下瓷砖、悬崖和池塘区域的绿地。
- 水这些图块使用与其他图块不同的着色器,称为 Sprite-Lit-Material,它是在 Shader Graph 中制作的,用于模拟水动画。
- 地面基础:这是地面艺术品,由路径的瓷砖、草地、泥土和石头组成,以填补高程瓷砖的空隙。
- 瓷砖中的物体:这用于使用来自 Tile Palette 的 游戏对象画笔 在图块地图中绘制的游戏对象,例如栅栏。
- TilledTilemap:这些图块在代码中用于检测可以种植种子的图块。
- 水纹瓷砖层:游戏逻辑使用它来使瓷砖看起来是湿的。当瓷砖干燥后,“湿”瓷砖就会被移除。
- 仓库、房屋:这些图块地图用于创建仓库和房屋。使用图块地图创建建筑物使艺术家能够更灵活地重塑和调整建筑物的大小,并且由于建筑物的各个部分使用相同的纹理,因此节省了纹理空间。
- 庄稼:这会将所有植物分组到一个游戏对象 (GameObject) 下,并且也被地形管理器 (Terrain Manager) 使用。
![地形管理器示例](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Ffuvbjjlp%2Fproduction%2F41781e5023ecbf0e5c7f41d4369dc8706d2bfa73-1920x1080.jpg&w=3840&q=75)
附加到 Grid GameObject 的地形管理器脚本处理图块变化并使用图块来跟踪作物。它使用 Tilemap API,这对于设置基于网格的游戏玩法很有用,帮助您更轻松地识别 2D 中项目的位置。
这个 MonoBehaviour 类创建了两个通用类,分别称为 GroundData 和 CropData。它们包括与游戏玩法相关的变量,例如瓷砖看起来潮湿的时间长度、植物的生长速度或植物在死亡前不收割可以持续多长时间。
地形管理器脚本引用了用于游戏目的的图块地图和图块,其中包括:
- 地面瓷砖地图:这引用了包含土壤图块的图块地图,指示玩家可以在哪里挖掘和种植种子。如果你挖掘该图块地图之外的任何图块,则什么都不会发生。
- 裁剪图块地图:它引用了 Tilemap GameObject,即作物的父对象。在这里使用 Tilemap API 可以让您放置、更新和删除裁剪图块。
- 水体地图:使用它来用模拟水涂抹在耕种过的土壤砖块上,从视觉上向玩家传达这些砖块已经可以种植和生长了。
- 流水瓷砖:这是一个带有水图形的 规则覆盖图块 ,它使您能够创建具有规则图块变体的图块,而无需设置新规则。
- 可耕种瓷砖:这用于识别玩家可以用来挖掘的瓷砖。
- 瓷砖贴图:这是用于绘制耕种土壤视觉效果的规则图块。
地形管理器脚本包括使用 Tilemap API 以 Vector3int 位置格式读取图块信息并相应地更新图块的功能。当 PlayerController 触发不同工具上的函数时,这些函数会被调用。
![出血示例](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Ffuvbjjlp%2Fproduction%2Fd9b625a39d02009f543500049b77d679c4a36f3a-1920x1080.jpg&w=3840&q=75)
为了确保视觉效果美观,您需要避免出现渗色现象,或者由于插值和边缘平滑而导致图块之间出现小间隙。这在像素艺术游戏中不会发生,因为其中的精灵不会被平滑,因为它们的过滤模式设置为点(无过滤器)。在 《Happy Harvest》中,图块精灵都包含 Sprite Atlas,它通过简单的设置提供更好的项目组织、性能和控制。
如果您没有使用图块表,建议使用 Sprite Atlas 来帮助 Tilemap Renderer 中的接缝和内部排序。一些默认设置适用于大多数精灵,但图块地图可能需要进行一些调整。诸如避免精灵在打包时旋转或 alpha 膨胀等功能可帮助图块保持更清晰的边缘。
![面向艺术家的 2D 游戏艺术、动画和灯光电子书封面](/_next/image?url=https%3A%2F%2Fcdn.sanity.io%2Fimages%2Ffuvbjjlp%2Fproduction%2F18fdf7e5ad445f167b37a85f5c43581923519f5a-1200x675.jpg&w=3840&q=75)
学习如何制作完美连接的图块、避免重复并保持场景可读可以是一个反复试验的经验。在电子书《 面向艺术家的 2D 游戏艺术、动画和灯光》中了解有关 Tilemap 系统的更多信息。
以下博客文章重点介绍使用 Unity 制作的复古 2D 游戏并提供了更多 2D 开发技巧:
另外,请查看我们的其他 2D 演示 《The Lost Crypt》 和 《Dragon Crashers》。
您可以在 Unity 最佳实践中心找到更多针对高级程序员、艺术家、技术艺术家和设计师的资源。