根据 Unity 中的层次结构渲染顺序

Render order according to hierarchy in Unity

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

我认为Unity没有这样的功能(https://docs.unity3d.com/Manual/2DSorting.html)。

通常你应该定义一些排序层:

  • 远背景
  • 背景
  • 前景

并将每个精灵的精灵渲染器分配给其中一个排序层

从你上一张截图我可以看出你正在使用 SpriteRenderer。

问题 "is there an option that I can check so that it uses the order in the hierarchy window as the default sorting order?" 的简短回答是否定的,默认情况下没有*。

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

  1. 根据 docs:[=38,通过使用到相机的距离,这将在同一 order in layer 中的其余对象之上绘制距离相机最近的对象=]

Sprite Sort Point This property is only available when the Sprite Renderer’s Draw Mode is set to Simple.

In a 2D project, the Main Camera is set to Orthographic Projection mode by default. In this mode, Unity renders Sprites in the order of their their distance to the camera, along the direction of the Camera’s view.

如果你想让图层中的所有内容都保持相同的排序 layer/order 你可以通过将两个对象中的一个移动到离相机更远的位置来更改对象出现的顺序(这可能更靠后) z 轴)。例如,如果您的腰果在 z = 0 上,而您将核桃放在 z = 1 上,那么腰果将被绘制在核桃之上。如果腰果在 z=0 上并且核桃在 z = -1 上,那么核桃将被绘制在顶部(因为负片 更接近 到相机)。如果两个对象都在 z - 0 上,它们离相机的距离相等,所以它变成了掷硬币,对象被绘制在前面,因为它没有考虑层次结构。

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

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