AssetBundle.Unload(true)无法卸载图集

发布时间 2023-07-10 14:54:29作者: UWATech

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<T> GetData<T>() where T : struct;

  

对于大量数据表只需要用一个ByteBuffer来处理。如果存储的数据可以分块读取,那内存也不会占用很多。

感谢李伟@UWA问答社区提供了回答

封面图来源于网络


今天的分享就到这里。生有涯而知无涯,在漫漫的开发周期中,我们遇到的问题只是冰山一角,UWA社区愿伴你同行,一起探索分享。欢迎更多的开发者加入UWA社区。

UWA官网:www.uwa4d.com
UWA社区:community.uwa4d.com
UWA学堂:edu.uwa4d.com
官方技术QQ群:465082844