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

问题描述 投票:1回答:2

我想了解Unity如何决定在一个2D游戏中先画什么。我可以直接给所有的东西一个层的顺序,但我有这么多的对象,如果只是按照层次结构的顺序绘制,那就简单多了。我可以写一个脚本,让每个对象都有它的索引,但我也想在编辑器中看到它.所以问题是,有没有一个选项,我可以检查,使它使用层次结构窗口中的顺序作为默认的排序顺序?

unity3d 2d
2个回答
0
投票

从你的最后一张截图中,我可以看到你使用的是SpriteRenderer。

对于 "是否有一个选项,我可以检查,使它使用层次结构窗口中的顺序作为默认的排序顺序?"这个问题的简短回答是没有,默认情况下没有*。

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

  1. 通过使用到摄像机的距离,这将会把离摄像机最近的物体画在同一个物体的顶部。order in layer,根据 docs.Sprite Sort Point 该属性只有在将Sprite Renderer的绘图模式设置为Simple时才可用。

Sprite Sort Point 这个属性只有在Sprite Renderer的绘图模式设置为Simple时才可用。

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

如果你想让所有的东西在层中保持相同的排序图层顺序,你可以通过将两个对象中的一个对象移到离摄像机更远的地方来改变对象出现的顺序(这可能是在更远的地方)。z 轴)。) 例如,如果你的腰果在 z = 0然后你把核桃放在 z = 1 那么腰果将被画在核桃的上面。如果腰果在 z=0 和核桃是在 z = -1 那么胡桃就会画在上面(由于负数是 密切 到摄像机)。) 如果两个对象都在 z - 0 它们离摄像机的距离一样远,所以哪一个对象被画在前面就成了掷硬币的问题,因为它没有考虑到层次结构。

  1. 改变顺序的第二种方法是通过创建不同的 sorting layers,并调整 order in layersprite renderer 组成部分。但你已经明白了。

*然而,这并不意味着技术上不能做到这一点......。如果你觉得冒险,没有什么能阻止你制作一个编辑器脚本,自动设置 order in layer 为你提供基于层次结构中的位置。这个脚本会循环浏览你的层次结构中的所有对象,抓取对象在层次结构中的索引,并将索引分配给Layer中的Order。


0
投票

我不认为Unity有这样的功能(https:/docs.unity3d.comManual2DSorting.html。).

通常你会定义一些排序层。

  • 远处的背景
  • 背景
  • 前景

并将每个精灵的Sprite Renderer分配到一个分拣层中。

© www.soinside.com 2019 - 2024. All rights reserved.