- 一个简单、高效、易扩展的 AssetBundle管理工具
- Editor、Runtime均支持同步、异步、委托、携程
- 支持各个模式切换(无需修改代码)
- 支持自定义资源加密
- 支持打包流程自定义(自定义分包、版本规划、结束流程、自定义标签)
- 包含本地资源服务器
- 支持快速版本切换,回退
- 支持资源模糊搜索
各个模式切换无需修改代码
- 0 编辑器模拟加载 (纯粹编辑器模拟)
- 1 纯粹的C#空包, (注意:本地不会有任何ab)
- 2 发布 正常流程包 (比模式1 多一个版本检查)
- 3 发布 游戏前期的体验包 (把资源拷贝到stream)
- 4 边玩边下载
- 5 先准备一部分,后续靠下载
| 模式/流程 | 编辑器模拟 | 纯C#空包 | 正常流程 | 前期的体验 | 边玩边下载 | 先准备一部分 |
打包 |
选择FastMode | ✔ | | | | | |
打包资源 | | ✔ | ✔ | ✔ | ✔ | ✔ |
拷贝资源到stream | | | | ✔ | | 按tag拷贝 |
上传资源到服务器 | | ✔ | ✔ | | ✔ | ✔ |
加载 |
设置AssetsSetting | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
拷贝资源到沙盒路径 | | | | ✔ | | ✔ |
版本检查 | | | ✔ | | 可选 | 可选 |
下载变化资源 | | | ✔ | | | 可选 |
初始化 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
正常加载 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
///写一个 class 继承于 AssetsSetting
public abstract class AssetsSetting
{
///下载的路径
protected virtual string GetBaseUrl() {}
///自定义 bundle 去哪里下载
public virtual string GetUrlByBundleName(string buildTarget, string bundleName){}
///自定义 版本文件 去哪里下载
public virtual string GetVersionUrl(string buildTarget){}
/// 文件比对方式
public virtual FileCompareType GetFileCheckType() {}
/// 下载等待
public virtual int GetWebRequestTimeout() {}
///资源加密方式
public virtual IAssetStreamEncrypt GetEncrypt() {}
///是否自动卸载
public virtual bool GetAutoUnloadBundle() {}
/// 如果本地没有是否需要保存文件
public virtual bool GetSaveBundlesWhenPlaying(){}
}
///自定义的资源设置
AssetsSetting set;
///要加载的资源的路径
string path;
///设置AssetsSetting
Assets.SetAssetsSetting(set);
///拷贝资源到沙盒路径
await Assets.CopyDLCFromSteam();
///版本检查,得到所有可用版本
var op = await Assets.VersionCheck();
///选择一个想要的版本和本地比较
var compare = await op.Compare(op.versions.Count - 1);
///下载需要更新的bundle
for (int i = 0; i < compare.add.Count; i++)
await Assets.DownLoadBundle(compare.add[i].name);
for (int i = 0; i < compare.change.Count; i++)
await Assets.DownLoadBundle(compare.change[i].name);
///初始化
///传入版本号,按照该版本号加载
///不传入版本号就会直接使用本地的版本,本地没有就会使用服务器最新版本
await Assets.InitAsync();
///正常加载
var asset = await Assets.LoadAssetAsync(path);
///获取要加载的资源
var sp = asset.GetAsset<Sprite>();
| | 参数 | 简介 |
Runtime |
Asset Mode |
Mode | 资源加载的模式(Normal/Fast) |
Simulated Asset Server |
Enable Server | 是否开启资源服务器 | |
Server Directory | 资源服务器的根路径 | |
Server Port | 资源服务器监听的端口 | |
Editor |
Shader Variant |
shaderVariantDirectory | shader变体保存的文件夹 | |
Sprite Atlas |
atlasPaths | 所有需要打包的图集的文件夹 | |
packSetting | 图集打包设置 | |
textureSetting | 图集打包图片设置 | |
PlatformSetting | 图集打包平台设置 | |
Build |
version | 这一次打包出去的带的版本号 | |
bundle size | 打包出来的最大的bundle 大小 | |
force rebuild | 强制重新打包 | |
ignore extend | 通关文件后缀排除不需要打包的文件 | |
build paths | 所有需要打包的文件夹 | |
Asset Build | 打包流程的个性化 | |
encrypt | 加密方式 | |
encrypt | 加密方式 | |
compress | 压缩格式 | |
Output Path | 输出路径 | |
Build Target | 打包的平台 | |
- ChangeLog 打包报告
- Assets 需要打包的所有资源的预览
- Bundles 预览 打包出来的bundle
- AssetLife 资源运行时的使用情况
- 1 打开窗口 [MenuItem("Tools/WooAsset/Window")]
- 2 设置好打包相关参数
- 3 点击 [MenuItem("Tools/WooAsset/Bundle/Build")]
//个性化打包流程
public interface IAssetBuild
{
//自定义版本规则
string GetVersion(string settingVersion, string lastVersion);
//自定义 资源 Tag (可以按照tag加载一组资源)
IReadOnlyList<string> GetTags(EditorAssetData info);
// 自定义资源分组
void Create(AssetTagCollection tags,List<EditorAssetData> assets, Dictionary<EditorAssetData, List<EditorAssetData>> dpsDic, List<BundleGroup> result);
//自定义打包结束之后需要执行的任务
//比如输出一些Log、上传文件到服务器等
List<BuildTask> GetPipelineFinishTasks();
}
//个性化加密
public interface IAssetStreamEncrypt
{
void Encode(string bundleName, byte[] buffer, int offset, int count);
void Decode(string bundleName, byte[] buffer, int offset, int count);
}
Extra
- 设置好shaderVariantDirectory
- 点击 [MenuItem("Tools/WooAsset/Help/ShaderVariant")]
- 设置好atlasPaths,packSetting,textureSetting,PlatformSetting
- 点击 [MenuItem("Tools/WooAsset/Help/SpriteAtlas")]
- 设置好 Enable Server ,Server Directory ,Server Port
- 注意
- 资源服务器只会在运行状态且NormalMode状态下打开
- 如果资源服务器的配置不为空,在打包资源的时候会把输出文件拷贝过去
public class AssetsSearch
{
///搜索所有名字包含 assetName ,并且包含所有 tag 的资源
public static IReadOnlyList<string> IntersectNameAndTag(string assetName, params string[] tags){}
///搜索所有包含所有 tag 的资源
public static IReadOnlyList<string> IntersectTag(params string[] tags){}
///搜索所有名字或者 tag 包含 nameOrTags 的并集
public static IReadOnlyList<string> Union(params string[] nameOrTags){}
///搜索所有 tag 包含 tags 的并集
public static IReadOnlyList<string> UnionTag(params string[] tags){}
///搜索所有名字 包含 names 的并集
public static IReadOnlyList<string> UnionName(params string[] names){}
///搜索所有名字或者 tag 包含 tags 且名字包含 assetName 的并集
public static IReadOnlyList<string> UnionNameAndTag(string assetName, params string[] tags){}
}