-
Notifications
You must be signed in to change notification settings - Fork 200
作者能提供个同步加载AB的接口不 #5
Comments
对,我们都是异步的,不建议同步,有时会很卡。 |
主要是我们这边界面跳转是同步跳转的, 然后我想把背景图片都弄成ab, 然后跳转界面后立即加载背景图片, 我顺便想请教一下 , 你们项目里对于大背景图怎么处理的呢? 现在我发现由于大背景图片不适合打图集, 不打图集又在IOS下不能用于指定压缩格式, 因为不是2的幂次方, 然后大量的背景图片会造成IOS安装后的体积会变的很大, 根本原因是, 在IOS下如果图片不是2的幂次方话, 打包后图片在Unity里显示的图片体积会变成实际安装后占用磁盘空间的量.导致明明图片才几百K, 然后安装IPA后这个图片实际安装后占用磁盘的空间就会变成好几兆. 然后思来想去只能打AB来解决这个问题了. 但我这边由于界面都是同步跳转, 如果异步加载图片会有几帧图片显示不出来.只能同步加载.我目前也在你的代码基础上加了个简单的同步, 然后ab卸载就放在指定界面生命周期内卸载了. 还有我发现如果用Unload(false), 然后当使用ab创建资源对象的游戏对象销毁了, 并且调用Resources.UnloadUnusedAssets(). 并不会卸载ab创建的资源对象. 然后来回这么创建后, 我发现ab创建的资源对象存在了多分, 然后这样就造成内存泄露了. 不好意思, 请教的问题有点多. |
1.我们项目还没涉及到你所说的大图片的问题,所以没研究过哦,我觉得尽量从设计上避免这种情况吧? |
1.你们项目里大背景都是九宫格拉出来的吗?我们项目由于很多画面都是靠背景图表现内容的. |
对了还有一个问题是, 如果我想从一个ab加载一个Sprite, 目前的从ab获取资源的方式mainObject是不行的, 里面由于调用LoadAsset(name), 这个方法并不能准确的返回指定类型的对象, 如果把一个图片打包成AB后想要获取上面的Sprite对象,必须用LoadAsset<T>(name), T传入Sprite才可以. 希望您可以改善一下, 我自己的做法是在代码基础上加了个public T LoadAsset<T>() where T : Object方法,对应的Require也添加了个public T Require<T>(Object user) where T : Object方法. |
1.大背景你指的是全屏UI? 是的,我们用九宫,或者是场景3D背景 |
嗯,Unload(true)我也是在明确对象不存在才用的, 对于那些需要继续存在的实例当然是不能这么干, 但是 看您的代码是从ab创建资源对象是会增加引用计数, 然后持有者销毁的时候会减掉引用计数, 那么意味着当引用计数为空的时候不就是从该ab实例出来的对象都被销毁了, 此时应该可以判定回收全部的吧.直接unload(true), 这样也会减少Resources.UnloadUnusedAssets()的压力. |
这也是为了保险起见,不排除有绕过引用计数而存在的实例 |
目前加载AB的接口都是异步式的, 但同步LoadAB需求也有呀, 作者加载AB从来都是异步的吗, 能在AssetBundleManager里设计个同步加载的接口吗
The text was updated successfully, but these errors were encountered: