1)AssetBundle.Unload(true)无法卸载图集
2)关于Unity 2D游戏地图预加载的问题
3)Addressables能否支持某些资源不打Bundle直接加载源文件
这是第342篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学习。
UWA社区主页:community.uwa4d.com
UWA QQ群:465082844
Loading
Q:如图,AssetBundle.Unload(true)中仍然有一份图集残留在内存中,使用Resources.UnloadUnusedAssets()可以卸载,但用GC.Collect无法卸载,若不调用Resources.UnloadUnusedAssets(),有其他的办法可以卸载这个图集吗?
A1:目前Unity 3D中的Atlas不需要额外的卸载操作,只需要确保Atlas的AssetBundle和引用Atlas的AssetBundle完全卸载后,Atlas自然会卸载。
感谢沐风@UWA问答社区提供了回答
A2:可以试试Resources.UnloadAsset,印象中切换场景会自动调用UnloadUnusedAssets。
感谢Knight-132872@UWA问答社区提供了回答
Loading
Q:请问,2D游戏地图如何实现地图的无缝预加载功能?需要具体学习什么才能写出来相关的代码呢?
A1:假设上一个关卡为x-1,本关卡为x,下一关卡为x+1,根据需要提前预加载x+-y的关卡数量就行了,以本身关卡ID去计算需加载的范围,每次切换关卡根据关卡重新计算范围。
感谢曹潘赣@UWA问答社区提供了回答
A2:用一个工具说明一下思路LDTK。
导出的数据是以关卡为单位的。进入目标关卡时,要队列加载相邻的关卡,如果加载过程中卡顿体验不好则要预测下一个目标关卡,并在加载时用其它视觉效果掩盖加载卡顿。
还有一种是把所有关卡都加载完,关卡转换基本上是无感的,这种要考虑解决内存和效率问题。
具体代码实现就是使用工具提供的API,有编程基础就没有问题。
如果是Unity,则涉及到资源加载、场景等概念。
感谢李伟@UWA问答社区提供了回答
AssetBundle
Q:请问Addressables能否支持某些资源不打Bundle直接加载源文件,比如mp4、bytes文件等?
A:Addressables也是基于Bundle的,像播放mp4这样的文件如果在Bundle中则可能播放出错,可以在资源更新时把这样的文件读出来,放到设备的用户目录里,使用时就可以直接用文件或路径了。
bytes这样的文件可以放到Bundle里,某个版本的TextAsset里添加了新方法 ,这个方法可以用一下:
public NativeArray
GetData () where T : struct; 对于大量数据表只需要用一个ByteBuffer来处理。如果存储的数据可以分块读取,那内存也不会占用很多。
感谢李伟@UWA问答社区提供了回答
封面图来源于网络
今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。
UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844