首页 > 解决方案 > 根据 Unity 中的层次结构渲染顺序

问题描述

我试图了解 Unity 如何决定在 2D 游戏中首先绘制什么。我可以在层中给所有东西一个顺序,但是我有这么多的对象,如果它只是按照层次结构的顺序绘制会容易得多。我可以编写一个脚本,为每个对象提供索引,但我也想在编辑器中看到它。所以问题是,是否有一个我可以检查的选项,以便它使用层次结构窗口中的顺序作为默认排序顺序?

标签: unity3d2d

解决方案


从您的上一个屏幕截图中,我可以看到您正在使用 SpriteRenderer。

问题的简短回答“我可以检查一个选项,以便它使用层次结构窗口中的顺序作为默认排序顺序?” 不会,默认情况下没有*。

Sprite 渲染器通过以下两种方式之一计算哪个对象在其他对象的前面:

  1. order in layer根据文档,通过使用到相机的距离,这会将最接近相机的对象绘制在相同的其余对象之上:

Sprite Sort Point 此属性仅在 Sprite Renderer 的 Draw Mode 设置为 Simple 时可用。

在 2D 项目中,主相机默认设置为正交投影模式。在这种模式下,Unity 会按照 Sprite 与摄像机的距离顺序,沿着摄像机视图的方向渲染 Sprite。

如果您想将所有内容保持在相同的排序层/层中,您可以通过将两个对象之一移离相机更远(这可能在z轴下方)来更改对象出现的顺序。例如,如果您的腰果已打开z = 0,并且您将核桃放在z = 1上面,那么腰果将被绘制在核桃上。如果腰果打开z=0并且核桃打开,z = -1那么核桃将被绘制在顶部(因为负片更靠近相机)。如果两个对象都在上面z - 0,那么它们与相机的距离都是一样的,所以它变成了抛硬币,对象被画在前面,因为它没有考虑层次结构。

  1. 更改顺序的第二种方法是创建不同sorting layers的 ,并order in layersprite renderer组件中调整 。但你已经想通了。

*但是,从技术上讲,这并不意味着它不能完成……如果您喜欢冒险,那么没有什么能阻止您制作一个编辑器脚本,该脚本order in layer会根据层次结构中的位置自动为您设置。该脚本将遍历层次结构中的所有对象,获取层次结构中对象的索引,并将索引分配给 Order in Layer。


推荐阅读