GithubHelp home page GithubHelp logo

Comments (8)

tangzx avatar tangzx commented on May 20, 2024 1

这也是为了保险起见,不排除有绕过引用计数而存在的实例

from absystem.

tangzx avatar tangzx commented on May 20, 2024

对,我们都是异步的,不建议同步,有时会很卡。
因为是依赖树的原因两种都支持的话容易引起加载混乱,要么全都同步要么全都异步,所以我放弃了同步。

from absystem.

3wz avatar 3wz commented on May 20, 2024

主要是我们这边界面跳转是同步跳转的, 然后我想把背景图片都弄成ab, 然后跳转界面后立即加载背景图片, 我顺便想请教一下 , 你们项目里对于大背景图怎么处理的呢? 现在我发现由于大背景图片不适合打图集, 不打图集又在IOS下不能用于指定压缩格式, 因为不是2的幂次方, 然后大量的背景图片会造成IOS安装后的体积会变的很大, 根本原因是, 在IOS下如果图片不是2的幂次方话, 打包后图片在Unity里显示的图片体积会变成实际安装后占用磁盘空间的量.导致明明图片才几百K, 然后安装IPA后这个图片实际安装后占用磁盘的空间就会变成好几兆. 然后思来想去只能打AB来解决这个问题了. 但我这边由于界面都是同步跳转, 如果异步加载图片会有几帧图片显示不出来.只能同步加载.我目前也在你的代码基础上加了个简单的同步, 然后ab卸载就放在指定界面生命周期内卸载了. 还有我发现如果用Unload(false), 然后当使用ab创建资源对象的游戏对象销毁了, 并且调用Resources.UnloadUnusedAssets(). 并不会卸载ab创建的资源对象. 然后来回这么创建后, 我发现ab创建的资源对象存在了多分, 然后这样就造成内存泄露了. 不好意思, 请教的问题有点多.

from absystem.

tangzx avatar tangzx commented on May 20, 2024

1.我们项目还没涉及到你所说的大图片的问题,所以没研究过哦,我觉得尽量从设计上避免这种情况吧?
2.如果单是只加载一个图片AB的话,你可以自己处理一下,这个不涉及依赖情况,所以加载起来简单。
3.关于泄露问题情况比较复杂吧,最根本原因肯定是哪里对这个对象还有引用存在,profile检查一下引用关系。如果觉得是ABSystem的问题,欢迎提供一个例子工程我测测~

from absystem.

3wz avatar 3wz commented on May 20, 2024

1.你们项目里大背景都是九宫格拉出来的吗?我们项目由于很多画面都是靠背景图表现内容的.
2.我目前就是在那个Manager里加了个Load同步的方法, 直接返回Assetbundle, 建议你把之前的Load名字方法改为LoadAsync更直观一些~
3.这个我也看了Profiler, 里面显示是有引用, 但是那些引用对象是图片他们自己, 比如一个Sprite, 它显示的就是自己的图片名字的一个对象在引用自己.
4.关于AssetBundleInfo类里面, 如果所有引用对象都被销毁, 为何不直接UnLoad(true)呢. Unload(false)只卸载ab, 但我上面就出现了ab创建出来的资源对象, 它所附着的对象被销毁了, 但是它自己并没有被销毁. 这个我搞个demo再试下, 如果确实是, 我会发给你看下.

from absystem.

3wz avatar 3wz commented on May 20, 2024

对了还有一个问题是, 如果我想从一个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方法.

from absystem.

tangzx avatar tangzx commented on May 20, 2024

1.大背景你指的是全屏UI? 是的,我们用九宫,或者是场景3D背景
2.看过一些文章Unload(true) 不建议用的,而且会有这种情况:AB被释放,但实例要存继续存在的, 如果没有引用关系,实例也是会被回收的
3.接口的建议可以考虑加进去,谢谢~

from absystem.

3wz avatar 3wz commented on May 20, 2024

嗯,Unload(true)我也是在明确对象不存在才用的, 对于那些需要继续存在的实例当然是不能这么干, 但是 看您的代码是从ab创建资源对象是会增加引用计数, 然后持有者销毁的时候会减掉引用计数, 那么意味着当引用计数为空的时候不就是从该ab实例出来的对象都被销毁了, 此时应该可以判定回收全部的吧.直接unload(true), 这样也会减少Resources.UnloadUnusedAssets()的压力.

from absystem.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.