Unity3d 最快的2D应用程序菜单转换方法?

Unity3d 最快的2D应用程序菜单转换方法?,unity3d,transition,Unity3d,Transition,我正在开发一个具有多个菜单的2D应用程序,我希望它们能够相互滑动过渡(例如,当前菜单变为左侧,而新菜单从右侧进入) 我的第一次尝试是编写了一个脚本,可以启用父游戏对象的菜单,并在屏幕上移动菜单(lerp)。所有菜单都在一个画布下,该画布设置为屏幕空间覆盖,但每个菜单都有一个不同的游戏对象。这达到了预期的效果,但当我在我的Android测试手机上运行时,帧速率会在转换过程中下降60到25 fps。我觉得移动菜单游戏对象及其所有元素太多了 这导致我尝试了两次,让游戏对象保持静止,然后将相机滑过画布。

我正在开发一个具有多个菜单的2D应用程序,我希望它们能够相互滑动过渡(例如,当前菜单变为左侧,而新菜单从右侧进入)

我的第一次尝试是编写了一个脚本,可以启用父游戏对象的菜单,并在屏幕上移动菜单(lerp)。所有菜单都在一个画布下,该画布设置为屏幕空间覆盖,但每个菜单都有一个不同的游戏对象。这达到了预期的效果,但当我在我的Android测试手机上运行时,帧速率会在转换过程中下降60到25 fps。我觉得移动菜单游戏对象及其所有元素太多了

这导致我尝试了两次,让游戏对象保持静止,然后将相机滑过画布。我制作了画布世界空间,并对其进行缩放,使其与相机完美匹配。然而,当在手机上再次测试时,我发现帧速率一直下降到20 fps左右。不仅是在过渡期间,而且在菜单上,甚至在不与菜单交互的情况下


如果画布设置为“屏幕空间-覆盖”或“屏幕空间-相机”,有没有办法保持游戏对象静止并移动游戏视图?有没有什么方法可以在不让我的应用程序像nobodies business那样慢下来的情况下进行简单的菜单切换?

在这两种方法中,从相机的角度来看,所有元素都被移动了。这将在每一帧中触发整个UI的重画。此图形可能会很慢,尤其是当有许多透明元素彼此重叠时。没有什么神奇的方法可以让事情变得更快,但本手册在一个完整的章节中解决了这个问题,这可能值得一读,以确定在您的具体情况下可以改进什么:


移动菜单不应占用那么多fps,瓶颈在其他地方。在项目质量设置中,您可以看到的一点是您的标准着色器的质量设置。(项目设置->图形)。您可以在每个设置中将它们调低,画布可以更快。您可以做的其他事情是,将菜单渲染为渲染器,并在动画期间替换为渲染器。这将使你获得最大fps,但这是一个额外的工作,除非你已经有代码来做(这有点麻烦,但这种方法可以用来优化画布相当多)。@lassikinnune我改变了图形设置,但没有什么用处。我现在正在研究你的渲染器建议。我无法让图像看起来几乎正确,我尝试过的着色器都没有正确的颜色托盘,也没有一个支持我在场景中使用的图像遮罩。你有什么建议吗?如果你已经设法将它(你的画布或画布中的子对象)渲染到rendertexture中,只需将该纹理放入你正在移动的画布中的rawimage中(mat none),然后禁用“真实”元素?我不确定我解释得是否正确。但我一直在做的是将一些复杂的画布元素渲染成纹理(通过rendertexture,但对不同的元素重复使用相同的rendertexture),然后抓取这些元素并使用它们,而不是使用更复杂的画布元素。当然,现在我想起来了,你可以使用rendertex来避免在移动时重新绘制画布。RenderTexture和Texture.PixelRead方法都给了我糟糕的纹理。两者都有一个非常低的分辨率左上角,在同一个角上有一个奇怪的、不一致的alpha,用于一个通常完全不透明的显示,并且都没有完整地呈现滚动条的内容或遮罩。(rect的内容一旦被揭穿,将覆盖大部分(如果不是全部的话)当然,但在移动画布方法中,所有元素实际上都会移动,并且必须重新计算它们的所有变换值。我将查看UI最佳实践链接。我的框架调试窗口显示Canvas.renderverlays中大约有500个绘制网格调用。我将去看看如何瘦身,但任何提示都将不胜感激。我有很多图像组件,显然它们和文本组件不支持批处理。这意味着,据我所知,我无法最小化来自UI的draw调用。是的,draw调用的数量非常重要。如果透明度很大,渲染将需要更多的绘制调用。如果你的等级制度太深,我可能会更糟