如何在Unity中实现2D等距视图

我们的小便小游戏具有适当的等轴测视图。 如果您仍然不了解游戏,请让我为您显示屏幕截图:

如何在Unity中实现2D等距视图_第1张图片
主游戏区(不是最终的精灵)

如您所见,视图介于自顶向下和一定角度之间。 更像前置等距相机。 但是Unity for 2D只有一个“普通”的正交相机。 (据我所知)您无法向相机指示您想要的是等轴测图。 因此,我们不得不在代码中修复此问题。

绘图对象如何工作

首先要了解的是,我们从文件中读取了关卡定义之后,便在运行时生成了关卡 。 因此,我们必须绘制每个对象,顺序很重要。 通常,在2D游戏中,您绘制的最后一个对象将在之前的对象之上可见。

Unity方式:分层

在Unity中,您可以为对象定义图层 您还可以设置绘制图层的顺序。 例如,您可以为角色定义一个图层,为敌人定义一个图层。 您可以进行设置,以使敌人在两个角色重叠时始终位于角色后面。

如何在Unity中实现2D等距视图_第2张图片
Unity层魔术

即使您在同一层中有多个对象(想象不同的敌人或方块),Unity的属性也可以称为中的顺序来解决冲突。 想象一下,您实例化了3个块,并且在某些时候它们重叠了。 然后unity将通过使用layer属性中的order解决该问题:编号较高的那个将始终位于最前面。 无论您以什么顺序绘制它。

如何在Unity中实现2D等距视图_第3张图片
同一层中的对象在层中的顺序不同

但是,当不同的图层相互重叠时会发生什么? 那么,如果您有一个预制件(非统一性人的通用“类”)可以实例化很多次(例如我们的积木),并且具有相同的层和层顺序,那该怎么办?

重叠的解决方案

有两种解决方法。 最简单的方法是将z坐标更改为每个对象,以匹配应该位于顶部的对象。 在Unity中,即使您以2D模式工作,每个对象中仍有3个坐标。 z坐标定义对象距离相机多远。 更改z坐标可以有效地将一个对象放在另一个对象的顶部。

我不太喜欢这种方法,因为它有点混乱。 我也不确定我的碰撞系统是否可以正常使用。 因此,我决定研究其他方法,并发现Unity的另一个不错的功能: 排序组。

什么是排序组?

想象一下,您有一个由不同部分组成的精灵:头部,身体,几条胳膊和腿。 您想一起移动所有内容,但是应该怎么做? 您是否将它们放在同一层中并尝试获得正确的顺序? 如果它也与另一个由零件组成的精灵重叠,会发生什么?

我将用从Unity手册中获取的图像来说明这一部分,因为它们可以完美地解释它(而且我没有多幅图像精灵)。

为了避免这些问题,Unity将此组件称为排序组。 这具有两个属性:图层和图层顺序。 就像精灵渲染器中的其他对象一样。 但是,通过此排序组,您可以将子画面的每个部分分组为一个,因此,即使它们位于同一层中且图层属性的顺序不同也没关系。 渲染精灵时,“排序”组将具有首选项。

这是使用与否的区别:

如何在Unity中实现2D等距视图_第4张图片
检查左侧图像如何重叠

为我们的等轴测视图应用排序组

我寻求的解决方案是在所有 sprite对象中使用排序组。

我使用的每个对象都有“排序组”组件。 它们都在同一排序组层中(在我的情况下,我将其保留为Default,因为这无关紧要)。 脚本根据子画面的位置控制该(排序组)层中的顺序。

我们显然需要保持动态,因为玩家和敌人都会移动。 我们需要在最后一刻更新该顺序,因此在所有内容都已更新之后,我们将在LateUpdate中进行。

您可以在此处查看该脚本的示例:

topMaxPosition只是一个属性,指示您的精灵可以位于的最高位置。 我需要从我的观点中减去这一点的原因是,我的视图需要使屏幕底部(接近y = 0)的对象位于顶部。 因此,我们需要“颠倒”我们的y位置以按排序顺序使用它。

这是运行中的代码:

轻松地在积木层之间轻松行走

如您所见,所有方块均已正确放置,我们的玩家可以在它们之间行走。 需要时,该块将保留在后面。

那是所有人!

我希望这篇文章可以对尝试实现类似于我们的等轴测视图的人有所帮助。 如有任何疑问,请随时发表评论。

下周见!

From: https://hackernoon.com/how-to-implement-2d-isometric-view-in-unity-7717d4914eee

你可能感兴趣的:(如何在Unity中实现2D等距视图)