【问题标题】:Render order according to hierarchy in Unity根据 Unity 中的层次结构渲染顺序
【发布时间】:2020-06-10 09:39:12
【问题描述】:

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

【问题讨论】:

  • 只要两个对象在同一个渲染队列上并且使用默认的 lessEqual Ztesting 顺序,那么绘制顺序与层次结构相同,这意味着首先绘制层次结构顶部的对象(在后面),底部的对象最后绘制(在顶部)如果将渲染队列更改为更高的值,它将根据队列中的值将对象拉到前面。此处的文档中的更多信息docs.unity3d.com/Manual/2DSorting.html
  • 感谢您的回答,但仍然没有运气。我没有对精灵设置进行任何更改,所以它们不应该在同一个渲染队列中并使用默认的 Ztesting 吗?意外:ibb.co/P4v6ynj 预期:ibb.co/Y0hYq4W
  • 这两张图除了红圈外看起来是一样的,你是不是上传错图了?您还可以附上这两个对象的检查器屏幕截图吗?
  • 在带有红色圆圈的图像中,核桃在层次结构中位于腰果之后,所以我希望它会被绘制在它上面。检查员:ibb.co/d0V6N1Z

标签: unity3d 2d


【解决方案1】:

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

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

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

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

Sprite 排序点 该属性仅在 Sprite Renderer 的 Draw Mode 设置为 Simple 时可用。

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

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

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

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

【讨论】:

  • 感谢您的广泛回答。我可能会选择星号方式。当信息已经存在时,我只是没有看到分配每个对象的意义,只是 Unity 忽略了它。
  • @Philipp 是的,如果本机支持这样的东西会很整洁,可能有人已经为它做了一些东西,所以检查资产商店。重新发明轮子没有用 :) 如果此答案有用并回答了您的问题,请单击答案左上角的小复选标记接受它。这样以后有类似问题的人也能更容易找到。
  • 我现在就用这个​​:[ExecuteInEditMode] public class UnityHelper : MonoBehaviour { void Update(){ foreach (SpriteRenderer sr in FindObjectsOfType<SpriteRenderer>()){ sr.sortingOrder = sr.transform.GetSiblingIndex(); } } }
【解决方案2】:

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

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

  • 远背景
  • 背景
  • 前景

并将每个精灵的 Sprite Renderer 分配给排序层之一

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多