显示和隐藏GameObject的最有效技术?

时间:2017-01-06 06:57:52

标签: c# performance unity3d

我试图弄清楚如何评估哪种技术对于给定的一系列问题最好。这是一个例子:

  • 我有“Boxes”,它们都是由一组UI按钮组成的, 文本,图标。我的目标是为用户提供隐藏/显示的可能性 他/她想要的这些不同元素。

根据这些指导原则,我可以想出4种不同的方法来解决这个问题:

  1. 通过激活/停用游戏对象隐藏/显示这些元素
  2. 销毁游戏对象/在我再次需要时实例化
  3. 将对象设置为透明或不透明
  4. 将物体的位置设置在无法到达的位置,或使其比例为纳米级:P
  5. 扭曲的是,这些盒子将位于您可以导航的3D空间中,这意味着它们有时会出现在屏幕上,有时则不会出现。我猜它的重要性,以确定哪种技术最好?

    我的问题是:

    1. 我可以提前评估哪种解决方案最多 表现有效吗?是否有某种共识表明 例如,激活/取消激活游戏对象总是比较慢 比破坏实例化呢?
    2. 是否有某些关于这些共识的清单?
    3. 是否还有其他技术可以执行此任务?
    4. 我猜这是关于处理不同项目/任务的经验,尽管我觉得作为初学者很难知道在哪里/如何找到信息

      感觉就像在一种语言中,当有几种方式说同一个东西,但你不确定如何表达它,更糟糕的是:当你不知道一个单词的存在会导致它一切都闪耀。

      如果不是Unity社区/ Stack Overflow等等,我会遇到麻烦,所以再次感谢所有人来到这里并且非常乐于助人=)。

      注意:我刚刚在统一中偶然发现了探查器,并会研究它可以做些什么。

1 个答案:

答案 0 :(得分:1)

最好的是no 1 Activating/Deactivating gameobject,为什么?

如果您一次启动大量对象,

no 2会导致performance问题。例如:射击子弹。因为你实例化和销毁它,它将创建新的内存分配来存储每个实例化对象,并在你销毁时再次找到内存的位置以清除它。

no 3,会出现performance问题和colliding问题,如果场景中有很多对象但是后透明,则会出现性能问题。因为即使它是透明的,GPU仍然需要渲染它们。所以无论你是透明还是不透明都是一样的。如果你的物体有对撞机但透明,它会有碰撞问题。所以它会与其他物体碰撞。

no 4会有performance问题,因为如果你扩展它们,我担心你会破坏动态批处理会增加绘制调用。我之前也尝试过这种方法,当你的相机能够移动360时,想象你把它隐藏在你身后,即使它很远,也不是很好。当你向后看时,你仍然可以看到它们。

要轻松Activate/Deactivate像往常一样(实例化/销毁),您可以尝试Pooling Systemhttps://github.com/6ameDev/Advanced-Pooling-System