我正在为一款Android游戏创建一个UI系统,该游戏将具有一个大的(最多4096x4096)背景区域,其中菜单可以放置在该屏幕的任何位置,当需要不同的菜单时,相机将飞到该位置。我希望能够稍微动画一下,而不是拥有大的静态图像。我想知道的是如何在不滞后设备的情况下有效地完成这项工作。这些是我到目前为止提出的方法,但也许还有更好的方法......
1)背景有3个独立的4096x4096静态图层,1个是天空,1个是地形,1个是云和树。每个层都放在彼此的顶部,Z空间略有不同,以便在相机移动时产生一点视差效果。
2)拥有一个大型的静止背景图像,其上面有一层云,树木和其他应该动画的特定精灵。我认为这可能是最有效的路线,因为我可以选择不为不在视野中的部分制作动画,但它也会限制可重复使用性,因为每个不同的对象都必须手动放置在空间中。我的目标是能够简单地改变资产并且能够拥有一个全新的游戏。
3)拥有1个大背景图层,其中有几个框架几乎像视频一样播放。我觉得这将是性能上最糟糕的(加载几个4096x4096帧并每秒绘制30次不同的帧),但是会直接从After Effects中直接给出我想要的场景。我怀疑这个是否可行,不仅仅是因为绘图,而且Android设备上的存储空间仅用于菜单UI,不允许多个6MB帧。
这些都是正确的方向吗?我已经看到了一些类似的问题,但是没有一个问题足够接近我需要的东西(一个不是由瓷砖制成的大而动的背景)。
感谢任何帮助。
答案 0 :(得分:3)
至于您的问题是针对Android标记的,我会推荐第二种解决方案。
主要原因是解决方案#1和#3涉及加载大量4096x4096纹理。 快速校准:具有此类分辨率的三个32位纹理将使用至少200MB的视频RAM。这意味着你可以立即丢弃很多Android设备。
另一方面,解决方案#2只涉及两个大纹理:大型静止背景图像,以及包含特定的云,树木精灵的纹理图集...... 这个解决方案实际上更加友好,并且会产生相同的输出。
TL; DR:3种解决方案效果很好但只有#2适合嵌入式设备