GithubHelp home page GithubHelp logo

absystem's Introduction

特点

  • 指定要打包的文件,程序会自动分析依赖、拆分打包粒度到最优方式打包
  • 缓存上次的打包信息,下次打包会增量打包
  • 自动管理卸载不用的AB
  • 可扩展,自定义打包和加载路径

如何运行

  1. 通过ABSystem/Builder Panel打开配置界面
  2. 在配置界面中更改打包配置
  3. 点击Build执行打包
  4. 增加宏 AB_MODE
  5. 运行测试

如何使用

void Start()
{
	AssetBundleManager manager = AssetBundleManager.Instance;
	manager.Init(() =>
    {
        LoadObjects();
    });
}

void LoadObjects()
{
    manager.Load("Assets.Prefabs.Sphere.prefab", (a) =>
    {
        GameObject go = a.Instantiate(); //自动管理:当go被Destroy时,AB会被释放回收
    });

    manager.Load("Assets.my_txture.png", (a) =>
    {
    	// a.Retain();	//强制引用计数加一
    	// a.Release();	//引用计数减一
    	Texture tex = a.Require(this); //自动管理:当this被Destroy时,AB会被释放回收
    });
}

absystem's People

Contributors

playfund avatar tangzx avatar uurain avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

absystem's Issues

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

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

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

关于mainAsset导致的卡顿问题

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

关于Builtin资源

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

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

谢谢

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

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

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

GUILayout.EndVertical();

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

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

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

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

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()

关于AssetBundleDataReader的疑问

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

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

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一起打包更加合适一点

您好,请问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

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

关于资源自动卸载

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

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

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

关于打Bundle的粒度

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

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

如何加快做版本的速度?

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

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

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

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

小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; }

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里面可以正常把贴图给释放掉了.

不知道我理解的对不对

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

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

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

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

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

谢谢

安卓下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>

不好意思, 之前提供的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

关于unity内置资源冗余问题

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

编译错误

AssetBundleManager 第174行,少了个分号。

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.