Code Monkey home page Code Monkey logo

absystem's Issues

关于AssetBundleDataReader的疑问

AssetBundleDataReader中有个字段shortName2FullName。我疑惑的是这个dictionary的key-shortname,可能不具有唯一性。这种时候, 方法public string GetPathByShortName(string shortName)真的能够成立么?还是说应该在取名字的时候就人为地确定唯一性?

不好意思, 之前提供的link.xml过滤内容有问题

<linker> <assembly fullname="mscorlib"> <namespace fullname="System.Security.Cryptography" preserve="all"/> </assembly> </linker>

我今天发现 如果选择.NET 2.0 Subset 将导致IL2CPPBuild失败, 如果是选Mono或者选.Net 2.0 编译则没有问题, 查找了下原因, 原来是link.xml的问题, 然后我尝试去掉一些, 最后发现只留这一个就可以了, 而且也能顺利通过Build. 抱歉之前有些不严谨了.

某些情况场景里的某些共用资源被重复打到场景里

设立了两个场景是一样的,将它们打包后有些相同资源(如贴图)被打包到了场景里。使用TestScene脚本测试的。

代码如:

    AssetBundle ab = AssetBundle.LoadFromFile("Assets/StreamingAssets/AssetBundles/1f0a5d8e2e6bcab0b3618d54406da0db43f0a7e8.ab");
    UnityEngine.SceneManagement.SceneManager.LoadScene("1");

使用的unity2017.1p3.附件用zip格式上传始终不成功,下载下来后把png改zip

absystem-master zip

小bug~

今天爬文爬到這工具, 不小心手殘就按出問題~
觸發方式: 在 AssetBundleBuildPanel UI 的清單項目上按下 'Select', 接著選擇 '取消' 關閉視窗, 接著 UI 就會不斷刷出這個 Exception

NullReferenceException: Object reference not set to an instance of an object
...(略)
Tangzx.ABSystem.AssetBundleBuildPanel.OnListElementGUI (Rect rect, Int32 index, Boolean isactive, Boolean isfocused) (at Assets/ABSystem/Editor/AssetBundleBuildPanel.cs:79)
...(略)

原因應該是
filter.path = GUI.TextField(r, filter.path);
第一個參數不能為 null 造成的.

我修正的方式是把84行附近的:
if (GUI.Button(r, "Select")) { filter.path = SelectFolder(); }
增加檢查來避免給 null.
if (GUI.Button(r, "Select")) { var path = SelectFolder(); if (path != null) filter.path = path; }

关于mainAsset导致的卡顿问题

Hi,唐哥,在我们调用AssetBundle.mainAsset取出mainAsset时,它的get方法会阻塞地去Load mainAsset
所以其实我们应该异步去LoadAssetAsync,以达到完全异步的目的吧?

您好,请问AB加载场景的策略是什么?

场景打为AB和不打为AB,直接LoadScene也会自动加载依赖的AB资源,如果手动加载一遍,LoadScene还是会加载依赖,那不是 无法管理了嘛?
如果场景打为AB,那需要如何加载呢?
谢谢!

资源没有变化的情况下,打包assetsBundle文件有变化

您好 ,在资源没有变化的情况下,打包assetsBundle文件有时会有变化。 我更新ab文件使用的是ab文件的md5码, 没有变化的情况下这个文件打包会变的话每次都要更新。

比如ab.manifest前后打包 :

第一次 :
Dependencies:

  • /Users/mac/Documents/toLua_gameHall/Assets/StreamingAssets/AssetBundles/095634d3c9550412ebec2b25e678df86c613b298.ab
  • /Users/mac/Documents/toLua_gameHall/Assets/StreamingAssets/AssetBundles/1e6903d1a595c4b6c711f0b087b53ad06a51caac.ab
  • /Users/mac/Documents/toLua_gameHall/Assets/StreamingAssets/AssetBundles/d40908563ef95f57daaa40a5259d4aa7c238b0d2.ab
  • /Users/mac/Documents/toLua_gameHall/Assets/StreamingAssets/AssetBundles/5058d1b4d2eaefcd6cae4f51fc4079eb92ac38c5.ab

第二次:
Dependencies:

  • /Users/mac/Documents/toLua_gameHall/Assets/StreamingAssets/AssetBundles/1e6903d1a595c4b6c711f0b087b53ad06a51caac.ab
  • /Users/mac/Documents/toLua_gameHall/Assets/StreamingAssets/AssetBundles/095634d3c9550412ebec2b25e678df86c613b298.ab
  • /Users/mac/Documents/toLua_gameHall/Assets/StreamingAssets/AssetBundles/d40908563ef95f57daaa40a5259d4aa7c238b0d2.ab
  • /Users/mac/Documents/toLua_gameHall/Assets/StreamingAssets/AssetBundles/5058d1b4d2eaefcd6cae4f51fc4079eb92ac38c5.ab

第一条和第二条的顺序变了

唐哥,问个问题,增量打包是否有必要?

唐哥,看完你的ABSystem,但并未发现有增量打包的使用。
在AssetTarget类中有_isFileChanged标识该文件是否被修改, 但是该标志位并未被真正的使用到。
我们游戏项目中,初次打过一次ab后,以后每次新增资源打ab的速度都很快,仿佛unity内部做了增量打ab。
所以想问下 增量打ab是否有必要?

安卓下Stripping Level 如果选择StripAssemblies, HashUtils Error

我发现如果再Build Setting里设置代码剥离级别为 Strip Assemblies时候, 所提供的的HashUtils里面的
HashAlgorithm.Create()方法返回的实例为null, 并且我单独只用这个脚本建立demo尝试过, 最后谷歌了一下, 发现需要添加link.xml文件, 并且需要里面添加指定不被剥离命名空间才可以, 请问作者没有遇到这个问题吗?
建议在git库里把link.xml添加进去.
具体link.xml内容如下: 试了这个才好使
<linker> <assembly fullname="System.Core"> <namespace fullname="System.Security.Cryptography" preserve="all"/> </assembly> <assembly fullname="mscorlib"> <namespace fullname="System.Security.Cryptography" preserve="all"/> </assembly> <assembly fullname="System"> <namespace fullname="System.Security.Cryptography" preserve="all"/> </assembly> <assembly fullname="System.Security"> <namespace fullname="System.Security.Cryptography" preserve="all"/> </assembly> <assembly fullname="Mono.Security"> <namespace fullname="System.Security.Cryptography" preserve="all"/> </assembly> </linker>

ios真机测试第一次运行报错

ios真机测试第一次运行报错,在此点开就可以了。
这应该是一个prefab出现了问题
Could not open file archive:/CAB-1b8f595829568a4847896f5f91ffa899/CAB-1b8f595829568a4847896f5f91ffa899.resS for read

(Filename: Line: 56)

async texture load: failed to load SpriteAtlasTexture-prompt-128x128-fmt4 from archive:/CAB-1b8f595829568a4847896f5f91ffa899/CAB-1b8f595829568a4847896f5f91ffa899.resS

编译错误

AssetBundleManager 第174行,少了个分号。

Scripting Backend设置成IL2CPP Android平台下加载报错

改成Mono就不会报错了,报错如下:
8:02:53.861 2495 2510 E Unity : The file can not be loaded because it was created for another build target that is not compatible with this platform.
09-05 18:02:53.861 2495 2510 E Unity : Please make sure to build AssetBundles using the build target platform that it is used by.
09-05 18:02:53.861 2495 2510 E Unity : File's Build target is: 19

关于Builtin资源

你好,在Unity 4.x 下面,Builtin资源并没有标记为AssetType.Builtin
但是在BuildExportTree,needSelfExport,GetHash的时候,是把Builtin特殊处理过了。但实际上永远不会执行?请问是bug还是有意为之?

另外,Builtin资源到底应该独立打包,还是随使用者一起打包?根据MobileAssetBundleLoader下有一个专门的LoadFromBuiltin,是否说明Builtin资源也应该独立打包单独加载?

谢谢

关于资源自动卸载

你好,我有个疑问:
首先,AssetBundleInfo.Instantiate()方式创建的go Instance能够由ABSystem去维护引用计数。

问题1:
1.对于不实例化直接使用的资源,则会直接访问mainObject,ABSystem对此无感知,有什么办法将此类型资源也管理起来么

2.目前AssetBundleInfo.UnloadBundle调用的是bundle.Unload(false),只能卸载掉Bundle内存,对于资源类型(Texture等)并不能卸载掉,只能通过Resources.UnloadUnuseAsset来卸载(仍然会造成卡顿)。
如此一来,是否ABSystem直接调用Unload(true)更加有效呢?但需要考虑下直接引用mainObject如何管理引用

关于压缩和非压缩打包的问题

你好,为了使用 CreateFromFile,此系统采用的是非压缩打包。先不讨论自己压缩,网络下载完成再解压缩的问题,因为都可以写代码解决。(如果直接使用LoadFromCacheOrDownload可以避免上述问题)

但有一个问题,目前来看好像无法解决:初始包的大小。因为我们初始包会打完整包,放到StreamingAssets下。这个文件夹在真机上是只读的。

所以我们的项目还是采用LoadFromCacheOrDownload,压缩打包。

请问作者是怎么考虑这个问题的?

谢谢

AssetBundleInfo Dispose方法资源没有被释放的问题

我修改了下

    public virtual void Dispose()
    {
        UnloadBundle(true);
        ......
     }

    void UnloadBundle(bool unload = false)
    {
        if (bundle != null)
        {
            if (AssetBundleManager.enableLog)
                Debug.Log("Unload : " + data.compositeType + " >> " + data.debugName);

            bundle.Unload(unload);
        }
        bundle = null;
    }

这样释放的时候 相当于调用了 AssetBundle.Unload(true). 我测试了一下Profiler里面可以正常把贴图给释放掉了.

不知道我理解的对不对

如何加快做版本的速度?

你好,请教个实际问题:如何加快做版本的速度?

以我们的游戏为例,如果不用AB模式,做版本大概10分钟左右。(即用Resources.Load)
如果要用AB包,第一次做版本需要大概2个小时。后续就算增量打包AB包也要30分钟左右。这个时间对于正常的项目迭代实在是无法忍受。

打包AB时间主要消耗在2个方面:
一是分析需要打包的资源,LoadAsset资源慢,CollectDependencies更慢
二是打包本身慢BuildAssetBundle,特别是地图修改的话。如果开了压缩打包,时间还要增加

请问有没有什么优化建议?谢谢

关于打Bundle的粒度

看到AssetTarget和其它代码中,进行打包的时候是考虑一个资源一个bundle的,请教一下是有什么特殊的考虑呢,为何不将一组资源打到一个bundle里?

拆到逐资源打bundle ,如果资源量大,bundle的额外内存开销是否也不小呢?

关于unity内置资源冗余问题

示例工程打包后发现,Capsule和Cube两个材质球分别依赖了 内置shader,Diffuse和VertexLit。而这两个shader在Cube和Capsule的ab包里面都出现了
qq 20180314134709
qq 20180314134823

作者能提供个同步加载AB的接口不

目前加载AB的接口都是异步式的, 但同步LoadAB需求也有呀, 作者加载AB从来都是异步的吗, 能在AssetBundleManager里设计个同步加载的接口吗

打包面板Asset Filter条目过多时就看不见了, 希望加上滚动条

就是那个条目变多时候, 突然才意识到这个问题, 然后我尝试把条目增加很多, 然后也超过最大化的窗口时, 下面的过滤条目就看不到了, 然后也没滚动条, 然后我就给加了个, `希望您顺手加上~~
代码如下:

Vector2 scollbarPos = Vector2.zero;
GUILayout.BeginVertical();
scollbarPos = GUILayout.BeginScrollView(scollbarPos, "HiddenScrollbar", "verticalscrollbar");
GUILayout.EndScrollView();

GUILayout.EndVertical();

scollbarPos是字段, 然后在那个//context后的开始竖向布局和结束布局加上那两句代码就成.

关于打包资源存在冗余的问题

3个资源PrefabA PrefabB ImgC
其中PrefabA 依赖PrefabB 和ImgC,PrefabB 依赖ImgC
打包配置指定PrefabA和PrefabB为root
调试跟踪代码发现,最终生成的依赖关系是:PrefabA -> PrefabB -> ImgC,PrefabA对ImgC的直接依赖会再分析过程Analyze中被优化移除掉。
但是在BeforeExport过程中因为ImgC只有一Root:PrefabB作为其直接子节点,因此ImgC的导出类型AssetBundleExportType还是Asset。然后在实际打包过程中ImgC是不会被单独打包的,但是由于unity5.X的打包机制,unity会保证资源完整性,在PrefabA的AB包和PrefabB的AB包中都会有一份ImgC的存在,存在了冗余。
感觉这里更好的方案是不是ImgC和PrefabB一起打包更加合适一点

5.6.0f3 example error

RunTime Player:

NotImplementedException: The requested feature is not implemented.
at Tangzx.ABSystem.AssetBundlePathResolver.GetBundleSourceFile (System.String path, Boolean forWWW) [0x00000] in :0
at Tangzx.ABSystem.AssetBundleManager+c__Iterator0.MoveNext () [0x00000] in :0
at UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) [0x00000] in :0
UnityEngine.MonoBehaviour:StartCoroutine_Auto_Internal(IEnumerator)
UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
Tangzx.ABSystem.AssetBundleManager:Init(Action)
Test:Start()

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.