在Unity3D中切换UI的最佳方法

时间:2017-06-26 06:48:19

标签: unity3d

我们正在构建一个内置于Unity3D的移动应用程序,它涉及大量的UI切换。例如,从此页面到另一页面,它涉及大量禁用先前的UI并激活新的UI元素。

常见的方法是将旧UI设置为非活动状态,将新UI设置为活动状态。切换回来时,只需再次激活/激活。但我读到这会导致Rebuild问题(Canvas.SendWillRenderCanvasesBuildBatch)。我想知道替代方案是什么?

这两种解决方案是否有效?

  1. 不是激活/停用UI元素,而是将其应用于UI画布。

  2. 通过远程移动UI元素来停用它。它会导致UI Rect重建吗?

  3. 设置在不同的图层中,停用时将其图层更改为invisbile图层。

1 个答案:

答案 0 :(得分:3)

如果您考虑开发具有许多UI图层的应用程序,我会阻止您为UI使用状态机。

它将产生一个包含数百个对象的场景层次结构,其中一些仅在深入了解应用程序时使用(如特定页面的设置),但它们始终存在于内存中。

此外,它使调试变得更加困难,因为你不能真正跳转到特定的状态而不经历所有以前的状态(除非你已经是高级编程,并且你定义了类以便它们可以在任何地方工作)。

简单的解决方案是使用场景来分隔您的状态,就像在Android / iOS中使用Activity / Fragments或视图一样。

这将在需要时清理你的内存,你仍然可以使用附加场景加载来保持堆栈中的场景(就像移动操作系统一样),因为你不会创建很多对象,场景会发生变化似乎无缝。 您可以使用场景名称轻松地在具有继承和扩展的场景上重用代码:

public class MyUIClassWithManyCommonCode:MonoBehaviour{}
public class FrontPage : MyUIClassWithManyCommonCode{}
public class CatalogPage : MyUIClassWithManyCommonCode{}

最后,因为您将场景中的对象数限制为应该看到的内容,所以很容易在场景中找到一个对象。