Giter VIP home page Giter VIP logo

xasset's Introduction

提升你的生产力

xasset 是专业 Unity 构建工具。xasset 提供更先进的 Unity 资产打包、加载、分包、加密和边玩边下等技术方案,帮助你更快更好的进行更高品质的 Unity 产品创作。了解更多 xasset 的产品特性,请前往 xasset.cc 查看。

请注意:个人或 1-3 个人的小团队,可以免费使用社区版。对于公司,需要购买授权才能使用 xasset,并且购买授权后,可以获得功能更强大的专业版。

目标、愿景和价值观

xasset 是让用户更快更好的打造 Unity 产品的生产工具。 我们的目标愿景是让用户站在巨人的肩膀上,用更高的起点更快完成更高品质的 Unity 产品创作。 我们的价值观是:

  • 简单至上:最好的设计是没有设计,让新手可以一目了然,无需额外解读。
  • 效率优先:生产工具最大的价值是节约的时间,老板们为时间付出金钱,所以时间就是金钱,效率自然是越快越好。
  • 量化数据:以时间为例,例如,使用我们的技术,让 20W+ 资产的项目的全量打包时间从 5h+ 优化到 3h+,让对应的增量打包时间从 2h+ 优化到 < 30min。

从发布至今,xasset 收获了以下荣誉:

  • 2000+ 全球开发者的星标支持。
  • 120+ 全球企业用户的信任和支持。
  • Unity 官方在线服务认可的优质合作伙伴。

未来,我们会继续努力,并尝试创造更多可以共赢的新机会。

最新动态

推荐服务:使用 UOS CDN 进行资源云端管理

由 xasset 团队和 Unity 团队联手打造的快速资源分发流程和工具。>>> 前往体验

提示:使用 UOS CDN 的时候,可以把 Bundles 和 updateinfo.json 放到不同的存储桶。Bundles 下的数据无需使用 Badge 来处理内容分发,updateinfo.json 可以用 Badge 来处理开发测试或线上正式环境的内容分发。

用法

打包资源

1、使用 Assets>xasset>Create>Build 创建打包配置。

2、根据游戏的生命周期节点在 Build 配置中添加 Build Group。

3、使用 xasset>Generate Group Assets Menu Items 为创建的 Build 配置中的 Groups 生成 Assets 菜单。

4、使用 3 生成的菜单 Assets>Group To,在 Unity 的 Project 中选中资产文件或文件夹添加到对应的 Group 中。

5、使用 xasset>Build Bundles 对 Build 配置中包含的资产进行打包。

运行示例

对于社区版用户,xasset 提供了包含如下场景功能的示例:

  • Startup 初始化场景,不包含任何资产。
  • Splash 闪屏界面。
  • Opening Dialog 开场对话场景,增加一些仪式感。
  • CheckForUpdate 检查更新的场景,提供了资产版本更新检查,网络下载异常处理和资产热重载等功能的示例。
  • Menu 菜单场景,提供了局部场景内容更新等功能的演示。
  • LoadAsset 加载资产场景,提供了同步/异步资产加载,异步实例化,循环依赖加载,子资产加载,资产释放等功能的演示。
  • LoadAdditiveScene 加载附加场景,提供了附加场景加载、激活、卸载等功能的演示。
  • Download 下载场景,提供了单文件下载、暂停下载、恢复下载等功能的演示。

对于专业版用户,xasset 在社区版的基础上增加了以下功能的示例:

  • LoadRawAsset 加载原始资产场景,提供了使用 xasset 加载打包为原始二进制格式文件的功能演示。

和社区版不同,专业版可以优化细碎的散文件的IO次数,在更新资产的时候,底层会自动对资产数据进行检查,如果资产所在的分组中有启用二次加密打包,并且该分组的资产没有下载过,那么会优先下载二次加密打包后的资产组文件,反之,如果该分组的资产有下载过,那么只会下载细碎的散文件。

xasset 提供了以下几种运行示例的方式:

一、不打包运行

1、勾选 xasset>Play Mode>Fast Play Without Build

2、打开 Startup 场景让 Unity 进入播放模式。

二、打包运行不更新

1、使用 xasset>Build Bundles 打包示例的资产(如果已经打包过可以跳过)

2、勾选 xasset>Play Mode>Play Without Update

3、打开 Startup 场景让 Unity 进入播放模式。

三、打包运行并开启更新使用仿真下载

1、使用 xasset>Build Bundles 打包示例的资产。(如果已经打包过可以跳过)

2、勾选 xasset>Play Mode>Play With Update By Simulation

3、使用 xasset>Build Player Assets 构建安装包资产。选中一个 versions.json。 (如果已经打包过可以跳过)

4、打开 Startup 场景让 Unity 进入播放模式。

四、打包运行并开启更新使用真机模式(从CDN下载打包后的资产)

1、使用 xasset>Build Bundles 打包示例的资产。(如果已经打包过可以跳过)

2、勾选 xasset>Play Mode>Play With Update By Realtime

3、在 Settings 中配置好 CDN 的地址,并把打包后的资产部署到 CDN。

4、使用 xasset>Build Player Assets 构建安装包资产。选中一个 versions.json。 (如果已经打包过可以跳过)

5、打开 Startup 场景让 Unity 进入播放模式。

版本

阅读 技术规格 可以了解不同版本之间的差异。

文档

前往 xasset.cc 可以了解 xasset 的来龙去脉。

许可

请注意,xasset 具有特殊许可证,并且在某些情况下需要获得公司许可证。阅读 许可 文档以获取更多信息。

创作者

xasset 的主要创作者是:

另外,xasset 的广大用户也提供了不少有价值的参考,感谢大家的反馈和建议!我们会继续努力,为大家提供更好的产品和服务。

赞助商

成为 xasset 的赞助商可以在这里添加自己的链接,可以带图标或名字:

  • Miss_Lynn(人民币50000元)
  • mingjava(人民币5000元)
  • 马三小伙儿(人民币4800元)
  • 花花 (人民币3848元)
  • Jojohello(人民币3000元)

赞助商提供的资金将用来扶持更多有创造力的创作,期待未来有更多有潜力的产品的出现。

贡献者

为 xasset 提供好的建议或反馈,可以成为 xasset 的贡献者:

成为贡献者可以获得一定的声望,声望可以折现,声望和人民币的兑换比例是 1:20,也就是 1 点声望可以兑换 20 元人民币。

推荐框架

xasset's People

Contributors

mmdnb 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xasset's Issues

下载失败之后,自动retry有问题

偶现问题,有时候下载会失败,但是开启了自动retry,发现retry之后会导致bundle加载失败
image
如果一次性下载成功,没有出现retry则可以正常加载bundle

加载路径

var asset = Assets.Load("Assets\\xx\\Resources\\UI/fui.bytes", typeof(UnityEngine.Object));
asset.completed += delegate (Asset a) {};

路径必须这么写才能成功加载。而我希望是这样统一,比如

var asset = Assets.Load("Assets/xx/Resources/UI/fui.bytes", typeof(UnityEngine.Object));
asset.completed += delegate (Asset a) {};

或者

var asset = Assets.Load("Assets\\xx\\Resources\\UI\\fui.bytes", typeof(UnityEngine.Object));
asset.completed += delegate (Asset a) {};

关于 AsyncOperation 和 loadSceneAsync

我想用 AsyncOperation.allowSceneActivation 去控制scene的加载过场, 但是如果用xasset 的Assets.LoadSceneAsync 会返回 assetrequest,那应该怎么转成 AsyncOperation呢?

关于Plugins.XAsset.Assets.Unload接口的用法

感觉跟直接 asset.Release 的作用是一样的; 而且下图框中的代码应该也不会执行到, 因为_unusedAssets在 Update 函数中已经清空了, 也不会有其它地方往里添加元素.
QQ20190718-161324

BUG:配置丢失

现象:当在一处新的位置clone下工程后,配置信息(Rule和Manifest)丢失

复现方法:

关掉Unity Editor ,删掉已有工程的Library目录,然后重新打开编辑器,观察到配置信息丢失:
image


之前遇到类似的坑,猜测原因如下:
image

在没有Library时,Unity会先构建代码,这时候如果我们有在项目刚打开时候做“判断资源在不在,如果不在就创建”的操作时,由于Unity Editor还没有读取到配置文件, AssetDatabase会始终得不到资源。
此时执行创建操作,会覆盖原有资源

下载挂起bug

阅读代码发现,下载成功用的都是下标记录位置,假设同时下载3个文件.由于index2的文件比较小,马上下载完成了,此时选择挂起restart()
可能会出现0 和1 没下载,但是restart后,下标指向错误把.这里只是猜测.

关于官方文档里提到的Assets.GetDownloadSizeAsync(versions, assetContainer.GetAssets())接口

在例子文档中看到了这个接口:
// 查询 assetContainer.GetAssets() 返回的资源是否需要下载更新。
var getDownloadSizeAsync = Assets.GetDownloadSizeAsync(versions, assetContainer.GetAssets());
这个接口在代码中没有找到,请问这个是付费版的功能吗?assetContainer是主要用来做什么的?

之前的版本里有个根据清单获取更新大小的接口,新版本里貌似被取消了。

比分说我有100个关卡,每次进关卡之前都要看下资源是不是有更新。我目前是做了100个Build,类似于之前的清单文件。
每次进关卡之前,使用GetDownloadSizeAsync检查下这个build是不是有更新。
public static GetDownloadSizeRequest GetDownloadSizeAsync(string buildName)
{
var versions = ScriptableObject.CreateInstance<Versions>();
versions.data = Versions.data.Where(version => buildName.Equals(version.name)).ToList();
return GetDownloadSizeAsync(versions);
}

关于versions_vX.json文件的问题

如果有比较多的build的话,会出现versions_v1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.json这种奇怪的文件,建议调整下版本号的策略。因为我的项目中有几十个build,也不知道是什么原因,直接导致在用jenkins打包时,unity直接到后面就shutdown了~
我目前的做法是:
1)动态计算bundle data目录下的versions_vX.json的版本号;
2)bundle data不存在version_vX.json时使用versions_v1.json;
3)存在时,如果versions文件内的data部分和bundle cache中的一致则不更新版本文件依旧使用该版本;
4)如果不一致,则取最大版本号版本信息文件versions_vX.json的X+1作为新的版本号。
这样就不会出现这种奇怪的文件。

打包场景的问题

该工具不支持场景打包吗?
对包含有光照贴图或者navmesh数据的场景打包会报错
Cannot mark assets and scenes in one AssetBundle

unity下载bundle中,暂停游戏无法恢复下载bug

无论手机还是unity中,切换后台或者息屏OnApplicationFocus被调用,暂停恢复游戏后出现无法恢复下载,
观察代码隐约感觉有bug,如下:
public void Restart()
{
_startTime = Time.realtimeSinceStartup;
_lastTime = 0;
_started = true;
_downloadIndex = _finishedIndex;
var max = Math.Min(_downloads.Count, maxDownloads);
for (var i = _finishedIndex; i < max; i++)// 当已经下载数量超过 max ,这个for无法执行,_tostart add就为空.(猜测)
{
var item = _downloads[i];
_tostart.Add(item);
_downloadIndex++;
}
}

关于 sprite atlas late binding AB 包卸载时机的问题

作者你好!
项目UGUI使用了新版的 sprite atlas, 一个 UI 模块对应了一个 sprite atlas, 用一个 全局的SpriteAtlasLoader.cs负责 atlas 的加载;
根据官方文档的介绍, 要实现 late binding,得使用SpriteAtlasManager.atlasRequested; 但是并不知道这个 sprite atlas Asset 什么时候使用完毕, 那应该什么时候调用 Asset.Release呢?
11

提供LoadAssetWithSubAssets的支持

作者您好,我在使用过程中需要加载一个用multiple模式切分的sprite,得到一个包含切分好的sprite的array。但是这个功能框架里好像没有提供。xasset好像只用到了LoadAsset和LoadAssetAsync这两个函数,没有提供对LoadAssetWithSubAssets的支持,如果要加上这个功能的话应该放在哪里呢?

关于assetbundle name设置的疑惑

示例项目中有四个assetbundle name,分别是sprites、prefabs、scenes、textures,编译ab后,其中sprites对应的资源是Logo.png和Grids.png,但是选中这两个图片,右下角assetbundle name显示为none,点击右下角的remove unused names,也没有移除上面4个abname,请问这4个abname对应的资源,是在哪里设置的?

WebGL无法加载

NullReferenceException: A null value was found where an object instance was required.
UnityLoader.js:4 at Plugins.XAsset.Bundles.Load (System.String assetBundleName, Boolean isLoadingAssetBundleManifest, Boolean asyncMode) [0x00000] in :0
UnityLoader.js:4 at Plugins.XAsset.Bundles.Initialize (System.String path, System.String platform, System.Action onSuccess, System.Action1 onError) [0x00000] in <filename unknown>:0 UnityLoader.js:4 at Plugins.XAsset.Assets.Initialize (System.Action onSuccess, System.Action1 onError) [0x00000] in :0
UnityLoader.js:4 at AssetsInit.Start () [0x00000] in :0
UnityLoader.js:4
UnityLoader.js:4 (Filename: currently not available on il2cpp Line: -1)

Download分段下载问题

问题代码:

request.SetRequestHeader("Range", "bytes=" + len + "-" + maxlen);

应改为:
request.SetRequestHeader("Range", "bytes=" + len + "-" + (maxlen - 1));

或者干脆改为:
request.SetRequestHeader("Range", "bytes=" + len + "-");

详细参考:
https://www.cnblogs.com/OIMM/p/9144798.html

多说两句:
我觉得这个maxlen的真正意义是为了分段下载,避免一次下载内容长度过长,导致内存占用过高。希望作者可以重新梳理下逻辑。

关于增量更新

作者你好,
咨询一个问题
我有一个组TextureGroup,当我需要增量其中Texture 1时,是否需要增量整个TextureGroup完成更新呢?

Xasset是否支持类似Addressables的Check for Content Update Restrictions(检查内容更新限制)功能,只对修改的文件做增量更新?

as 热更

有考虑支持asset bundle 热更新吗?

分场景下载

初始包只有第一个场景,会热更新新, 玩家打过第一个场景就下载第二个场景, 第二个场景有更新的话也会热更新, 这个怎么做啊

Readme 链接失效了

例如文档和视频链接,麻烦有时间处理一下 或者 有其他链接吗?

xasset.editor.Initializer导致无法使用代码设置SimulationMode

Assets.SimulationMode = Settings.GetDefaultSettings().simulationMode;
Assets.OfflineMode = Settings.GetDefaultSettings().offlineMode;
if (Assets.SimulationMode)
{
    InitializeRequest.CreateHandler = EditorInitializeHandler.CreateInstance;
    AssetRequest.CreateHandler = EditorAssetHandler.CreateInstance;
    SceneRequest.CreateHandler = EditorSceneHandler.CreateInstance;
    References.GetFunc = Settings.GetDependencies;
    References.Enabled = true;
}

这里使用了Settings里读取的SimulationMode导致无法使用代码来设置
既然提供了初始化为什么这个里还需要放到AfterSceneLoad?

Android平台热更问题,Download使用WebRequest异常

打Android包在手机上测试,发现热更总是失败,打debug包发现,在创建WebRequest直接就异常了,捕捉到的异常信息也为null,很是奇怪

private WebRequest GetHttpWebRequest()
{
      var request = (HttpWebRequest) WebRequest.Create(info.url)
}

为什么切换场景后,实例化物体的地址会报错?

9b8caf588415babb289a8daf28a7d64

我在场景A实例化了一个Cube,但是切换到场景B,再切换到场景A,预设物的地址就会报错

// 加载 prefab
var path = "Assets/Prefabs/Cube.prefab";
var request = Asset.LoadAsync(path, typeof(GameObject));
yield return request;
var prefab = request.asset;
var go = Object.Instantiate(prefab);
// 回收 prefab,在回收前,需要先把 实例化的 go 销毁。
//Object.DestroyImmediate(go);
request.Release();

限制网速到100kb/s,下载超时问题

限制网速之后,点击同时下载多个group的任务,实际最大并行下载任务数(Download.MaxDownloads)是是默认的10个,下载下载着会出现超时或者没下载完的报错:
image

希望可以手动控制版本生效

现在versions.json 的生效在DownloadAsync()中 如果在bundles下载前使用到bundle中资源将会自动从cdn中下载
需要提供接口 可以在bundles下载完成后再生效新版资源

资源打包build bundles

在项目的文件夹下面Bundles/iOS/ 下面没有生成updateinfo.json 这个文件呀 BundlesCache/iOS目录下存在更新信息和版本json文件

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.