unity3d 从 web 和内存问题加载 spritesheet

Posted

技术标签:

【中文标题】unity3d 从 web 和内存问题加载 spritesheet【英文标题】:unity3d loading spritesheet from web and memory issue 【发布时间】:2019-01-21 02:57:22 【问题描述】:

我正在制作一个交互式图书应用程序,播放器将卷曲页面并看到每页的 spritesheet 动画。我曾尝试单独加载精灵(300 张图像,大小为 512x512)。但是当我尝试这种方法时,ipad 崩溃并说内存问题。我检查了统一的内存配置文件,应用程序正在将“1.2 GB”加载到内存中。它是如此巨大,所以 ipad 是对的。

所以首先我认为我只需要加载指定的页面数,当播放器翻页时,我可能会加载新资源并销毁以前的页面资源。当我尝试它时,当玩家翻页时,它会冻结几秒钟来加载新的精灵,这对用户体验来说太糟糕了。

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

【问题讨论】:

【参考方案1】:

当我尝试它时,当玩家翻页时,它会冻结几秒钟来加载新的精灵,这对用户体验来说太糟糕了

假设这是一个线性设置,您一次只能存储正负 5 页。如果我在第 1 页,加载第 2-6 页,当我翻页时,加载第 7 页。当我到达第 6 页时,删除第 1 页。将在性能与内存分配之间进行权衡,所以你会必须调用缓存多少页。

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

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

我相当肯定这不是理想的下坡路。您可能需要研究 Unity Tilemaps 以提供更可靠的答案。

【讨论】:

您如何处理负载?能否提供一些代码示例?

以上是关于unity3d 从 web 和内存问题加载 spritesheet的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D修改LWPR,HDPR的几项小问题和解决

Unity3D 从 XML 文件保存和加载数据不起作用

怎么在另一个程序加载或者调用UNITY3D

Unity3D日常开发Unity3D中实现向Web服务器上传图片以及下载图片功能

Unity3D日常开发Unity3D中实现向Web服务器上传图片以及下载图片功能

Unity3D占用内存太大的解决方法