Skip to content

Latest commit

 

History

History
120 lines (93 loc) · 5.41 KB

README.md

File metadata and controls

120 lines (93 loc) · 5.41 KB

xasset

xasset 致力于为 Unity 项目提供了一套 精简稳健 的资源管理环境

主要特点

  • 自动管理依赖的加载和卸载,循环依赖下可以正常运行
  • 接管了场景以及常规资源的加载(同步/异步)和卸载,逻辑开发无需关注 AssetBundle
  • 基于引用计数管理资源对象生命周期,避免重复加载和轻易卸载
  • 支持编辑器模式,不构建 AssetBundle 也可正常使用,开发效率高
  • 集成了官方的 AssetBundleBrowser,支持可视化的资源冗余预警,以及打包粒度调整
  • 提供了支持断点续传的资源版本更新Demo
  • 异步加载模式底层最大并发请求数量可配置

未来计划

计划提供资源性能预警工具,对单个资源的 内存/加载/渲染 开销进行真机采样,然后收集 prefab 的依赖并根据真机采样的数据,进行 Runtime 时的性能预警,把资源的性能问题在制作时提前发现提前处理,感兴趣的朋友可以加入技术支持群,一起交流探讨

使用范例

  1. 资源初始化

    以下代码,可以在工程的 Assets/Demo/Scripts/AssetsInit.cs 中找到

    void Start()
    {
          /// 初始化
        Assets.Initialize(OnInitialized, (error) => { Debug.Log(error); }); 
    }
    
    private void OnInitialized()
    {
       var asset = Assets.Load(assetPath, typeof(UnityEngine.Object));
       asset.completed += delegate(Asset a) 
       {
          if (a.name.EndsWith(".prefab", StringComparison.CurrentCulture))
          {
             var go = Instantiate(a.asset);
             go.name = a.asset.name;
             /// 设置关注对象,当关注对象销毁时,回收资源
             a.Require(go); 
             Destroy(go, 3);
             /// 设置关注对象后,只需要释放一次,可以按自己的喜好调整,
             /// 例如 ABSystem 中,不需要 调用这个 Release,
             /// 这里如果之前没有调用 Require,下一帧这个资源就会被回收
             a.Release();   
          }
       };
    } 
  2. 资源版本更新

    这里主要说明如何基于 Demo 场景进行测试资源版本更新

    首先,资源打包后,把 AssetsMenuItem 的 OnIntialize 替换为下面的样子:

    [InitializeOnLoadMethod]
    private static void OnInitialize()
    {
        var settings = BuildScript.GetSettings();
        if (settings.localServer)
        {
            bool isRunning = LaunchLocalServer.IsRunning();
            if (!isRunning)
            {
                LaunchLocalServer.Run();
            } 
        }
        else
        {
            bool isRunning = LaunchLocalServer.IsRunning();
            if (isRunning)
            {
                LaunchLocalServer.KillRunningAssetBundleServer();
            }
        }
        //Utility.dataPath = System.Environment.CurrentDirectory;
        Utility.downloadURL = BuildScript.GetManifest().downloadURL;
        Utility.assetBundleMode = settings.runtimeMode;
        Utility.getPlatformDelegate = BuildScript.GetPlatformName;
        Utility.loadDelegate = AssetDatabase.LoadAssetAtPath;
        assetRootPath = settings.assetRootPath;
    }

    其次,上面的改动主要是注释了 Utility.dataPath = System.Environment.CurrentDirectory;这行代码,这样在编辑器下,xasset 会从 StreamingAssets 目录下读取资源,所以,对于构建后的资源包,我们需要执行 Assets/AssetBundles/拷贝到StreamingAssets复制到这个目录下

    复制后,在编辑器下启动 Demo 场景,点击 Check 后,应该不会触发资源版本更新,停止播放后,可以修改已有的资源,例如在现有的 prefab 中添加新的内容,或者直接添加一些新的资源(这里是添加了一个新的 prefab),执行标记打包后,再次启动 Demo 场景,点击 Check 后,单步调试可以看到以下画面: update1

    更新完成后,Demo 中会提示更新了几个文件,如下图所示: update2

    最后,以上就是基于 Demo 场景进行资源版本更新的主要流程,更多演示请参考: xasset 框架入门指南

测试环境

引擎版本:Unity 5.6.7 / Unity2017.4 / Unity 2018.4

语言环境:.net 3.5/.net 4.0 (4.0版本有路径问题,如果发现有报错可以先切回 3.5 环境)

操作系统:macOS 10.14.5

技术支持

QQ群: 693203087 (可点击加入)

贡献成员

  • hemingfei: v2 解决下载有新增资源包文件报空指针的问题,AssetsUpdate.cs 中 更新完成后 completed 两次的问题
  • yusjoel: v2 处理Path.GetDirectoryName()获取的路径在.Net 3.5和.Net 4.0下斜杠不一致的问题
  • veboys: v1 WEBGL兼容性支持
  • woshihuo12: v1 修正编辑器下assetbundle模式报错的问题
  • CatImmortal: v2 WebAsset底层支持UnityWebRequest
  • ZhangDi: v1 Tiny improve

友情链接

  • ET Unity3D Client And C# Server Framework
  • QFramework Your first K.I.S.S Unity 3D Framework