【问题标题】:Is SetAsFirstSibling or SetAsLastSibling better to use in Unity?在 Unity 中使用 SetAsFirstSibling 还是 SetAsLastSibling 更好?
【发布时间】:2018-10-06 02:21:52
【问题描述】:

这并不难测试,但我很好奇是否有人已经测试过:将新实例化的游戏对象设置为层次结构中的第一个和最后一个同级是否存在性能差异?例如,我可以按降序排列游戏对象列表,并将每个游戏对象设置为最后一个兄弟对象,或者按升序对其进行排序,并将每个对象设置为第一个以获得我想要的顺序。

我之所以这么问,是因为它让我想起了在链表的开头插入而不是在末尾插入以避免遍历列表的性能增益。

【问题讨论】:

  • 对于 ILSpy 来说,这听起来像是一个很棒的练习。 alanzucconi.com/2015/09/02/…
  • 我认为只是时间差异但有趣的文章会更容易,谢谢。
  • 是的,只是觉得它会是一本好书。
  • 据我所知,如果您实例化一个对象然后更改其父对象,则需要 Unity 重新计算变换层次结构(它们是固定大小的数组)两次。如果您在指示父级时进行实例化,则将重新计算一次。 SetAsLastChild 可能没有任何成本(除了上述和一些函数开销)。 SetAsFirstChild 需要重新计算该对象的子列表(但少于添加新子列表)。
  • 我希望有一种方法来实例化,同时指示父级并指定索引(ala SetSiblingIndex)。我正在尝试通过 SetActive(bool) 重用预制件,而不是销毁它们并重新实例化。这就像一个带有行的表格视图,但我必须在某些行之间插入分隔符 - 这取决于您正在查看的页面。

标签: performance unity3d gameobject


【解决方案1】:

如果您不关心对象优先级,为什么要设置子顺序? 在内部,层次结构实际上存储在引擎的 C++ 端,因此在此级别进行微优化只是在浪费时间 - 事实上,您对非托管端进行 P/Invoke 调用可能比两者之间的差异更昂贵首先和最后很可能它更类似于普通数组,而不是列表。

【讨论】:

  • 哦,你是说无序地实例化所有游戏对象,然后按顺序分配它们的变量?他们将需要根据内容不同的大小,但也许我只需要一个布局调用来调整它们的大小。这听起来是个好主意,我会尝试一下。另外,非托管方是什么意思?
  • 事实证明,孩子们被自动创建为最后一个兄弟姐妹,这样就解决了这个问题。
【解决方案2】:

孩子在实例化时会自动添加为最后一个兄弟姐妹,因此将任何设置为第一个兄弟姐妹会更昂贵。

【讨论】:

    猜你喜欢
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 2021-01-24
    相关资源
    最近更新 更多