unity3d从Web和内存问题加载Spritesheet

时间:2018-08-14 09:31:59

标签: unity3d memory sprite-sheet atlas

我正在制作一个交互式图书应用程序,播放器将卷曲页面,并且每页将显示spritesheet动画。我试着分别加载精灵(300张512x512尺寸的图像)。但是,当我尝试这种方法时,ipad崩溃并说到内存问题。我已经统一检查了内存配置文件,应用程序正在将“ 1.2 GB”加载到ram中。它是如此之大,以至于iPad是正确的。

所以我认为第一件事是我只需要加载指定的页面数,而当播放器将页面转到前进时,我可能会加载新的资产并破坏先前的页面资产。当我尝试过时,当播放器打开页面时,它冻结了几秒钟以加载新的精灵,对于用户体验来说太糟糕了。

我现在正在考虑的第二件事,假设我有30个帧用于1个精灵动画,只是将30帧放入纹理中,而仅将此纹理用于精灵动画。我的意思是,我不需要使用30个不同的图像,而是需要使用包含所有帧的1个Sprite Atlas纹理,并且可以在运行时更改rect以呈现Sprite动画。但是我不知道如何仅使用1个纹理来呈现30帧?

1 个答案:

答案 0 :(得分:0)

  

当我尝试播放时,当播放器翻页时,它冻结了几秒钟以加载新的精灵,对于用户体验来说太糟糕了

假定这是线性设置,则一次只能存储正负5页。如果我在第1页上,请加载第2-6页,当我翻页时,请加载第7页。当我进入第6页时,请删除第1页。在性能与内存分配之间需要进行权衡,因此您将必须调用要缓存的页面数。

  

但是我不知道如何仅使用1个纹理来呈现30帧?

我不确定您如何设置精灵纹理,但是可以通过将spriteImportMode设置为SpriteImportMode.Multiple来将一个精灵变成多个精灵。然后,您可以通过父级精灵spriteMetaData定义每个精灵的边界。您也可以在统一编辑器中更改此设置,但是根据您所描述的内容,您将必须以编程方式进行更改。

我相当确定这不是走下坡路的理想之路。您可能需要研究Unity Tilemaps才能得出更可靠的答案。