使用Tilemap系统创建等距2D水平

图片

Unity 2018.3引入了对等距图块地图的支持,这与在2018.2。版本中添加的六边形图块地图非常相似。 新的Tilemap功能使您可以基于许多经典游戏(包括《暗黑破坏神》和《辐射》的第一部分,《文明》,《帝国时代》等)中使用的等距和六边形网格,快速有效地创建2D环境。

这两个系统都基于Unity 2017.2中已经存在的Tilemap系统,如今,使用它们同样容易! 此外,它们与编辑器具有本机集成。 在将来的Unity版本中,可以将它们移植到软件包管理器中。

如果您有兴趣尝试这些系统,我们创建了一个预先准备的Isometric Starter Kit项目,该项目具有动画角色和几个环境tileset。 您可以在此处下载。

等距图块的项目设置


在开始使用Tilemap之前,正确设置项目很重要。 等轴测图贴图可处理二维精灵,并使用正确的渲染排序来创建具有顶视图的等轴测图的错觉。 我们需要先使离观看者更远的图块绘制,然后在它们之上绘制更近的图块。

您可以使用称为自定义轴排序的Unity功能来调整2D对象在屏幕上的渲染顺序。 可以为摄像机设置此参数(当前,此方法是可编写脚本的渲染管道的标准方法,包括LWRP和HDRP),也可以在项目级别进行全局设置。

要在项目级别设置“自定义轴排序”,请转到“ 编辑”>“项目设置”>“图形” 。 在“相机设置”部分中,您将看到“透明度排序模式”下拉菜单,以及“透明度排序轴”的X,YZ选项。

默认情况下,“透明度排序轴”将XYZ轴设置为(0,0,1)。 但是,我们所有的2D图块实际上都在同一Z平面上,因此,要确定哪些图块在前面或后面,您需要使用的不是深度,而是高度。 屏幕上位于较高位置的图块将按较低的排列。 要按高度对图块进行排序,请将“透明度排序模式”值更改为“自定义”,然后将“透明度排序轴”设置为(0,1,0)。


要了解有关其工作原理的更多信息,您可以阅读Unity文档中有关2D排序的相应页面

在某些情况下,您可能还需要将“透明度排序轴”的值更改为Z。我们将在下面进一步讨论。

磁贴卡类型


Tilemap系统由多个交互组件组成。 前两个是Grid和Tilemap游戏对象。 要创建网格,只需右键单击层次结构中的任意位置,转到2D对象,然后选择要使用的Tilemap的类型。 默认情况下,将使用一个对应类型的子级Tilemap游戏对象创建每个新Grid。 当前存在以下类型的Tilemap:

Tilemap-创建矩形Grid和Tilemap。 在Unity引擎的2D游戏套件中可以看到使用此Tilemap的示例。

Hexagonal Point Top Tilemap-从六边形创建一个Grid和Tilemap,其中每个六边形的一个顶点向上。

六边形平顶图块贴图是另一种六边形网格,其中在六边形的顶部有一个与屏幕的顶部边缘平行的面。

最后两种类型, 等距等距Z为Y ,创建等距网格的两种不同实现。 当模拟不同高度的瓷砖高度时,例如,等轴测平面上有一个高平台时,它们之间的差异就会出现。

如果要为每个瓦片高度级别创建单独的Tilemap游戏对象,则最好使用常规的Isometric Tilemap类型。 它简化了创建自动碰撞形式的过程,但是在处理图块之间的高程时灵活性较低,因为同一层上的所有图块都应位于同一“平面”上。

等距Z为Y Tilemap的情况下,每个图块的Z位置值与“透明轴排序”参数一起使用,使图块看起来像是堆叠在一起。 在Z上绘制为Y Tilemap时,我们会动态更改笔刷参数Z以在不同的高度之间切换。 为了正确地Z渲染为Y Tilemap ,在“自定义”模式的“透明排序轴”中需要一个附加的Z值。


注意:屏幕快照中显示的资产取自Isometric Starter Kit项目的Temple方块。 它们是完全免费的,因此您可以使用它们来创建自己的环境!

可以将Grid视为所有Tilemap游戏对象所驻留的“简易区”。 反过来,它们本质上是画布,我们将在其上绘制瓷砖。 要在Tilemap上开始绘制,我们还需要一个画笔和一个调色板。 所有图块资产都位于“图块选项板”上,可以使用画笔工具从中选择它们并开始绘制。

要创建“拼贴面板”,请选择“窗口”>“ 2D”>“拼贴面板”。 在左上方的下拉菜单中,选择“创建新调色板”。 确保选择了适当的网格类型。 在示例中,我将使用常规的Isometric Tilemap以及Isometric Starter Kit项目中的资产。 我们将“手动”指定为调色板的像元大小(像元大小),以便能够调整等轴测图块的大小。 在这种情况下,我知道我的图块的大小对应于一个网格,该网格的像元大小为X乘以1,Y乘以0.5。 但是,它们取决于导入单位像素值和资产大小时选择的分辨率-实际上取决于瓦片旋转的等距角度。


进口资产注意事项


您可能不知道哪种导入选项和磁贴卡大小最适合您的资产。 您可以遵循一条通用规则:首先,您需要查看图块的分辨率。 通常,等距图块的高度大于宽度。 “平铺”瓷砖(看起来更像是一个平面,而不是一个立方体)宽于高。 但是,它们之间的宽度将始终相同。 因此,如果您希望图块恰好占据一个Unity度量单位 ,则在图块导入设置中将“ 每像素像素”设置为等于其宽度(以像素为单位)的值。 在某些情况下,通常必须在减少(或增加资产的分辨率)的方向上更改此值; 如果要重新创建一种效果,其中某些图块似乎占据了多个网格单元并与相邻图块重叠,则此功能很有用。


要通过Y为瓷砖确定正确的网格值,请取一个瓷砖的底边(或顶点)的高度,然后除以宽度。 假设X为1,这将为您提供相对于X的Y值。让我们看一些示例:


在我们用于该项目的像素艺术资产中,所有基础图块均高32像素,宽64像素。 因此,Y中的网格大小将等于0.5。 图像中的第二个块取自Golden Skull Studios资产包; 你可以在这里看到它。 示例图块已减少,但原始资源的宽度为128像素。 瓦片的底部大约是66个像素,这给出了66/128的网格尺寸Y,即大约0.515个单位。

使用Tilemap的基本过程


确定正确的网格大小后,向我们的调色板中添加一些瓷砖。 只需抓住其中一个图块精灵并将其拖动到“图块调色板”窗口中即可。 这将创建图块资产。 它包含有关图块本身的信息,例如,它使用的精灵,生成的碰撞器的色调和类型。 如果需要查看有关调色板拼贴的详细信息,请选择“拼贴调色板”窗口顶部的“选择(S)”工具,然后单击此拼贴。 注意,检查器可以看到它引用的图块资产。

要通过Tilemap绘制新的Tile,请选择“画笔”工具(B),然后单击“组件面板”中的Tile。 之后,您可以在场景窗口中使用选定的图块进行绘制。 还有其他绘图工具,例如橡皮擦(D),盒子填充(U),洪水填充(G)和瓷砖拾取器(I)。

有时,您需要更改调色板本身上瓷砖的位置。 在工具栏的正下方有一个“编辑”按钮。 如果单击它,将打开调色板编辑模式,在该模式下,工具会影响“拼贴调色板”本身。 进行必要的更改后,不要忘记退出此模式。

Tilemap渲染器模式


在某些情况下,即使在同一Tilemap上,不同类型的tile仍可能无法正确排序,如本例所示:


这由Tilemap Renderer组件的Mode参数确定。 默认情况下,模式为块。

模式可有效减少Tilemap资产消耗。 与其单独渲染每个图块,不如将其作为大块一次渲染。 但是,此模式有两个主要缺点。 首先,它不支持与场景中的其他2D对象进行动态排序。 这意味着如果Tilemap处于Chunk模式下,它将无法在其他对象(例如字符)之前或之后进行动态排序-一次只能看到一个或另一个,并且这取决于Order in Layer参数。 但是,它在优化游戏方面仍然非常有效,可用于批量渲染大范围的地形。

但是,这不能使我们免于对不同图块进行不正确排序的问题。 要批量渲染从两个或多个不同的精灵(例如纹理)获取的图块,必须将这些精灵组合成一个单独的Sprite Atlas资产。

要创建Sprite Atlas,请选择Assets> Create> Sprite Atlas 。 Sprite Atlas列出了要打包对象 。 只需将需要分批渲染的所有图块拖放到其中,然后指定适当的导入参数即可,通常与各个精灵的参数匹配。

之后,磁贴将正确排序; 但它们仅在“播放”模式或游戏执行期间可见。

因此,在编辑过程中,最好为Tilemap Renderer选择“ 单独”模式。 在这种模式下,每个精灵将被分别排序。 这意味着即使在“播放”模式之外,它们也可以正确渲染,这在编辑关卡时非常有用。 完成关卡结构的创建后,您可以随时将Tilemap Renderer模式再次切换为Chunk。


当需要添加对象(例如树木,对象和更高的土地图)时,应该使用字符或彼此进行动态排序,因此单独渲染模式也很有用。 在本文中,我们将为所有Tilemap启用“个人”模式。


使用多个图块


有时需要在一个网格上使用多个Tilemap。 对于等距和六边形的Tilemap,能够添加到看起来比第一层更高的网格或图块上对齐的项目级别是很有用的。

要将另一个Tilemap连接到网格,请在Grid游戏对象上单击鼠标右键,然后创建适当类型的新Tilemap。

要开始在新的Tilemap上绘制,请返回Tile Palette窗口并更改主工具栏下的Active Tilemap。

添加凸起区域


有两种主要方法可以将高架区域添加到级别中。 选择正确的选择通常取决于您选择的Tilemap的类型。 我们将考虑每种情况。

此外,我们还准备了一个有关该主题的简短视频,该视频演示了如何使用常规的等距图块贴图以及向图块添加碰撞区域的方法。 如果您想简要了解这两种方式,请观看视频:


使用常规的等距图块图


对于常规的等距图块贴图,您可以简单地使用相同的网格创建一个新的图块贴图,并在“图层”中分配较高的值。 然后,您可以更改“平铺锚点”参数,以便将新图层锚定到同一网格中的较高点。

我针对X和Y的较低级别的Tilemap将Tile Anchor设置为(0,0)。 我希望将新图层的绘制高度提高一个单位,因此将新TileMap的锚点更改为(1,1)。 我还将“层的顺序”设置为1-比基本级别大一。

现在,您可以将活动的Tilemap更改为第二高度并开始绘制。



使用Z作为Y等距图块


有时使用单个Tilemap模拟不同的高度可能会很有用。 在这种情况下,可以使用Z作为Y等轴测图和网格。

在将Z作为Y Tilemap的情况下,每个图块的Z值对渲染图块的顺序都有额外的影响。 当使用“瓷砖面板”底部的“ Z位置”画笔参数(以及使用热键“ +”和“-”)绘制时,我们可以更改Z瓷砖的值:


但是,为了使Z值正确影响并正确对图块进行排序,您需要返回到自定义轴排序值并添加Z影响。此处使用的数字与Unity如何将等轴测网格单元的位置转换为世界空间中的值直接相关。

例如,按照XYZ尺寸为(1、0.5、1)(等轴测标准)的网格将沿着Z轴具有等于-0.26的排序值。 如果您对如何计算此数字感兴趣,或者您使用的单元格大小不同,请继续阅读以找到如何为您的情况找到正确的Z值。

通过为“自定义轴排序”设置正确的值,您可以开始绘制具有不同Z值的图块,还可以配置Z值上下移动凸起的图块的增量,从而更改网格的Z大小(默认为1)。


Z值计算


有一个通用公式可用于确定轴排序的Z值。 首先,取网格的大小Y。 如果尚未确定Y的大小,请参阅上面有关导入资产的注释。 将该值乘以-0.5,再减去0.01。

根据此公式,大小为(1、0.5、1)的网格将为我们提供-0.26的Z排序值。 使用此排序值,将正确排序任何网格(1、0.5、1)的图块。

如果您想了解更多有关该值和计算的信息,请阅读文档 。 它详细说明了2D渲染器的工作以及将等距像元转换为世界空间值时会发生什么。

添加碰撞


现在,我们已经将一些拼贴放置在其他拼贴之上,借助碰撞,我们可以控制玩家能够到达的区域以及它们之间的过渡。

添加碰撞的方法有很多,但是在我们的案例中,要求玩家沿着斜坡上升和下降,因此哪些对象应该具有碰撞器并不是很明显。 我们可以使用可选的Tilemap手动设置冲突。

在这个项目中,我们创建了几个与各种形状相对应的精灵,这些精灵将定义碰撞区域。 我们可以在玩家无法通过的位置的第三个Tilemap上绘制这些形状。 例如,我们希望玩家能够仅沿斜坡攀登岩石,而不能直接在其上攀岩。

我们还可以向Tilemap Renderer添加独特的材质,以为瓷砖提供不同的阴影,并将其与关卡的其余部分区分开。

通过放置碰撞图块,可以将Tilemap Collider组件添加到Tilemap碰撞中。 在这种情况下,对于每个单独的图块,将根据精灵的形状自动创建对撞机。

为了优化性能,您还可以添加Composite Collider 2D组件并选中Tilemap Collider的“ Used by Composite”复选框。 这会将所有对撞机组合成一个大形状。


新增项目


向一个关卡添加项目非常简单。 您可以手动将项目精灵放置在场景中的任意位置,也可以将项目附加到Tilemap网格,将它们变成单独的图块。 选择最适合您的解决方案。

在这个项目中,我们手动在该级别放置了几棵树。 树和角色在图层中具有相同的顺序,这使您可以动态地对树的前面和后面的字符进行排序。

使用对撞机,您可以指定玩家可以靠近树的位置。 这也可以通过几种方式来完成。

视频中显示了第一个-只需将儿童对撞机附加到对象上,并根据需要更改其形状。

第二种方法是在“精灵编辑器”中为对象设置“ 自定义物理形状 ”。 要打开“精灵编辑器”,请选择精灵对象,然后在检查器中找到“精灵编辑器”按钮。 在左上方的下拉菜单中,切换到“自定义物理形状”编辑器。 在这里您可以创建定义对撞机边界的多边形。 设置物理形式后,您可以将Polygon Collider组件附加到对象上,并且它将与此形式相对应。

如果将对象用作Tilemap中的图块,则还可以使用Grid Collider。 选择与项目图块匹配的图块资产(如果您不记得在哪里找到它,请参阅“基本图块映射过程”部分)。 您将看到“对撞机类型”菜单。 默认情况下,将精灵设置为类型,即自动生成的对撞机将使用上面讨论过的物理形状。 如果类型设置为网格。 那么它将始终与要附加项目的网格单元格的形状完全匹配。 也许这不是实现对撞机的最准确方法,但是对于某些类型的游戏,它可能会很有用。

要将碰撞器用于这些图块,请选择带有对象的Tilemap并添加Tilemap Collider组件。


使用规则图块


规则图块对于使用图块自动化绘制过程非常有用。 规则图块的工作方式与常规图块类似,但具有附加的图块选项列表。使用这些参数(规则),图块可以根据相邻图块自动选择要绘制的精灵。

当您不希望手动选择转弯不同的图块时(例如,在创建岩石或平台时),规则图块非常有用。它们还可以用于在同一图块的不同变体之间随机化,避免重复图案,甚至创建动画图块。

可从GitHub上的2D Extras Unity 存储库中获得等距和六角规则图块。它还具有许多其他值得探索的有用的Tilemap资产。

我们将等距入门工具包添加到了项目中。每个图块的规则图块。以下是您可以尝试的项目图块中的一些示例:






进一步的工作


现在,您已经了解了Unity中的等距拼贴卡的设备,请下载Isometric Starter kit项目并尝试自己使用它们!如果您是一名程序员,那么您就有机会通过脚本与Tilemap进行交互,可以使用它。

例如,通过观看此视频,您可以学习如何实现与Isometric Tilemap兼容的简单字符控制器:


该项目的图形是通过@castpixel为Unity创建的她的其他作品可以在这里看到如果您想了解有关在Unity上创建2D游戏的更多信息,那么您应该从Learn网站学习一些很棒的课程如果您正在寻找其他资源来尝试拼贴地图,请查看Unity Asset Store

第一次使用Tilemap创建关卡?在此Unity Learn 新手教程中了解如何构建二维世界

Source: https://habr.com/ru/post/zh-CN469497/


All Articles