Compare commits

..

37 Commits

Author SHA1 Message Date
何冠峰
d712a00458 Update .gitignore 2026-05-09 17:06:55 +08:00
何冠峰
c14244b2cf Update copyright year for TuYoo Games 2026-04-21 10:15:21 +08:00
何冠峰
4b6a8ca406 Update CHANGELOG.md 2025-12-04 18:30:51 +08:00
何冠峰
c8e45a6cae Update package.json 2025-12-04 18:30:46 +08:00
何冠峰
1fbc9d26a6 style : 修改注释说明 2025-12-04 18:16:40 +08:00
何冠峰
abb087b02e fix #700 2025-12-03 10:14:55 +08:00
何冠峰
aeaf03011f Merge pull request #694 from fslse/ClearBundleFilesByLocations
ClearBundleFilesByLocations
2025-11-22 09:39:21 +08:00
DESKTOP-FIVME83\Administrator
78d24ad3a6 清理指定地址的文件
(cherry picked from commit 41a1973be8f11c1629b334238546556f54101c35)
2025-11-21 16:29:21 +08:00
何冠峰
aab2c4625e feat #671 2025-11-13 15:54:08 +08:00
何冠峰
079ef75605 feat #682 2025-11-13 11:51:28 +08:00
何冠峰
75881b55f6 fix #683 2025-11-12 18:41:17 +08:00
何冠峰
2020c7d508 Merge pull request #687 from OpenLBE/dev
Localize UI strings to English in editor windows
2025-11-12 09:58:46 +08:00
lark
088d939346 Localize UI strings to English in editor windows
Replaced Chinese UI strings with English equivalents in various editor windows and dialogs, including AssetArtReporter, AssetArtScanner, and AssetBundleBuilder viewers. This improves accessibility for non-Chinese users and standardizes the language across the editor tools.
2025-11-11 14:43:49 +08:00
何冠峰
fa50e91c9f fix #684 2025-11-07 16:37:26 +08:00
何冠峰
2e7b992a4b Merge branch 'dev' of https://github.com/tuyoogame/YooAsset into dev 2025-11-07 16:23:54 +08:00
何冠峰
29fbbd97ff fix #678 2025-11-07 16:23:51 +08:00
何冠峰
abb150e33f Merge pull request #676 from coffeeofnosugar/dev
修复UniTask的扩展包问题
2025-11-04 15:59:20 +08:00
coffee
78e20f434e 修复UniTask的扩展包问题
Unity版本: 2021.3.45f1
yooasset版本:2.3.17
少了一个下划线
2025-11-01 23:24:03 +08:00
何冠峰
304222b788 Update EditorDefine.cs 2025-10-31 17:03:27 +08:00
何冠峰
101236db8a Update CHANGELOG.md 2025-10-30 20:49:54 +08:00
何冠峰
37de007b3f Update package.json 2025-10-30 20:49:51 +08:00
何冠峰
d570ba8d74 fix #661 2025-10-30 18:31:06 +08:00
何冠峰
2a956099ae 移除程序集里冗余引用 2025-10-30 11:25:21 +08:00
何冠峰
74037a5a29 fix #670 2025-10-28 19:16:51 +08:00
何冠峰
861f850a32 Merge branch 'dev' of https://github.com/tuyoogame/YooAsset into dev 2025-10-27 17:42:32 +08:00
何冠峰
8b1b5f988a fix #669 2025-10-27 17:42:29 +08:00
何冠峰
efafd1173f Merge pull request #667 from yueh0607/fix/chinese-input-textfield
Fix Chinese input issue in TextField by enabling isDelayed
2025-10-27 09:50:52 +08:00
yzp
03e49ff1fb Fix Chinese input issue in TextField by enabling isDelayed
Fixed an issue where Chinese IME candidate characters were being incorrectly inserted into TextFields (PackageDesc, GroupDesc, etc.), causing garbled text like "默认包baobabmo'rmom".

The fix sets `isDelayed = true` on all TextFields in AssetBundleCollectorWindow, which defers value change callbacks until the user completes input (by pressing Enter or losing focus), thus avoiding interference from IME candidate characters.

Modified TextFields:
- PackageName
- PackageDesc
- GroupName
- GroupDesc
- GroupTags
- User Data (collector)
- Asset Tags (collector)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-26 00:01:48 +08:00
何冠峰
ea34be1f00 fix #646 2025-10-15 17:27:08 +08:00
何冠峰
831a9981e3 Update SearchCacheFilesOperation.cs 2025-10-14 16:58:06 +08:00
何冠峰
9de4aaa658 Merge pull request #656 from AlanLiu90/dev
优化SearchCacheFilesOperation
2025-10-14 16:43:07 +08:00
Alan Liu
3579a23bd5 优化SearchCacheFilesOperation 2025-10-13 18:55:49 +08:00
何冠峰
c865ddc7f2 feat #650 2025-10-10 10:20:02 +08:00
何冠峰
0bde506aec feat #648 2025-10-09 19:10:26 +08:00
何冠峰
15005b3d30 sample : 程序集宏支持
YOO_MACRO_SUPPORT开启扩展代码
2025-10-09 19:07:03 +08:00
何冠峰
4caf733ac6 fix #652 2025-10-09 16:17:44 +08:00
何冠峰
014b17f5cb feat #643 2025-10-09 16:14:31 +08:00
147 changed files with 1288 additions and 556 deletions

5
.gitignore vendored
View File

@@ -15,7 +15,9 @@
/Bundles/ /Bundles/
/ProjectSettings/ /ProjectSettings/
/App/ /App/
/yoo/ /yoo/
/Assets/Docs
/Assets/Docs.meta
/Assets/StreamingAssets /Assets/StreamingAssets
/Assets/StreamingAssets.meta /Assets/StreamingAssets.meta
/Assets/Samples /Assets/Samples
@@ -70,6 +72,7 @@ sysinfo.txt
# Builds # Builds
*.apk *.apk
*.unitypackage *.unitypackage
*.zip
# Crashlytics generated file # Crashlytics generated file
crashlytics-build.properties crashlytics-build.properties

View File

@@ -2,6 +2,115 @@
All notable changes to this package will be documented in this file. All notable changes to this package will be documented in this file.
## [2.3.18] - 2025-12-04
### Fixed
- (#676) 修复了UniTask扩展包的编译报错。
- (#684) 修复了资源配置窗口Group列表数量过多的时候添加和删除按钮会变小的问题。
- (#700) [**严重**] 修复了小游戏扩展库的下载器再失败后重试逻辑不起效的问题。
### Added
- (#683) 新增了内置文件系统类初始化参数UNPACK_FILE_SYSTEM_ROOT
```csharp
class FileSystemParametersDefine
{
// 指定解压文件的根目录
public const string UNPACK_FILE_SYSTEM_ROOT = "UNPACK_FILE_SYSTEM_ROOT";
}
```
- (#682) 原生文件构建管线新增构建参数IncludePathInHash
```csharp
class RawFileBuildParameters : BuildParameters
{
/// <summary>
/// 文件哈希值计算包含路径信息
/// </summary>
public bool IncludePathInHash = false;
}
```
- (#671) 新增扩展工具,可以生成空的包裹内置资源目录文件。
```csharp
public class CreateEmptyCatalogWindow : EditorWindow
```
- (#694) 新增资源清理方式ClearBundleFilesByLocations
```csharp
public enum EFileClearMode
{
/// <summary>
/// 清理指定地址的文件
/// 说明需要指定参数可选string, string[], List<string>
/// </summary>
ClearBundleFilesByLocations,
}
```
## [2.3.17] - 2025-10-30
**非常重要**:修复了#627优化导致的资源清单CRC值为空的问题。
该问题会导致下载的损坏文件验证通过。
影响范围v2.3.15版本v2.3.16版本。
**非常重要**(#661) 修复了Package销毁过程中遇到正在加载的AssetBundle会导致无法卸载的问题。
该问题是偶现引擎会提示AssetBundle已经加载无法加载新的文件导致资源对象加载失败
影响范围:所有版本!
### Fixed
- (#645) 修复了着色器变种收集工具,在极端情况下变种收集不完整的问题。
- (#646) 修复了EditorSimulateMode模式下开启模拟下载tag不生效的问题。
- (#667) 修复了所有编辑器窗口针对中文IME的输入问题。
- (#670) 修复了Catalog文件生成过程中白名单未考虑自定义清单前缀名。
### Improvements
- 重构并统一了资源清单的反序列化逻辑。
- (#650) 解决互相依赖的资源包无法卸载的问题。需要开启宏定义YOOASSET_EXPERIMENTAL
- (#655) 优化了初始化的时候缓存文件搜索效率。安卓平台性能提升1倍IOS平台性能提升3倍。
### Added
- (#643) 新增构建参数,可以节省资源清单运行时内存
```csharp
class ScriptableBuildParameters
{
/// <summary>
/// 使用可寻址地址代替资源路径
/// 说明:开启此项可以节省运行时清单占用的内存!
/// </summary>
public bool ReplaceAssetPathWithAddress = false;
}
```
- (#648) 新增初始化参数,可以自动释放引用计数为零的资源包
```csharp
class InitializeParameters
{
/// <summary>
/// 当资源引用计数为零的时候自动释放资源包
/// </summary>
public bool AutoUnloadBundleWhenUnused = false;
}
```
### Changed
- 程序集宏定义代码转移到扩展工程。参考MacroSupport文件夹。
## [2.3.16] - 2025-09-17 ## [2.3.16] - 2025-09-17
### Improvements ### Improvements

View File

@@ -261,14 +261,14 @@ namespace YooAsset.Editor
catch (System.Exception e) catch (System.Exception e)
{ {
_reportCombiner = null; _reportCombiner = null;
_titleLabel.text = "导入报告失败!"; _titleLabel.text = "Failed to import report!";
_descLabel.text = e.Message; _descLabel.text = e.Message;
UnityEngine.Debug.LogError(e.StackTrace); UnityEngine.Debug.LogError(e.StackTrace);
} }
} }
private void FixAllBtn_clicked() private void FixAllBtn_clicked()
{ {
if (EditorUtility.DisplayDialog("提示", "修复全部资源(排除白名单和隐藏元素)", "Yes", "No")) if (EditorUtility.DisplayDialog("Info", "Fix all resources (excluding whitelist and hidden elements)", "Yes", "No"))
{ {
if (_reportCombiner != null) if (_reportCombiner != null)
_reportCombiner.FixAll(); _reportCombiner.FixAll();
@@ -276,7 +276,7 @@ namespace YooAsset.Editor
} }
private void FixSelectBtn_clicked() private void FixSelectBtn_clicked()
{ {
if (EditorUtility.DisplayDialog("提示", "修复勾选资源(包含白名单和隐藏元素)", "Yes", "No")) if (EditorUtility.DisplayDialog("Info", "Fix selected resources (including whitelist and hidden elements)", "Yes", "No"))
{ {
if (_reportCombiner != null) if (_reportCombiner != null)
_reportCombiner.FixSelect(); _reportCombiner.FixSelect();
@@ -302,7 +302,7 @@ namespace YooAsset.Editor
} }
private void ExportFilesBtn_clicked() private void ExportFilesBtn_clicked()
{ {
string selectFolderPath = EditorUtility.OpenFolderPanel("导入所有选中资源", EditorTools.GetProjectPath(), string.Empty); string selectFolderPath = EditorUtility.OpenFolderPanel("Export all selected resources", EditorTools.GetProjectPath(), string.Empty);
if (string.IsNullOrEmpty(selectFolderPath) == false) if (string.IsNullOrEmpty(selectFolderPath) == false)
{ {
if (_reportCombiner != null) if (_reportCombiner != null)

View File

@@ -240,7 +240,7 @@ namespace YooAsset.Editor
} }
private void ScanAllBtn_clicked() private void ScanAllBtn_clicked()
{ {
if (EditorUtility.DisplayDialog("提示", $"开始全面扫描!", "Yes", "No")) if (EditorUtility.DisplayDialog("Info", $"Start full scan!", "Yes", "No"))
{ {
string searchKeyWord = _scannerSearchField.value; string searchKeyWord = _scannerSearchField.value;
AssetArtScannerSettingData.ScanAll(searchKeyWord); AssetArtScannerSettingData.ScanAll(searchKeyWord);
@@ -248,7 +248,7 @@ namespace YooAsset.Editor
} }
else else
{ {
Debug.LogWarning("全面扫描已经取消"); Debug.LogWarning("Full scan has been canceled.");
} }
} }
private void ScanBtn_clicked() private void ScanBtn_clicked()

View File

@@ -22,7 +22,7 @@ namespace YooAsset.Editor
/// </summary> /// </summary>
public static string GetStreamingAssetsRoot() public static string GetStreamingAssetsRoot()
{ {
return YooAssetSettingsData.GetYooDefaultBuiltinRoot(); return YooAssetSettingsData.GetYooDefaultBuildinRoot();
} }
} }
} }

View File

@@ -43,28 +43,28 @@ namespace YooAsset.Editor
EditorPrefs.SetInt(key, (int)fileNameStyle); EditorPrefs.SetInt(key, (int)fileNameStyle);
} }
// EBuiltinFileCopyOption // EBuildinFileCopyOption
public static EBuiltinFileCopyOption GetPackageBuiltinFileCopyOption(string packageName, string buildPipeline) public static EBuildinFileCopyOption GetPackageBuildinFileCopyOption(string packageName, string buildPipeline)
{ {
string key = $"{Application.productName}_{packageName}_{buildPipeline}_{nameof(EBuiltinFileCopyOption)}"; string key = $"{Application.productName}_{packageName}_{buildPipeline}_{nameof(EBuildinFileCopyOption)}";
return (EBuiltinFileCopyOption)EditorPrefs.GetInt(key, (int)EBuiltinFileCopyOption.None); return (EBuildinFileCopyOption)EditorPrefs.GetInt(key, (int)EBuildinFileCopyOption.None);
} }
public static void SetPackageBuiltinFileCopyOption(string packageName, string buildPipeline, EBuiltinFileCopyOption builtinFileCopyOption) public static void SetPackageBuildinFileCopyOption(string packageName, string buildPipeline, EBuildinFileCopyOption buildinFileCopyOption)
{ {
string key = $"{Application.productName}_{packageName}_{buildPipeline}_{nameof(EBuiltinFileCopyOption)}"; string key = $"{Application.productName}_{packageName}_{buildPipeline}_{nameof(EBuildinFileCopyOption)}";
EditorPrefs.SetInt(key, (int)builtinFileCopyOption); EditorPrefs.SetInt(key, (int)buildinFileCopyOption);
} }
// BuildFileCopyParams // BuildFileCopyParams
public static string GetPackageBuiltinFileCopyParams(string packageName, string buildPipeline) public static string GetPackageBuildinFileCopyParams(string packageName, string buildPipeline)
{ {
string key = $"{Application.productName}_{packageName}_{buildPipeline}_BuildFileCopyParams"; string key = $"{Application.productName}_{packageName}_{buildPipeline}_BuildFileCopyParams";
return EditorPrefs.GetString(key, string.Empty); return EditorPrefs.GetString(key, string.Empty);
} }
public static void SetPackageBuiltinFileCopyParams(string packageName, string buildPipeline, string builtinFileCopyParams) public static void SetPackageBuildinFileCopyParams(string packageName, string buildPipeline, string buildinFileCopyParams)
{ {
string key = $"{Application.productName}_{packageName}_{buildPipeline}_BuildFileCopyParams"; string key = $"{Application.productName}_{packageName}_{buildPipeline}_BuildFileCopyParams";
EditorPrefs.SetString(key, builtinFileCopyParams); EditorPrefs.SetString(key, buildinFileCopyParams);
} }
// EncyptionServicesClassName // EncyptionServicesClassName

View File

@@ -17,15 +17,15 @@ namespace YooAsset.Editor
{ {
var buildParameters = new EditorSimulateBuildParameters(); var buildParameters = new EditorSimulateBuildParameters();
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
buildParameters.BuiltinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = EBuildPipeline.EditorSimulateBuildPipeline.ToString(); buildParameters.BuildPipeline = EBuildPipeline.EditorSimulateBuildPipeline.ToString();
buildParameters.BuildBundleType = (int)EBuildBundleType.VirtualBundle; buildParameters.BuildBundleType = (int)EBuildBundleType.VirtualBundle;
buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget; buildParameters.BuildTarget = EditorUserBuildSettings.activeBuildTarget;
buildParameters.PackageName = packageName; buildParameters.PackageName = packageName;
buildParameters.PackageVersion = "Simulate"; buildParameters.PackageVersion = "Simulate";
buildParameters.FileNameStyle = EFileNameStyle.HashName; buildParameters.FileNameStyle = EFileNameStyle.HashName;
buildParameters.BuiltinFileCopyOption = EBuiltinFileCopyOption.None; buildParameters.BuildinFileCopyOption = EBuildinFileCopyOption.None;
buildParameters.BuiltinFileCopyParams = string.Empty; buildParameters.BuildinFileCopyParams = string.Empty;
buildParameters.UseAssetDependencyDB = true; buildParameters.UseAssetDependencyDB = true;
var pipeline = new EditorSimulateBuildPipeline(); var pipeline = new EditorSimulateBuildPipeline();

View File

@@ -106,7 +106,27 @@ namespace YooAsset.Editor
/// </summary> /// </summary>
public string[] GetAllPackAssetPaths() public string[] GetAllPackAssetPaths()
{ {
return AllPackAssets.Select(t => t.AssetInfo.AssetPath).ToArray(); List<string> results = new List<string>(AllPackAssets.Count);
for (int i = 0; i < AllPackAssets.Count; i++)
{
var packAsset = AllPackAssets[i];
results.Add(packAsset.AssetInfo.AssetPath);
}
return results.ToArray();
}
/// <summary>
/// 获取构建的资源可寻址列表
/// </summary>
public string[] GetAllPackAssetAddress()
{
List<string> results = new List<string>(AllPackAssets.Count);
for (int i = 0; i < AllPackAssets.Count; i++)
{
var packAsset = AllPackAssets[i];
results.Add(packAsset.Address);
}
return results.ToArray();
} }
/// <summary> /// <summary>
@@ -153,13 +173,15 @@ namespace YooAsset.Editor
/// <summary> /// <summary>
/// 创建AssetBundleBuild类 /// 创建AssetBundleBuild类
/// </summary> /// </summary>
public UnityEditor.AssetBundleBuild CreatePipelineBuild() public UnityEditor.AssetBundleBuild CreatePipelineBuild(bool replaceAssetPathWithAddress)
{ {
// 注意我们不再支持AssetBundle的变种机制 // 注意我们不再支持AssetBundle的变种机制
AssetBundleBuild build = new AssetBundleBuild(); AssetBundleBuild build = new AssetBundleBuild();
build.assetBundleName = BundleName; build.assetBundleName = BundleName;
build.assetBundleVariant = string.Empty; build.assetBundleVariant = string.Empty;
build.assetNames = GetAllPackAssetPaths(); build.assetNames = GetAllPackAssetPaths();
if (replaceAssetPathWithAddress)
build.addressableNames = GetAllPackAssetAddress();
return build; return build;
} }

View File

@@ -96,12 +96,12 @@ namespace YooAsset.Editor
/// <summary> /// <summary>
/// 获取构建管线里需要的数据 /// 获取构建管线里需要的数据
/// </summary> /// </summary>
public UnityEditor.AssetBundleBuild[] GetPipelineBuilds() public UnityEditor.AssetBundleBuild[] GetPipelineBuilds(bool replaceAssetPathWithAddres)
{ {
List<UnityEditor.AssetBundleBuild> builds = new List<UnityEditor.AssetBundleBuild>(_bundleInfoDic.Count); List<UnityEditor.AssetBundleBuild> builds = new List<UnityEditor.AssetBundleBuild>(_bundleInfoDic.Count);
foreach (var bundleInfo in _bundleInfoDic.Values) foreach (var bundleInfo in _bundleInfoDic.Values)
{ {
builds.Add(bundleInfo.CreatePipelineBuild()); builds.Add(bundleInfo.CreatePipelineBuild(replaceAssetPathWithAddres));
} }
return builds.ToArray(); return builds.ToArray();
} }

View File

@@ -19,7 +19,7 @@ namespace YooAsset.Editor
/// <summary> /// <summary>
/// 内置文件的根目录 /// 内置文件的根目录
/// </summary> /// </summary>
public string BuiltinFileRoot; public string BuildinFileRoot;
/// <summary> /// <summary>
/// 构建管线名称 /// 构建管线名称
@@ -86,12 +86,12 @@ namespace YooAsset.Editor
/// <summary> /// <summary>
/// 内置文件的拷贝选项 /// 内置文件的拷贝选项
/// </summary> /// </summary>
public EBuiltinFileCopyOption BuiltinFileCopyOption = EBuiltinFileCopyOption.None; public EBuildinFileCopyOption BuildinFileCopyOption = EBuildinFileCopyOption.None;
/// <summary> /// <summary>
/// 内置文件的拷贝参数 /// 内置文件的拷贝参数
/// </summary> /// </summary>
public string BuiltinFileCopyParams; public string BuildinFileCopyParams;
/// <summary> /// <summary>
/// 资源包加密服务类 /// 资源包加密服务类
@@ -111,7 +111,7 @@ namespace YooAsset.Editor
private string _pipelineOutputDirectory = string.Empty; private string _pipelineOutputDirectory = string.Empty;
private string _packageOutputDirectory = string.Empty; private string _packageOutputDirectory = string.Empty;
private string _packageRootDirectory = string.Empty; private string _packageRootDirectory = string.Empty;
private string _builtinRootDirectory = string.Empty; private string _buildinRootDirectory = string.Empty;
/// <summary> /// <summary>
/// 检测构建参数是否合法 /// 检测构建参数是否合法
@@ -136,9 +136,9 @@ namespace YooAsset.Editor
string message = BuildLogger.GetErrorMessage(ErrorCode.BuildOutputRootIsNullOrEmpty, "Build output root is null or empty !"); string message = BuildLogger.GetErrorMessage(ErrorCode.BuildOutputRootIsNullOrEmpty, "Build output root is null or empty !");
throw new Exception(message); throw new Exception(message);
} }
if (string.IsNullOrEmpty(BuiltinFileRoot)) if (string.IsNullOrEmpty(BuildinFileRoot))
{ {
string message = BuildLogger.GetErrorMessage(ErrorCode.BuiltinFileRootIsNullOrEmpty, "Builtin file root is null or empty !"); string message = BuildLogger.GetErrorMessage(ErrorCode.BuildinFileRootIsNullOrEmpty, "Buildin file root is null or empty !");
throw new Exception(message); throw new Exception(message);
} }
if (string.IsNullOrEmpty(BuildPipeline)) if (string.IsNullOrEmpty(BuildPipeline))
@@ -210,13 +210,13 @@ namespace YooAsset.Editor
/// <summary> /// <summary>
/// 获取内置资源的根目录 /// 获取内置资源的根目录
/// </summary> /// </summary>
public virtual string GetBuiltinRootDirectory() public virtual string GetBuildinRootDirectory()
{ {
if (string.IsNullOrEmpty(_builtinRootDirectory)) if (string.IsNullOrEmpty(_buildinRootDirectory))
{ {
_builtinRootDirectory = $"{BuiltinFileRoot}/{PackageName}"; _buildinRootDirectory = $"{BuildinFileRoot}/{PackageName}";
} }
return _builtinRootDirectory; return _buildinRootDirectory;
} }
} }
} }

View File

@@ -55,9 +55,9 @@ namespace YooAsset.Editor
/// <summary> /// <summary>
/// 获取内置资源的根目录 /// 获取内置资源的根目录
/// </summary> /// </summary>
public string GetBuiltinRootDirectory() public string GetBuildinRootDirectory()
{ {
return Parameters.GetBuiltinRootDirectory(); return Parameters.GetBuildinRootDirectory();
} }
} }
} }

View File

@@ -6,30 +6,30 @@ using UnityEngine;
namespace YooAsset.Editor namespace YooAsset.Editor
{ {
public class TaskCopyBuiltinFiles public class TaskCopyBuildinFiles
{ {
/// <summary> /// <summary>
/// 拷贝首包资源文件 /// 拷贝首包资源文件
/// </summary> /// </summary>
internal void CopyBuiltinFilesToStreaming(BuildParametersContext buildParametersContext, PackageManifest manifest) internal void CopyBuildinFilesToStreaming(BuildParametersContext buildParametersContext, PackageManifest manifest)
{ {
EBuiltinFileCopyOption copyOption = buildParametersContext.Parameters.BuiltinFileCopyOption; EBuildinFileCopyOption copyOption = buildParametersContext.Parameters.BuildinFileCopyOption;
string packageOutputDirectory = buildParametersContext.GetPackageOutputDirectory(); string packageOutputDirectory = buildParametersContext.GetPackageOutputDirectory();
string builtinRootDirectory = buildParametersContext.GetBuiltinRootDirectory(); string buildinRootDirectory = buildParametersContext.GetBuildinRootDirectory();
string buildPackageName = buildParametersContext.Parameters.PackageName; string buildPackageName = buildParametersContext.Parameters.PackageName;
string buildPackageVersion = buildParametersContext.Parameters.PackageVersion; string buildPackageVersion = buildParametersContext.Parameters.PackageVersion;
// 清空内置文件的目录 // 清空内置文件的目录
if (copyOption == EBuiltinFileCopyOption.ClearAndCopyAll || copyOption == EBuiltinFileCopyOption.ClearAndCopyByTags) if (copyOption == EBuildinFileCopyOption.ClearAndCopyAll || copyOption == EBuildinFileCopyOption.ClearAndCopyByTags)
{ {
EditorTools.ClearFolder(builtinRootDirectory); EditorTools.ClearFolder(buildinRootDirectory);
} }
// 拷贝补丁清单文件 // 拷贝补丁清单文件
{ {
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(buildPackageName, buildPackageVersion); string fileName = YooAssetSettingsData.GetManifestBinaryFileName(buildPackageName, buildPackageVersion);
string sourcePath = $"{packageOutputDirectory}/{fileName}"; string sourcePath = $"{packageOutputDirectory}/{fileName}";
string destPath = $"{builtinRootDirectory}/{fileName}"; string destPath = $"{buildinRootDirectory}/{fileName}";
EditorTools.CopyFile(sourcePath, destPath, true); EditorTools.CopyFile(sourcePath, destPath, true);
} }
@@ -37,7 +37,7 @@ namespace YooAsset.Editor
{ {
string fileName = YooAssetSettingsData.GetPackageHashFileName(buildPackageName, buildPackageVersion); string fileName = YooAssetSettingsData.GetPackageHashFileName(buildPackageName, buildPackageVersion);
string sourcePath = $"{packageOutputDirectory}/{fileName}"; string sourcePath = $"{packageOutputDirectory}/{fileName}";
string destPath = $"{builtinRootDirectory}/{fileName}"; string destPath = $"{buildinRootDirectory}/{fileName}";
EditorTools.CopyFile(sourcePath, destPath, true); EditorTools.CopyFile(sourcePath, destPath, true);
} }
@@ -45,38 +45,38 @@ namespace YooAsset.Editor
{ {
string fileName = YooAssetSettingsData.GetPackageVersionFileName(buildPackageName); string fileName = YooAssetSettingsData.GetPackageVersionFileName(buildPackageName);
string sourcePath = $"{packageOutputDirectory}/{fileName}"; string sourcePath = $"{packageOutputDirectory}/{fileName}";
string destPath = $"{builtinRootDirectory}/{fileName}"; string destPath = $"{buildinRootDirectory}/{fileName}";
EditorTools.CopyFile(sourcePath, destPath, true); EditorTools.CopyFile(sourcePath, destPath, true);
} }
// 拷贝文件列表(所有文件) // 拷贝文件列表(所有文件)
if (copyOption == EBuiltinFileCopyOption.ClearAndCopyAll || copyOption == EBuiltinFileCopyOption.OnlyCopyAll) if (copyOption == EBuildinFileCopyOption.ClearAndCopyAll || copyOption == EBuildinFileCopyOption.OnlyCopyAll)
{ {
foreach (var packageBundle in manifest.BundleList) foreach (var packageBundle in manifest.BundleList)
{ {
string sourcePath = $"{packageOutputDirectory}/{packageBundle.FileName}"; string sourcePath = $"{packageOutputDirectory}/{packageBundle.FileName}";
string destPath = $"{builtinRootDirectory}/{packageBundle.FileName}"; string destPath = $"{buildinRootDirectory}/{packageBundle.FileName}";
EditorTools.CopyFile(sourcePath, destPath, true); EditorTools.CopyFile(sourcePath, destPath, true);
} }
} }
// 拷贝文件列表(带标签的文件) // 拷贝文件列表(带标签的文件)
if (copyOption == EBuiltinFileCopyOption.ClearAndCopyByTags || copyOption == EBuiltinFileCopyOption.OnlyCopyByTags) if (copyOption == EBuildinFileCopyOption.ClearAndCopyByTags || copyOption == EBuildinFileCopyOption.OnlyCopyByTags)
{ {
string[] tags = buildParametersContext.Parameters.BuiltinFileCopyParams.Split(';'); string[] tags = buildParametersContext.Parameters.BuildinFileCopyParams.Split(';');
foreach (var packageBundle in manifest.BundleList) foreach (var packageBundle in manifest.BundleList)
{ {
if (packageBundle.HasTag(tags) == false) if (packageBundle.HasTag(tags) == false)
continue; continue;
string sourcePath = $"{packageOutputDirectory}/{packageBundle.FileName}"; string sourcePath = $"{packageOutputDirectory}/{packageBundle.FileName}";
string destPath = $"{builtinRootDirectory}/{packageBundle.FileName}"; string destPath = $"{buildinRootDirectory}/{packageBundle.FileName}";
EditorTools.CopyFile(sourcePath, destPath, true); EditorTools.CopyFile(sourcePath, destPath, true);
} }
} }
// 刷新目录 // 刷新目录
AssetDatabase.Refresh(); AssetDatabase.Refresh();
BuildLogger.Log($"Builtin files copy complete: {builtinRootDirectory}"); BuildLogger.Log($"Buildin files copy complete: {buildinRootDirectory}");
} }
} }
} }

View File

@@ -12,10 +12,10 @@ namespace YooAsset.Editor
/// </summary> /// </summary>
internal void CreateCatalogFile(BuildParametersContext buildParametersContext) internal void CreateCatalogFile(BuildParametersContext buildParametersContext)
{ {
string builtinRootDirectory = buildParametersContext.GetBuiltinRootDirectory(); string buildinRootDirectory = buildParametersContext.GetBuildinRootDirectory();
string buildPackageName = buildParametersContext.Parameters.PackageName; string buildPackageName = buildParametersContext.Parameters.PackageName;
var manifestServices = buildParametersContext.Parameters.ManifestRestoreServices; var manifestServices = buildParametersContext.Parameters.ManifestRestoreServices;
CatalogTools.CreateCatalogFile(manifestServices, buildPackageName, builtinRootDirectory); CatalogTools.CreateCatalogFile(manifestServices, buildPackageName, buildinRootDirectory);
// 刷新目录 // 刷新目录
AssetDatabase.Refresh(); AssetDatabase.Refresh();

View File

@@ -19,7 +19,7 @@ namespace YooAsset.Editor
/// <summary> /// <summary>
/// 创建补丁清单文件到输出目录 /// 创建补丁清单文件到输出目录
/// </summary> /// </summary>
protected void CreateManifestFile(bool processBundleDepends, bool processBundleTags, BuildContext context) protected void CreateManifestFile(bool processBundleDepends, bool processBundleTags, bool replaceAssetPathWithAddress, BuildContext context)
{ {
var buildMapContext = context.GetContextObject<BuildMapContext>(); var buildMapContext = context.GetContextObject<BuildMapContext>();
var buildParametersContext = context.GetContextObject<BuildParametersContext>(); var buildParametersContext = context.GetContextObject<BuildParametersContext>();
@@ -36,6 +36,7 @@ namespace YooAsset.Editor
manifest.SupportExtensionless = buildMapContext.Command.SupportExtensionless; manifest.SupportExtensionless = buildMapContext.Command.SupportExtensionless;
manifest.LocationToLower = buildMapContext.Command.LocationToLower; manifest.LocationToLower = buildMapContext.Command.LocationToLower;
manifest.IncludeAssetGUID = buildMapContext.Command.IncludeAssetGUID; manifest.IncludeAssetGUID = buildMapContext.Command.IncludeAssetGUID;
manifest.ReplaceAssetPathWithAddress = replaceAssetPathWithAddress;
manifest.OutputNameStyle = (int)buildParameters.FileNameStyle; manifest.OutputNameStyle = (int)buildParameters.FileNameStyle;
manifest.BuildBundleType = buildParameters.BuildBundleType; manifest.BuildBundleType = buildParameters.BuildBundleType;
manifest.BuildPipeline = buildParameters.BuildPipeline; manifest.BuildPipeline = buildParameters.BuildPipeline;
@@ -58,7 +59,13 @@ namespace YooAsset.Editor
// 4. 处理内置资源包 // 4. 处理内置资源包
if (processBundleDepends) if (processBundleDepends)
{
// 注意:初始化资源清单建立引用关系
manifest.Initialize();
ProcessBuiltinBundleDependency(context, manifest); ProcessBuiltinBundleDependency(context, manifest);
}
// 创建资源清单文本文件 // 创建资源清单文本文件
{ {
@@ -302,9 +309,6 @@ namespace YooAsset.Editor
#region YOOASSET_LEGACY_DEPENDENCY #region YOOASSET_LEGACY_DEPENDENCY
private void ProcessBuiltinBundleDependency(BuildContext context, PackageManifest manifest) private void ProcessBuiltinBundleDependency(BuildContext context, PackageManifest manifest)
{ {
// 注意:初始化资源清单建立引用关系
ManifestTools.InitManifest(manifest);
// 注意:如果是可编程构建管线,需要补充内置资源包 // 注意:如果是可编程构建管线,需要补充内置资源包
// 注意:该步骤依赖前面的操作! // 注意:该步骤依赖前面的操作!
var buildResultContext = context.TryGetContextObject<TaskBuilding_SBP.BuildResultContext>(); var buildResultContext = context.TryGetContextObject<TaskBuilding_SBP.BuildResultContext>();

View File

@@ -54,6 +54,7 @@ namespace YooAsset.Editor
buildReport.Summary.CompressOption = builtinBuildParameters.CompressOption; buildReport.Summary.CompressOption = builtinBuildParameters.CompressOption;
buildReport.Summary.DisableWriteTypeTree = builtinBuildParameters.DisableWriteTypeTree; buildReport.Summary.DisableWriteTypeTree = builtinBuildParameters.DisableWriteTypeTree;
buildReport.Summary.IgnoreTypeTreeChanges = builtinBuildParameters.IgnoreTypeTreeChanges; buildReport.Summary.IgnoreTypeTreeChanges = builtinBuildParameters.IgnoreTypeTreeChanges;
buildReport.Summary.ReplaceAssetPathWithAddress = builtinBuildParameters.ReplaceAssetPathWithAddress;
} }
else if (buildParameters is ScriptableBuildParameters) else if (buildParameters is ScriptableBuildParameters)
{ {
@@ -61,6 +62,7 @@ namespace YooAsset.Editor
buildReport.Summary.CompressOption = scriptableBuildParameters.CompressOption; buildReport.Summary.CompressOption = scriptableBuildParameters.CompressOption;
buildReport.Summary.DisableWriteTypeTree = scriptableBuildParameters.DisableWriteTypeTree; buildReport.Summary.DisableWriteTypeTree = scriptableBuildParameters.DisableWriteTypeTree;
buildReport.Summary.IgnoreTypeTreeChanges = scriptableBuildParameters.IgnoreTypeTreeChanges; buildReport.Summary.IgnoreTypeTreeChanges = scriptableBuildParameters.IgnoreTypeTreeChanges;
buildReport.Summary.ReplaceAssetPathWithAddress = scriptableBuildParameters.ReplaceAssetPathWithAddress;
buildReport.Summary.WriteLinkXML = scriptableBuildParameters.WriteLinkXML; buildReport.Summary.WriteLinkXML = scriptableBuildParameters.WriteLinkXML;
buildReport.Summary.CacheServerHost = scriptableBuildParameters.CacheServerHost; buildReport.Summary.CacheServerHost = scriptableBuildParameters.CacheServerHost;
buildReport.Summary.CacheServerPort = scriptableBuildParameters.CacheServerPort; buildReport.Summary.CacheServerPort = scriptableBuildParameters.CacheServerPort;

View File

@@ -44,9 +44,9 @@ namespace YooAsset.Editor
{ {
bundleInfo.PackageUnityHash = GetUnityHash(bundleInfo, context); bundleInfo.PackageUnityHash = GetUnityHash(bundleInfo, context);
bundleInfo.PackageUnityCRC = GetUnityCRC(bundleInfo, context); bundleInfo.PackageUnityCRC = GetUnityCRC(bundleInfo, context);
bundleInfo.PackageFileHash = GetBundleFileHash(bundleInfo, buildParametersContext); bundleInfo.PackageFileHash = GetBundleFileHash(bundleInfo, context);
bundleInfo.PackageFileCRC = GetBundleFileCRC(bundleInfo, buildParametersContext); bundleInfo.PackageFileCRC = GetBundleFileCRC(bundleInfo, context);
bundleInfo.PackageFileSize = GetBundleFileSize(bundleInfo, buildParametersContext); bundleInfo.PackageFileSize = GetBundleFileSize(bundleInfo, context);
} }
// 4.更新补丁包输出的文件路径 // 4.更新补丁包输出的文件路径
@@ -62,8 +62,8 @@ namespace YooAsset.Editor
protected abstract string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context); protected abstract string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context);
protected abstract uint GetUnityCRC(BuildBundleInfo bundleInfo, BuildContext context); protected abstract uint GetUnityCRC(BuildBundleInfo bundleInfo, BuildContext context);
protected abstract string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext); protected abstract string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildContext context);
protected abstract uint GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext); protected abstract uint GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildContext context);
protected abstract long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext); protected abstract long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildContext context);
} }
} }

View File

@@ -23,7 +23,8 @@ namespace YooAsset.Editor
// 开始构建 // 开始构建
string pipelineOutputDirectory = buildParametersContext.GetPipelineOutputDirectory(); string pipelineOutputDirectory = buildParametersContext.GetPipelineOutputDirectory();
BuildAssetBundleOptions buildOptions = builtinBuildParameters.GetBundleBuildOptions(); BuildAssetBundleOptions buildOptions = builtinBuildParameters.GetBundleBuildOptions();
AssetBundleManifest unityManifest = BuildPipeline.BuildAssetBundles(pipelineOutputDirectory, buildMapContext.GetPipelineBuilds(), buildOptions, buildParametersContext.Parameters.BuildTarget); var bundleBuilds = buildMapContext.GetPipelineBuilds(builtinBuildParameters.ReplaceAssetPathWithAddress);
AssetBundleManifest unityManifest = BuildPipeline.BuildAssetBundles(pipelineOutputDirectory, bundleBuilds, buildOptions, buildParametersContext.Parameters.BuildTarget);
if (unityManifest == null) if (unityManifest == null)
{ {
string message = BuildLogger.GetErrorMessage(ErrorCode.UnityEngineBuildFailed, "UnityEngine build failed !"); string message = BuildLogger.GetErrorMessage(ErrorCode.UnityEngineBuildFailed, "UnityEngine build failed !");

View File

@@ -6,15 +6,15 @@ using UnityEngine;
namespace YooAsset.Editor namespace YooAsset.Editor
{ {
public class TaskCopyBuiltinFiles_BBP : TaskCopyBuiltinFiles, IBuildTask public class TaskCopyBuildinFiles_BBP : TaskCopyBuildinFiles, IBuildTask
{ {
void IBuildTask.Run(BuildContext context) void IBuildTask.Run(BuildContext context)
{ {
var buildParametersContext = context.GetContextObject<BuildParametersContext>(); var buildParametersContext = context.GetContextObject<BuildParametersContext>();
var manifestContext = context.GetContextObject<ManifestContext>(); var manifestContext = context.GetContextObject<ManifestContext>();
if (buildParametersContext.Parameters.BuiltinFileCopyOption != EBuiltinFileCopyOption.None) if (buildParametersContext.Parameters.BuildinFileCopyOption != EBuildinFileCopyOption.None)
{ {
CopyBuiltinFilesToStreaming(buildParametersContext, manifestContext.Manifest); CopyBuildinFilesToStreaming(buildParametersContext, manifestContext.Manifest);
} }
} }
} }

View File

@@ -11,7 +11,7 @@ namespace YooAsset.Editor
void IBuildTask.Run(BuildContext context) void IBuildTask.Run(BuildContext context)
{ {
var buildParametersContext = context.GetContextObject<BuildParametersContext>(); var buildParametersContext = context.GetContextObject<BuildParametersContext>();
if (buildParametersContext.Parameters.BuiltinFileCopyOption != EBuiltinFileCopyOption.None) if (buildParametersContext.Parameters.BuildinFileCopyOption != EBuildinFileCopyOption.None)
{ {
CreateCatalogFile(buildParametersContext); CreateCatalogFile(buildParametersContext);
} }

View File

@@ -11,7 +11,10 @@ namespace YooAsset.Editor
void IBuildTask.Run(BuildContext context) void IBuildTask.Run(BuildContext context)
{ {
CreateManifestFile(true, true, context); var buildParametersContext = context.GetContextObject<BuildParametersContext>();
var builtinBuildParameters = buildParametersContext.Parameters as BuiltinBuildParameters;
bool replaceAssetPathWithAddress = builtinBuildParameters.ReplaceAssetPathWithAddress;
CreateManifestFile(true, true, replaceAssetPathWithAddress, context);
} }
protected override string[] GetBundleDepends(BuildContext context, string bundleName) protected override string[] GetBundleDepends(BuildContext context, string bundleName)

View File

@@ -40,17 +40,17 @@ namespace YooAsset.Editor
throw new Exception(message); throw new Exception(message);
} }
} }
protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildContext context)
{ {
string filePath = bundleInfo.PackageSourceFilePath; string filePath = bundleInfo.PackageSourceFilePath;
return HashUtility.FileMD5(filePath); return HashUtility.FileMD5(filePath);
} }
protected override uint GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) protected override uint GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildContext context)
{ {
string filePath = bundleInfo.PackageSourceFilePath; string filePath = bundleInfo.PackageSourceFilePath;
return HashUtility.FileCRC32Value(filePath); return HashUtility.FileCRC32Value(filePath);
} }
protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildContext context)
{ {
string filePath = bundleInfo.PackageSourceFilePath; string filePath = bundleInfo.PackageSourceFilePath;
return FileUtility.GetFileSize(filePath); return FileUtility.GetFileSize(filePath);

View File

@@ -27,6 +27,12 @@ namespace YooAsset.Editor
/// </summary> /// </summary>
public bool IgnoreTypeTreeChanges = true; public bool IgnoreTypeTreeChanges = true;
/// <summary>
/// 使用可寻址地址代替资源路径
/// 说明:开启此项可以节省运行时清单占用的内存!
/// </summary>
public bool ReplaceAssetPathWithAddress = false;
/// <summary> /// <summary>
/// 获取内置构建管线的构建选项 /// 获取内置构建管线的构建选项

View File

@@ -35,7 +35,7 @@ namespace YooAsset.Editor
new TaskCreateManifest_BBP(), new TaskCreateManifest_BBP(),
new TaskCreateReport_BBP(), new TaskCreateReport_BBP(),
new TaskCreatePackage_BBP(), new TaskCreatePackage_BBP(),
new TaskCopyBuiltinFiles_BBP(), new TaskCopyBuildinFiles_BBP(),
new TaskCreateCatalog_BBP() new TaskCreateCatalog_BBP()
}; };
return pipeline; return pipeline;

View File

@@ -7,7 +7,7 @@ namespace YooAsset.Editor
{ {
void IBuildTask.Run(BuildContext context) void IBuildTask.Run(BuildContext context)
{ {
CreateManifestFile(false, false, context); CreateManifestFile(false, true, false, context);
} }
protected override string[] GetBundleDepends(BuildContext context, string bundleName) protected override string[] GetBundleDepends(BuildContext context, string bundleName)

View File

@@ -19,16 +19,16 @@ namespace YooAsset.Editor
{ {
return 0; return 0;
} }
protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildContext context)
{ {
string filePath = bundleInfo.PackageSourceFilePath; string filePath = bundleInfo.PackageSourceFilePath;
return GetFilePathTempHash(filePath); return GetFilePathTempHash(filePath);
} }
protected override uint GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) protected override uint GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildContext context)
{ {
return 0; return 0;
} }
protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildContext context)
{ {
return GetBundleTempSize(bundleInfo); return GetBundleTempSize(bundleInfo);
} }

View File

@@ -6,16 +6,16 @@ using UnityEngine;
namespace YooAsset.Editor namespace YooAsset.Editor
{ {
public class TaskCopyBuiltinFiles_RFBP : TaskCopyBuiltinFiles, IBuildTask public class TaskCopyBuildinFiles_RFBP : TaskCopyBuildinFiles, IBuildTask
{ {
void IBuildTask.Run(BuildContext context) void IBuildTask.Run(BuildContext context)
{ {
var buildParametersContext = context.GetContextObject<BuildParametersContext>(); var buildParametersContext = context.GetContextObject<BuildParametersContext>();
var buildParameters = buildParametersContext.Parameters; var buildParameters = buildParametersContext.Parameters;
var manifestContext = context.GetContextObject<ManifestContext>(); var manifestContext = context.GetContextObject<ManifestContext>();
if (buildParameters.BuiltinFileCopyOption != EBuiltinFileCopyOption.None) if (buildParameters.BuildinFileCopyOption != EBuildinFileCopyOption.None)
{ {
CopyBuiltinFilesToStreaming(buildParametersContext, manifestContext.Manifest); CopyBuildinFilesToStreaming(buildParametersContext, manifestContext.Manifest);
} }
} }
} }

View File

@@ -11,7 +11,7 @@ namespace YooAsset.Editor
void IBuildTask.Run(BuildContext context) void IBuildTask.Run(BuildContext context)
{ {
var buildParametersContext = context.GetContextObject<BuildParametersContext>(); var buildParametersContext = context.GetContextObject<BuildParametersContext>();
if (buildParametersContext.Parameters.BuiltinFileCopyOption != EBuiltinFileCopyOption.None) if (buildParametersContext.Parameters.BuildinFileCopyOption != EBuildinFileCopyOption.None)
{ {
CreateCatalogFile(buildParametersContext); CreateCatalogFile(buildParametersContext);
} }

View File

@@ -9,7 +9,7 @@ namespace YooAsset.Editor
{ {
void IBuildTask.Run(BuildContext context) void IBuildTask.Run(BuildContext context)
{ {
CreateManifestFile(false, true, context); CreateManifestFile(false, true, false, context);
} }
protected override string[] GetBundleDepends(BuildContext context, string bundleName) protected override string[] GetBundleDepends(BuildContext context, string bundleName)

View File

@@ -15,27 +15,55 @@ namespace YooAsset.Editor
protected override string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context) protected override string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context)
{ {
string filePath = bundleInfo.PackageSourceFilePath; var buildParametersContext = context.GetContextObject<BuildParametersContext>();
return HashUtility.FileMD5(filePath); var rawFileBuildParameters = buildParametersContext.Parameters as RawFileBuildParameters;
if (rawFileBuildParameters.IncludePathInHash)
{
string filePath = bundleInfo.PackageSourceFilePath;
return GetFileMD5IncludePath(filePath);
}
else
{
string filePath = bundleInfo.PackageSourceFilePath;
return HashUtility.FileMD5(filePath);
}
} }
protected override uint GetUnityCRC(BuildBundleInfo bundleInfo, BuildContext context) protected override uint GetUnityCRC(BuildBundleInfo bundleInfo, BuildContext context)
{ {
return 0; return 0;
} }
protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildContext context)
{ {
string filePath = bundleInfo.PackageSourceFilePath; var buildParametersContext = context.GetContextObject<BuildParametersContext>();
return HashUtility.FileMD5(filePath); var rawFileBuildParameters = buildParametersContext.Parameters as RawFileBuildParameters;
if (rawFileBuildParameters.IncludePathInHash)
{
string filePath = bundleInfo.PackageSourceFilePath;
return GetFileMD5IncludePath(filePath);
}
else
{
string filePath = bundleInfo.PackageSourceFilePath;
return HashUtility.FileMD5(filePath);
}
} }
protected override uint GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) protected override uint GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildContext context)
{ {
string filePath = bundleInfo.PackageSourceFilePath; string filePath = bundleInfo.PackageSourceFilePath;
return HashUtility.FileCRC32Value(filePath); return HashUtility.FileCRC32Value(filePath);
} }
protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildContext context)
{ {
string filePath = bundleInfo.PackageSourceFilePath; string filePath = bundleInfo.PackageSourceFilePath;
return FileUtility.GetFileSize(filePath); return FileUtility.GetFileSize(filePath);
} }
private string GetFileMD5IncludePath(string filePath)
{
string pathHash = HashUtility.StringMD5(filePath.ToLowerInvariant());
string contentHash = HashUtility.FileMD5(filePath);
string combined = pathHash + contentHash;
return HashUtility.StringMD5(combined);
}
} }
} }

View File

@@ -6,5 +6,9 @@ namespace YooAsset.Editor
{ {
public class RawFileBuildParameters : BuildParameters public class RawFileBuildParameters : BuildParameters
{ {
/// <summary>
/// 文件哈希值计算包含路径信息
/// </summary>
public bool IncludePathInHash = false;
} }
} }

View File

@@ -37,7 +37,7 @@ namespace YooAsset.Editor
new TaskCreateManifest_RFBP(), new TaskCreateManifest_RFBP(),
new TaskCreateReport_RFBP(), new TaskCreateReport_RFBP(),
new TaskCreatePackage_RFBP(), new TaskCreatePackage_RFBP(),
new TaskCopyBuiltinFiles_RFBP(), new TaskCopyBuildinFiles_RFBP(),
new TaskCreateCatalog_RFBP() new TaskCreateCatalog_RFBP()
}; };
return pipeline; return pipeline;

View File

@@ -24,7 +24,8 @@ namespace YooAsset.Editor
var scriptableBuildParameters = buildParametersContext.Parameters as ScriptableBuildParameters; var scriptableBuildParameters = buildParametersContext.Parameters as ScriptableBuildParameters;
// 构建内容 // 构建内容
var buildContent = new BundleBuildContent(buildMapContext.GetPipelineBuilds()); var bundleBuilds = buildMapContext.GetPipelineBuilds(scriptableBuildParameters.ReplaceAssetPathWithAddress);
var buildContent = new BundleBuildContent(bundleBuilds);
// 开始构建 // 开始构建
IBundleBuildResults buildResults; IBundleBuildResults buildResults;

View File

@@ -6,15 +6,15 @@ using UnityEngine;
namespace YooAsset.Editor namespace YooAsset.Editor
{ {
public class TaskCopyBuiltinFiles_SBP : TaskCopyBuiltinFiles, IBuildTask public class TaskCopyBuildinFiles_SBP : TaskCopyBuildinFiles, IBuildTask
{ {
void IBuildTask.Run(BuildContext context) void IBuildTask.Run(BuildContext context)
{ {
var buildParametersContext = context.GetContextObject<BuildParametersContext>(); var buildParametersContext = context.GetContextObject<BuildParametersContext>();
var manifestContext = context.GetContextObject<ManifestContext>(); var manifestContext = context.GetContextObject<ManifestContext>();
if (buildParametersContext.Parameters.BuiltinFileCopyOption != EBuiltinFileCopyOption.None) if (buildParametersContext.Parameters.BuildinFileCopyOption != EBuildinFileCopyOption.None)
{ {
CopyBuiltinFilesToStreaming(buildParametersContext, manifestContext.Manifest); CopyBuildinFilesToStreaming(buildParametersContext, manifestContext.Manifest);
} }
} }
} }

View File

@@ -11,7 +11,7 @@ namespace YooAsset.Editor
void IBuildTask.Run(BuildContext context) void IBuildTask.Run(BuildContext context)
{ {
var buildParametersContext = context.GetContextObject<BuildParametersContext>(); var buildParametersContext = context.GetContextObject<BuildParametersContext>();
if (buildParametersContext.Parameters.BuiltinFileCopyOption != EBuiltinFileCopyOption.None) if (buildParametersContext.Parameters.BuildinFileCopyOption != EBuildinFileCopyOption.None)
{ {
CreateCatalogFile(buildParametersContext); CreateCatalogFile(buildParametersContext);
} }

View File

@@ -13,7 +13,10 @@ namespace YooAsset.Editor
void IBuildTask.Run(BuildContext context) void IBuildTask.Run(BuildContext context)
{ {
CreateManifestFile(true, true, context); var buildParametersContext = context.GetContextObject<BuildParametersContext>();
var scriptableBuildParameters = buildParametersContext.Parameters as ScriptableBuildParameters;
bool replaceAssetPathWithAddress = scriptableBuildParameters.ReplaceAssetPathWithAddress;
CreateManifestFile(true, true, replaceAssetPathWithAddress, context);
} }
protected override string[] GetBundleDepends(BuildContext context, string bundleName) protected override string[] GetBundleDepends(BuildContext context, string bundleName)

View File

@@ -40,17 +40,17 @@ namespace YooAsset.Editor
throw new Exception(message); throw new Exception(message);
} }
} }
protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) protected override string GetBundleFileHash(BuildBundleInfo bundleInfo, BuildContext context)
{ {
string filePath = bundleInfo.PackageSourceFilePath; string filePath = bundleInfo.PackageSourceFilePath;
return HashUtility.FileMD5(filePath); return HashUtility.FileMD5(filePath);
} }
protected override uint GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) protected override uint GetBundleFileCRC(BuildBundleInfo bundleInfo, BuildContext context)
{ {
string filePath = bundleInfo.PackageSourceFilePath; string filePath = bundleInfo.PackageSourceFilePath;
return HashUtility.FileCRC32Value(filePath); return HashUtility.FileCRC32Value(filePath);
} }
protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildParametersContext buildParametersContext) protected override long GetBundleFileSize(BuildBundleInfo bundleInfo, BuildContext context)
{ {
string filePath = bundleInfo.PackageSourceFilePath; string filePath = bundleInfo.PackageSourceFilePath;
return FileUtility.GetFileSize(filePath); return FileUtility.GetFileSize(filePath);

View File

@@ -29,6 +29,12 @@ namespace YooAsset.Editor
/// </summary> /// </summary>
public bool IgnoreTypeTreeChanges = true; public bool IgnoreTypeTreeChanges = true;
/// <summary>
/// 使用可寻址地址代替资源路径
/// 说明:开启此项可以节省运行时清单占用的内存!
/// </summary>
public bool ReplaceAssetPathWithAddress = false;
/// <summary> /// <summary>
/// 自动建立资源对象对图集的依赖关系 /// 自动建立资源对象对图集的依赖关系
/// </summary> /// </summary>

View File

@@ -35,7 +35,7 @@ namespace YooAsset.Editor
new TaskCreateManifest_SBP(), new TaskCreateManifest_SBP(),
new TaskCreateReport_SBP(), new TaskCreateReport_SBP(),
new TaskCreatePackage_SBP(), new TaskCreatePackage_SBP(),
new TaskCopyBuiltinFiles_SBP(), new TaskCopyBuildinFiles_SBP(),
new TaskCreateCatalog_SBP() new TaskCreateCatalog_SBP()
}; };
return pipeline; return pipeline;

View File

@@ -10,7 +10,7 @@ namespace YooAsset.Editor
PackageNameIsNullOrEmpty = 111, PackageNameIsNullOrEmpty = 111,
PackageVersionIsNullOrEmpty = 112, PackageVersionIsNullOrEmpty = 112,
BuildOutputRootIsNullOrEmpty = 113, BuildOutputRootIsNullOrEmpty = 113,
BuiltinFileRootIsNullOrEmpty = 114, BuildinFileRootIsNullOrEmpty = 114,
PackageOutputDirectoryExists = 115, PackageOutputDirectoryExists = 115,
BuildPipelineIsNullOrEmpty = 116, BuildPipelineIsNullOrEmpty = 116,
BuildBundleTypeIsUnknown = 117, BuildBundleTypeIsUnknown = 117,

View File

@@ -4,7 +4,7 @@ namespace YooAsset.Editor
/// <summary> /// <summary>
/// 首包资源文件的拷贝方式 /// 首包资源文件的拷贝方式
/// </summary> /// </summary>
public enum EBuiltinFileCopyOption public enum EBuildinFileCopyOption
{ {
/// <summary> /// <summary>
/// 不拷贝任何文件 /// 不拷贝任何文件

View File

@@ -127,35 +127,35 @@ namespace YooAsset.Editor
}); });
UIElementsTools.SetElementLabelMinWidth(enumField, LabelMinWidth); UIElementsTools.SetElementLabelMinWidth(enumField, LabelMinWidth);
} }
protected void SetCopyBuiltinFileOptionField(EnumField enumField, TextField tagField) protected void SetCopyBuildinFileOptionField(EnumField enumField, TextField tagField)
{ {
// 首包文件拷贝选项 // 首包文件拷贝选项
var builtinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuiltinFileCopyOption(PackageName, PipelineName); var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(PackageName, PipelineName);
enumField.Init(builtinFileCopyOption); enumField.Init(buildinFileCopyOption);
enumField.SetValueWithoutNotify(builtinFileCopyOption); enumField.SetValueWithoutNotify(buildinFileCopyOption);
enumField.style.width = StyleWidth; enumField.style.width = StyleWidth;
enumField.RegisterValueChangedCallback(evt => enumField.RegisterValueChangedCallback(evt =>
{ {
AssetBundleBuilderSetting.SetPackageBuiltinFileCopyOption(PackageName, PipelineName, (EBuiltinFileCopyOption)enumField.value); AssetBundleBuilderSetting.SetPackageBuildinFileCopyOption(PackageName, PipelineName, (EBuildinFileCopyOption)enumField.value);
// 设置内置资源标签显隐 // 设置内置资源标签显隐
SetCopyBuiltinFileTagsVisible(tagField); SetCopyBuildinFileTagsVisible(tagField);
}); });
UIElementsTools.SetElementLabelMinWidth(enumField, LabelMinWidth); UIElementsTools.SetElementLabelMinWidth(enumField, LabelMinWidth);
} }
protected void SetCopyBuiltinFileTagsVisible(TextField tagField) protected void SetCopyBuildinFileTagsVisible(TextField tagField)
{ {
var option = AssetBundleBuilderSetting.GetPackageBuiltinFileCopyOption(PackageName, PipelineName); var option = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(PackageName, PipelineName);
tagField.visible = option == EBuiltinFileCopyOption.ClearAndCopyByTags || option == EBuiltinFileCopyOption.OnlyCopyByTags; tagField.visible = option == EBuildinFileCopyOption.ClearAndCopyByTags || option == EBuildinFileCopyOption.OnlyCopyByTags;
} }
protected void SetCopyBuiltinFileTagsField(TextField textField) protected void SetCopyBuildinFileTagsField(TextField textField)
{ {
// 首包文件拷贝参数 // 首包文件拷贝参数
var builtinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuiltinFileCopyParams(PackageName, PipelineName); var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(PackageName, PipelineName);
textField.SetValueWithoutNotify(builtinFileCopyParams); textField.SetValueWithoutNotify(buildinFileCopyParams);
textField.RegisterValueChangedCallback(evt => textField.RegisterValueChangedCallback(evt =>
{ {
AssetBundleBuilderSetting.SetPackageBuiltinFileCopyParams(PackageName, PipelineName, textField.value); AssetBundleBuilderSetting.SetPackageBuildinFileCopyParams(PackageName, PipelineName, textField.value);
}); });
UIElementsTools.SetElementLabelMinWidth(textField, LabelMinWidth); UIElementsTools.SetElementLabelMinWidth(textField, LabelMinWidth);
} }

View File

@@ -21,8 +21,8 @@ namespace YooAsset.Editor
protected PopupField<Type> _manifestRestoreServicesField; protected PopupField<Type> _manifestRestoreServicesField;
protected EnumField _compressionField; protected EnumField _compressionField;
protected EnumField _outputNameStyleField; protected EnumField _outputNameStyleField;
protected EnumField _copyBuiltinFileOptionField; protected EnumField _copyBuildinFileOptionField;
protected TextField _copyBuiltinFileTagsField; protected TextField _copyBuildinFileTagsField;
protected Toggle _clearBuildCacheToggle; protected Toggle _clearBuildCacheToggle;
protected Toggle _useAssetDependencyDBToggle; protected Toggle _useAssetDependencyDBToggle;
@@ -60,13 +60,13 @@ namespace YooAsset.Editor
SetOutputNameStyleField(_outputNameStyleField); SetOutputNameStyleField(_outputNameStyleField);
// 首包文件拷贝参数 // 首包文件拷贝参数
_copyBuiltinFileTagsField = Root.Q<TextField>("CopyBuiltinFileParam"); _copyBuildinFileTagsField = Root.Q<TextField>("CopyBuildinFileParam");
SetCopyBuiltinFileTagsField(_copyBuiltinFileTagsField); SetCopyBuildinFileTagsField(_copyBuildinFileTagsField);
SetCopyBuiltinFileTagsVisible(_copyBuiltinFileTagsField); SetCopyBuildinFileTagsVisible(_copyBuildinFileTagsField);
// 首包文件拷贝选项 // 首包文件拷贝选项
_copyBuiltinFileOptionField = Root.Q<EnumField>("CopyBuiltinFileOption"); _copyBuildinFileOptionField = Root.Q<EnumField>("CopyBuildinFileOption");
SetCopyBuiltinFileOptionField(_copyBuiltinFileOptionField, _copyBuiltinFileTagsField); SetCopyBuildinFileOptionField(_copyBuildinFileOptionField, _copyBuildinFileTagsField);
// 清理构建缓存 // 清理构建缓存
_clearBuildCacheToggle = Root.Q<Toggle>("ClearBuildCache"); _clearBuildCacheToggle = Root.Q<Toggle>("ClearBuildCache");
@@ -82,14 +82,14 @@ namespace YooAsset.Editor
} }
private void BuildButton_clicked() private void BuildButton_clicked()
{ {
if (EditorUtility.DisplayDialog("提示", $"开始构建资源包[{PackageName}]", "Yes", "No")) if (EditorUtility.DisplayDialog("Info", $"Start building resource package [{PackageName}]!", "Yes", "No"))
{ {
EditorTools.ClearUnityConsole(); EditorTools.ClearUnityConsole();
EditorApplication.delayCall += ExecuteBuild; EditorApplication.delayCall += ExecuteBuild;
} }
else else
{ {
Debug.LogWarning("[Build] 打包已经取消"); Debug.LogWarning("[Build] Packaging has been canceled.");
} }
} }
@@ -99,15 +99,15 @@ namespace YooAsset.Editor
protected virtual void ExecuteBuild() protected virtual void ExecuteBuild()
{ {
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(PackageName, PipelineName); var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(PackageName, PipelineName);
var builtinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuiltinFileCopyOption(PackageName, PipelineName); var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(PackageName, PipelineName);
var builtinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuiltinFileCopyParams(PackageName, PipelineName); var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(PackageName, PipelineName);
var compressOption = AssetBundleBuilderSetting.GetPackageCompressOption(PackageName, PipelineName); var compressOption = AssetBundleBuilderSetting.GetPackageCompressOption(PackageName, PipelineName);
var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(PackageName, PipelineName); var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(PackageName, PipelineName);
var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(PackageName, PipelineName); var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(PackageName, PipelineName);
BuiltinBuildParameters buildParameters = new BuiltinBuildParameters(); BuiltinBuildParameters buildParameters = new BuiltinBuildParameters();
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
buildParameters.BuiltinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = PipelineName.ToString(); buildParameters.BuildPipeline = PipelineName.ToString();
buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle; buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle;
buildParameters.BuildTarget = BuildTarget; buildParameters.BuildTarget = BuildTarget;
@@ -116,8 +116,8 @@ namespace YooAsset.Editor
buildParameters.EnableSharePackRule = true; buildParameters.EnableSharePackRule = true;
buildParameters.VerifyBuildingResult = true; buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle; buildParameters.FileNameStyle = fileNameStyle;
buildParameters.BuiltinFileCopyOption = builtinFileCopyOption; buildParameters.BuildinFileCopyOption = buildinFileCopyOption;
buildParameters.BuiltinFileCopyParams = builtinFileCopyParams; buildParameters.BuildinFileCopyParams = buildinFileCopyParams;
buildParameters.CompressOption = compressOption; buildParameters.CompressOption = compressOption;
buildParameters.ClearBuildCacheFiles = clearBuildCache; buildParameters.ClearBuildCacheFiles = clearBuildCache;
buildParameters.UseAssetDependencyDB = useAssetDependencyDB; buildParameters.UseAssetDependencyDB = useAssetDependencyDB;

View File

@@ -7,8 +7,8 @@
<ui:VisualElement name="PopupContainer" style="flex-grow: 1;" /> <ui:VisualElement name="PopupContainer" style="flex-grow: 1;" />
<uie:EnumField label="Compression" value="Center" name="Compression" /> <uie:EnumField label="Compression" value="Center" name="Compression" />
<uie:EnumField label="File Name Style" value="Center" name="FileNameStyle" /> <uie:EnumField label="File Name Style" value="Center" name="FileNameStyle" />
<uie:EnumField label="Copy Builtin File Option" value="Center" name="CopyBuiltinFileOption" /> <uie:EnumField label="Copy Buildin File Option" value="Center" name="CopyBuildinFileOption" />
<ui:TextField picking-mode="Ignore" label="Copy Builtin File Param" name="CopyBuiltinFileParam" /> <ui:TextField picking-mode="Ignore" label="Copy Buildin File Param" name="CopyBuildinFileParam" />
<ui:VisualElement name="ExtensionContainer" /> <ui:VisualElement name="ExtensionContainer" />
<ui:Button text="Click Build" display-tooltip-when-elided="true" name="Build" style="height: 50px; background-color: rgb(40, 106, 42); margin-top: 10px;" /> <ui:Button text="Click Build" display-tooltip-when-elided="true" name="Build" style="height: 50px; background-color: rgb(40, 106, 42); margin-top: 10px;" />
</ui:VisualElement> </ui:VisualElement>

View File

@@ -42,14 +42,14 @@ namespace YooAsset.Editor
} }
private void BuildButton_clicked() private void BuildButton_clicked()
{ {
if (EditorUtility.DisplayDialog("提示", $"开始构建资源包[{PackageName}]", "Yes", "No")) if (EditorUtility.DisplayDialog("Info", $"Start building resource package [{PackageName}]!", "Yes", "No"))
{ {
EditorTools.ClearUnityConsole(); EditorTools.ClearUnityConsole();
EditorApplication.delayCall += ExecuteBuild; EditorApplication.delayCall += ExecuteBuild;
} }
else else
{ {
Debug.LogWarning("[Build] 打包已经取消"); Debug.LogWarning("[Build] Packaging has been canceled.");
} }
} }
@@ -59,12 +59,12 @@ namespace YooAsset.Editor
protected virtual void ExecuteBuild() protected virtual void ExecuteBuild()
{ {
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(PackageName, PipelineName); var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(PackageName, PipelineName);
var builtinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuiltinFileCopyOption(PackageName, PipelineName); var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(PackageName, PipelineName);
var builtinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuiltinFileCopyParams(PackageName, PipelineName); var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(PackageName, PipelineName);
EditorSimulateBuildParameters buildParameters = new EditorSimulateBuildParameters(); EditorSimulateBuildParameters buildParameters = new EditorSimulateBuildParameters();
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
buildParameters.BuiltinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = PipelineName.ToString(); buildParameters.BuildPipeline = PipelineName.ToString();
buildParameters.BuildBundleType = (int)EBuildBundleType.VirtualBundle; buildParameters.BuildBundleType = (int)EBuildBundleType.VirtualBundle;
buildParameters.BuildTarget = BuildTarget; buildParameters.BuildTarget = BuildTarget;
@@ -72,8 +72,8 @@ namespace YooAsset.Editor
buildParameters.PackageVersion = _buildVersionField.value; buildParameters.PackageVersion = _buildVersionField.value;
buildParameters.VerifyBuildingResult = true; buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle; buildParameters.FileNameStyle = fileNameStyle;
buildParameters.BuiltinFileCopyOption = builtinFileCopyOption; buildParameters.BuildinFileCopyOption = buildinFileCopyOption;
buildParameters.BuiltinFileCopyParams = builtinFileCopyParams; buildParameters.BuildinFileCopyParams = buildinFileCopyParams;
EditorSimulateBuildPipeline pipeline = new EditorSimulateBuildPipeline(); EditorSimulateBuildPipeline pipeline = new EditorSimulateBuildPipeline();
var buildResult = pipeline.Run(buildParameters, true); var buildResult = pipeline.Run(buildParameters, true);

View File

@@ -20,8 +20,8 @@ namespace YooAsset.Editor
protected PopupField<Type> _manifestProcessServicesField; protected PopupField<Type> _manifestProcessServicesField;
protected PopupField<Type> _manifestRestoreServicesField; protected PopupField<Type> _manifestRestoreServicesField;
protected EnumField _outputNameStyleField; protected EnumField _outputNameStyleField;
protected EnumField _copyBuiltinFileOptionField; protected EnumField _copyBuildinFileOptionField;
protected TextField _copyBuiltinFileTagsField; protected TextField _copyBuildinFileTagsField;
protected Toggle _clearBuildCacheToggle; protected Toggle _clearBuildCacheToggle;
protected Toggle _useAssetDependencyDBToggle; protected Toggle _useAssetDependencyDBToggle;
@@ -55,13 +55,13 @@ namespace YooAsset.Editor
SetOutputNameStyleField(_outputNameStyleField); SetOutputNameStyleField(_outputNameStyleField);
// 首包文件拷贝参数 // 首包文件拷贝参数
_copyBuiltinFileTagsField = Root.Q<TextField>("CopyBuiltinFileParam"); _copyBuildinFileTagsField = Root.Q<TextField>("CopyBuildinFileParam");
SetCopyBuiltinFileTagsField(_copyBuiltinFileTagsField); SetCopyBuildinFileTagsField(_copyBuildinFileTagsField);
SetCopyBuiltinFileTagsVisible(_copyBuiltinFileTagsField); SetCopyBuildinFileTagsVisible(_copyBuildinFileTagsField);
// 首包文件拷贝选项 // 首包文件拷贝选项
_copyBuiltinFileOptionField = Root.Q<EnumField>("CopyBuiltinFileOption"); _copyBuildinFileOptionField = Root.Q<EnumField>("CopyBuildinFileOption");
SetCopyBuiltinFileOptionField(_copyBuiltinFileOptionField, _copyBuiltinFileTagsField); SetCopyBuildinFileOptionField(_copyBuildinFileOptionField, _copyBuildinFileTagsField);
// 清理构建缓存 // 清理构建缓存
_clearBuildCacheToggle = Root.Q<Toggle>("ClearBuildCache"); _clearBuildCacheToggle = Root.Q<Toggle>("ClearBuildCache");
@@ -77,14 +77,14 @@ namespace YooAsset.Editor
} }
private void BuildButton_clicked() private void BuildButton_clicked()
{ {
if (EditorUtility.DisplayDialog("提示", $"开始构建资源包[{PackageName}]", "Yes", "No")) if (EditorUtility.DisplayDialog("Info", $"Start building resource package [{PackageName}]!", "Yes", "No"))
{ {
EditorTools.ClearUnityConsole(); EditorTools.ClearUnityConsole();
EditorApplication.delayCall += ExecuteBuild; EditorApplication.delayCall += ExecuteBuild;
} }
else else
{ {
Debug.LogWarning("[Build] 打包已经取消"); Debug.LogWarning("[Build] Packaging has been canceled.");
} }
} }
@@ -94,14 +94,14 @@ namespace YooAsset.Editor
protected virtual void ExecuteBuild() protected virtual void ExecuteBuild()
{ {
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(PackageName, PipelineName); var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(PackageName, PipelineName);
var builtinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuiltinFileCopyOption(PackageName, PipelineName); var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(PackageName, PipelineName);
var builtinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuiltinFileCopyParams(PackageName, PipelineName); var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(PackageName, PipelineName);
var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(PackageName, PipelineName); var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(PackageName, PipelineName);
var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(PackageName, PipelineName); var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(PackageName, PipelineName);
RawFileBuildParameters buildParameters = new RawFileBuildParameters(); RawFileBuildParameters buildParameters = new RawFileBuildParameters();
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
buildParameters.BuiltinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = PipelineName.ToString(); buildParameters.BuildPipeline = PipelineName.ToString();
buildParameters.BuildBundleType = (int)EBuildBundleType.RawBundle; buildParameters.BuildBundleType = (int)EBuildBundleType.RawBundle;
buildParameters.BuildTarget = BuildTarget; buildParameters.BuildTarget = BuildTarget;
@@ -109,8 +109,8 @@ namespace YooAsset.Editor
buildParameters.PackageVersion = _buildVersionField.value; buildParameters.PackageVersion = _buildVersionField.value;
buildParameters.VerifyBuildingResult = true; buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle; buildParameters.FileNameStyle = fileNameStyle;
buildParameters.BuiltinFileCopyOption = builtinFileCopyOption; buildParameters.BuildinFileCopyOption = buildinFileCopyOption;
buildParameters.BuiltinFileCopyParams = builtinFileCopyParams; buildParameters.BuildinFileCopyParams = buildinFileCopyParams;
buildParameters.ClearBuildCacheFiles = clearBuildCache; buildParameters.ClearBuildCacheFiles = clearBuildCache;
buildParameters.UseAssetDependencyDB = useAssetDependencyDB; buildParameters.UseAssetDependencyDB = useAssetDependencyDB;
buildParameters.EncryptionServices = CreateEncryptionServicesInstance(); buildParameters.EncryptionServices = CreateEncryptionServicesInstance();

View File

@@ -6,8 +6,8 @@
<ui:Toggle label="Use Asset Depend DB" name="UseAssetDependency" /> <ui:Toggle label="Use Asset Depend DB" name="UseAssetDependency" />
<ui:VisualElement name="PopupContainer" style="flex-grow: 1;" /> <ui:VisualElement name="PopupContainer" style="flex-grow: 1;" />
<uie:EnumField label="File Name Style" value="Center" name="FileNameStyle" /> <uie:EnumField label="File Name Style" value="Center" name="FileNameStyle" />
<uie:EnumField label="Copy Builtin File Option" value="Center" name="CopyBuiltinFileOption" /> <uie:EnumField label="Copy Buildin File Option" value="Center" name="CopyBuildinFileOption" />
<ui:TextField picking-mode="Ignore" label="Copy Builtin File Param" name="CopyBuiltinFileParam" /> <ui:TextField picking-mode="Ignore" label="Copy Buildin File Param" name="CopyBuildinFileParam" />
<ui:VisualElement name="ExtensionContainer" /> <ui:VisualElement name="ExtensionContainer" />
<ui:Button text="Click Build" display-tooltip-when-elided="true" name="Build" style="height: 50px; background-color: rgb(40, 106, 42); margin-top: 10px;" /> <ui:Button text="Click Build" display-tooltip-when-elided="true" name="Build" style="height: 50px; background-color: rgb(40, 106, 42); margin-top: 10px;" />
</ui:VisualElement> </ui:VisualElement>

View File

@@ -21,8 +21,8 @@ namespace YooAsset.Editor
protected PopupField<Type> _manifestRestoreServicesField; protected PopupField<Type> _manifestRestoreServicesField;
protected EnumField _compressionField; protected EnumField _compressionField;
protected EnumField _outputNameStyleField; protected EnumField _outputNameStyleField;
protected EnumField _copyBuiltinFileOptionField; protected EnumField _copyBuildinFileOptionField;
protected TextField _copyBuiltinFileTagsField; protected TextField _copyBuildinFileTagsField;
protected Toggle _clearBuildCacheToggle; protected Toggle _clearBuildCacheToggle;
protected Toggle _useAssetDependencyDBToggle; protected Toggle _useAssetDependencyDBToggle;
@@ -60,13 +60,13 @@ namespace YooAsset.Editor
SetOutputNameStyleField(_outputNameStyleField); SetOutputNameStyleField(_outputNameStyleField);
// 首包文件拷贝参数 // 首包文件拷贝参数
_copyBuiltinFileTagsField = Root.Q<TextField>("CopyBuiltinFileParam"); _copyBuildinFileTagsField = Root.Q<TextField>("CopyBuildinFileParam");
SetCopyBuiltinFileTagsField(_copyBuiltinFileTagsField); SetCopyBuildinFileTagsField(_copyBuildinFileTagsField);
SetCopyBuiltinFileTagsVisible(_copyBuiltinFileTagsField); SetCopyBuildinFileTagsVisible(_copyBuildinFileTagsField);
// 首包文件拷贝选项 // 首包文件拷贝选项
_copyBuiltinFileOptionField = Root.Q<EnumField>("CopyBuiltinFileOption"); _copyBuildinFileOptionField = Root.Q<EnumField>("CopyBuildinFileOption");
SetCopyBuiltinFileOptionField(_copyBuiltinFileOptionField, _copyBuiltinFileTagsField); SetCopyBuildinFileOptionField(_copyBuildinFileOptionField, _copyBuildinFileTagsField);
// 清理构建缓存 // 清理构建缓存
_clearBuildCacheToggle = Root.Q<Toggle>("ClearBuildCache"); _clearBuildCacheToggle = Root.Q<Toggle>("ClearBuildCache");
@@ -82,14 +82,14 @@ namespace YooAsset.Editor
} }
private void BuildButton_clicked() private void BuildButton_clicked()
{ {
if (EditorUtility.DisplayDialog("提示", $"开始构建资源包[{PackageName}]", "Yes", "No")) if (EditorUtility.DisplayDialog("Info", $"Start building resource package [{PackageName}]!", "Yes", "No"))
{ {
EditorTools.ClearUnityConsole(); EditorTools.ClearUnityConsole();
EditorApplication.delayCall += ExecuteBuild; EditorApplication.delayCall += ExecuteBuild;
} }
else else
{ {
Debug.LogWarning("[Build] 打包已经取消"); Debug.LogWarning("[Build] Packaging has been canceled.");
} }
} }
@@ -99,15 +99,15 @@ namespace YooAsset.Editor
protected virtual void ExecuteBuild() protected virtual void ExecuteBuild()
{ {
var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(PackageName, PipelineName); var fileNameStyle = AssetBundleBuilderSetting.GetPackageFileNameStyle(PackageName, PipelineName);
var builtinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuiltinFileCopyOption(PackageName, PipelineName); var buildinFileCopyOption = AssetBundleBuilderSetting.GetPackageBuildinFileCopyOption(PackageName, PipelineName);
var builtinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuiltinFileCopyParams(PackageName, PipelineName); var buildinFileCopyParams = AssetBundleBuilderSetting.GetPackageBuildinFileCopyParams(PackageName, PipelineName);
var compressOption = AssetBundleBuilderSetting.GetPackageCompressOption(PackageName, PipelineName); var compressOption = AssetBundleBuilderSetting.GetPackageCompressOption(PackageName, PipelineName);
var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(PackageName, PipelineName); var clearBuildCache = AssetBundleBuilderSetting.GetPackageClearBuildCache(PackageName, PipelineName);
var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(PackageName, PipelineName); var useAssetDependencyDB = AssetBundleBuilderSetting.GetPackageUseAssetDependencyDB(PackageName, PipelineName);
ScriptableBuildParameters buildParameters = new ScriptableBuildParameters(); ScriptableBuildParameters buildParameters = new ScriptableBuildParameters();
buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot(); buildParameters.BuildOutputRoot = AssetBundleBuilderHelper.GetDefaultBuildOutputRoot();
buildParameters.BuiltinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot(); buildParameters.BuildinFileRoot = AssetBundleBuilderHelper.GetStreamingAssetsRoot();
buildParameters.BuildPipeline = PipelineName.ToString(); buildParameters.BuildPipeline = PipelineName.ToString();
buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle; buildParameters.BuildBundleType = (int)EBuildBundleType.AssetBundle;
buildParameters.BuildTarget = BuildTarget; buildParameters.BuildTarget = BuildTarget;
@@ -116,8 +116,8 @@ namespace YooAsset.Editor
buildParameters.EnableSharePackRule = true; buildParameters.EnableSharePackRule = true;
buildParameters.VerifyBuildingResult = true; buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle; buildParameters.FileNameStyle = fileNameStyle;
buildParameters.BuiltinFileCopyOption = builtinFileCopyOption; buildParameters.BuildinFileCopyOption = buildinFileCopyOption;
buildParameters.BuiltinFileCopyParams = builtinFileCopyParams; buildParameters.BuildinFileCopyParams = buildinFileCopyParams;
buildParameters.CompressOption = compressOption; buildParameters.CompressOption = compressOption;
buildParameters.ClearBuildCacheFiles = clearBuildCache; buildParameters.ClearBuildCacheFiles = clearBuildCache;
buildParameters.UseAssetDependencyDB = useAssetDependencyDB; buildParameters.UseAssetDependencyDB = useAssetDependencyDB;

View File

@@ -7,8 +7,8 @@
<ui:VisualElement name="PopupContainer" style="flex-grow: 1;" /> <ui:VisualElement name="PopupContainer" style="flex-grow: 1;" />
<uie:EnumField label="Compression" value="Center" name="Compression" /> <uie:EnumField label="Compression" value="Center" name="Compression" />
<uie:EnumField label="File Name Style" value="Center" name="FileNameStyle" /> <uie:EnumField label="File Name Style" value="Center" name="FileNameStyle" />
<uie:EnumField label="Copy Builtin File Option" value="Center" name="CopyBuiltinFileOption" /> <uie:EnumField label="Copy Buildin File Option" value="Center" name="CopyBuildinFileOption" />
<ui:TextField picking-mode="Ignore" label="Copy Builtin File Param" name="CopyBuiltinFileParam" /> <ui:TextField picking-mode="Ignore" label="Copy Buildin File Param" name="CopyBuildinFileParam" />
<ui:VisualElement name="ExtensionContainer" /> <ui:VisualElement name="ExtensionContainer" />
<ui:Button text="Click Build" display-tooltip-when-elided="true" name="Build" style="height: 50px; background-color: rgb(40, 106, 42); margin-top: 10px;" /> <ui:Button text="Click Build" display-tooltip-when-elided="true" name="Build" style="height: 50px; background-color: rgb(40, 106, 42); margin-top: 10px;" />
</ui:VisualElement> </ui:VisualElement>

View File

@@ -236,6 +236,7 @@ namespace YooAsset.Editor
// 包裹名称 // 包裹名称
_packageNameTxt = root.Q<TextField>("PackageName"); _packageNameTxt = root.Q<TextField>("PackageName");
_packageNameTxt.isDelayed = true;
_packageNameTxt.RegisterValueChangedCallback(evt => _packageNameTxt.RegisterValueChangedCallback(evt =>
{ {
var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage; var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage;
@@ -249,6 +250,7 @@ namespace YooAsset.Editor
// 包裹备注 // 包裹备注
_packageDescTxt = root.Q<TextField>("PackageDesc"); _packageDescTxt = root.Q<TextField>("PackageDesc");
_packageDescTxt.isDelayed = true;
_packageDescTxt.RegisterValueChangedCallback(evt => _packageDescTxt.RegisterValueChangedCallback(evt =>
{ {
var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage; var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage;
@@ -286,6 +288,7 @@ namespace YooAsset.Editor
// 分组名称 // 分组名称
_groupNameTxt = root.Q<TextField>("GroupName"); _groupNameTxt = root.Q<TextField>("GroupName");
_groupNameTxt.isDelayed = true;
_groupNameTxt.RegisterValueChangedCallback(evt => _groupNameTxt.RegisterValueChangedCallback(evt =>
{ {
var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage; var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage;
@@ -300,6 +303,7 @@ namespace YooAsset.Editor
// 分组备注 // 分组备注
_groupDescTxt = root.Q<TextField>("GroupDesc"); _groupDescTxt = root.Q<TextField>("GroupDesc");
_groupDescTxt.isDelayed = true;
_groupDescTxt.RegisterValueChangedCallback(evt => _groupDescTxt.RegisterValueChangedCallback(evt =>
{ {
var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage; var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage;
@@ -314,6 +318,7 @@ namespace YooAsset.Editor
// 分组的资源标签 // 分组的资源标签
_groupTagsTxt = root.Q<TextField>("GroupTags"); _groupTagsTxt = root.Q<TextField>("GroupTags");
_groupTagsTxt.isDelayed = true;
_groupTagsTxt.RegisterValueChangedCallback(evt => _groupTagsTxt.RegisterValueChangedCallback(evt =>
{ {
var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage; var selectPackage = _packageListView.selectedItem as AssetBundleCollectorPackage;
@@ -817,6 +822,7 @@ namespace YooAsset.Editor
var textField = new TextField(); var textField = new TextField();
textField.name = "TextField0"; textField.name = "TextField0";
textField.label = "User Data"; textField.label = "User Data";
textField.isDelayed = true;
textField.style.width = 200; textField.style.width = 200;
elementBottom.Add(textField); elementBottom.Add(textField);
var label = textField.Q<Label>(); var label = textField.Q<Label>();
@@ -826,6 +832,7 @@ namespace YooAsset.Editor
var textField = new TextField(); var textField = new TextField();
textField.name = "TextField1"; textField.name = "TextField1";
textField.label = "Asset Tags"; textField.label = "Asset Tags";
textField.isDelayed = true;
textField.style.width = 100; textField.style.width = 100;
textField.style.marginLeft = 20; textField.style.marginLeft = 20;
textField.style.flexGrow = 1; textField.style.flexGrow = 1;

View File

@@ -30,7 +30,7 @@
<ui:VisualElement name="PackageContainer" style="width: 200px; flex-grow: 0; background-color: rgb(67, 67, 67); border-left-width: 5px; border-right-width: 5px; border-top-width: 5px; border-bottom-width: 5px;"> <ui:VisualElement name="PackageContainer" style="width: 200px; flex-grow: 0; background-color: rgb(67, 67, 67); border-left-width: 5px; border-right-width: 5px; border-top-width: 5px; border-bottom-width: 5px;">
<ui:Label text="Packages" display-tooltip-when-elided="true" name="PackageTitle" style="background-color: rgb(89, 89, 89); -unity-text-align: upper-center; -unity-font-style: bold; border-left-width: 5px; border-right-width: 5px; border-top-width: 5px; border-bottom-width: 5px; font-size: 12px;" /> <ui:Label text="Packages" display-tooltip-when-elided="true" name="PackageTitle" style="background-color: rgb(89, 89, 89); -unity-text-align: upper-center; -unity-font-style: bold; border-left-width: 5px; border-right-width: 5px; border-top-width: 5px; border-bottom-width: 5px; font-size: 12px;" />
<ui:ListView focusable="true" name="PackageListView" item-height="20" virtualization-method="DynamicHeight" reorderable="true" reorder-mode="Animated" style="flex-grow: 1;" /> <ui:ListView focusable="true" name="PackageListView" item-height="20" virtualization-method="DynamicHeight" reorderable="true" reorder-mode="Animated" style="flex-grow: 1;" />
<ui:VisualElement name="PackageAddContainer" style="height: 20px; flex-direction: row; justify-content: center;"> <ui:VisualElement name="PackageAddContainer" style="height: 20px; flex-direction: row; justify-content: center; flex-shrink: 0;">
<ui:Button text=" - " display-tooltip-when-elided="true" name="RemoveBtn" /> <ui:Button text=" - " display-tooltip-when-elided="true" name="RemoveBtn" />
<ui:Button text=" + " display-tooltip-when-elided="true" name="AddBtn" /> <ui:Button text=" + " display-tooltip-when-elided="true" name="AddBtn" />
</ui:VisualElement> </ui:VisualElement>
@@ -40,7 +40,7 @@
<ui:TextField picking-mode="Ignore" label="Package Name" name="PackageName" style="flex-direction: column;" /> <ui:TextField picking-mode="Ignore" label="Package Name" name="PackageName" style="flex-direction: column;" />
<ui:TextField picking-mode="Ignore" label="Package Desc" name="PackageDesc" style="flex-direction: column;" /> <ui:TextField picking-mode="Ignore" label="Package Desc" name="PackageDesc" style="flex-direction: column;" />
<ui:ListView focusable="true" name="GroupListView" item-height="20" virtualization-method="DynamicHeight" reorderable="true" reorder-mode="Animated" style="flex-grow: 1;" /> <ui:ListView focusable="true" name="GroupListView" item-height="20" virtualization-method="DynamicHeight" reorderable="true" reorder-mode="Animated" style="flex-grow: 1;" />
<ui:VisualElement name="GroupAddContainer" style="height: 20px; flex-direction: row; justify-content: center;"> <ui:VisualElement name="GroupAddContainer" style="height: 20px; flex-direction: row; justify-content: center; flex-shrink: 0;">
<ui:Button text=" - " display-tooltip-when-elided="true" name="RemoveBtn" /> <ui:Button text=" - " display-tooltip-when-elided="true" name="RemoveBtn" />
<ui:Button text=" + " display-tooltip-when-elided="true" name="AddBtn" /> <ui:Button text=" + " display-tooltip-when-elided="true" name="AddBtn" />
</ui:VisualElement> </ui:VisualElement>

View File

@@ -88,8 +88,8 @@ namespace YooAsset.Editor
} }
catch (Exception ex) catch (Exception ex)
{ {
ClearDatabase(true);
Debug.LogError($"Failed to load cache database : {ex.Message}"); Debug.LogError($"Failed to load cache database : {ex.Message}");
ClearDatabase(true);
} }
finally finally
{ {
@@ -169,7 +169,8 @@ namespace YooAsset.Editor
File.Delete(_databaseFilePath); File.Delete(_databaseFilePath);
} }
_database.Clear(); if (_database != null)
_database.Clear();
} }
/// <summary> /// <summary>

View File

@@ -81,6 +81,7 @@ namespace YooAsset.Editor
public ECompressOption CompressOption; public ECompressOption CompressOption;
public bool DisableWriteTypeTree; public bool DisableWriteTypeTree;
public bool IgnoreTypeTreeChanges; public bool IgnoreTypeTreeChanges;
public bool ReplaceAssetPathWithAddress;
public bool WriteLinkXML = true; public bool WriteLinkXML = true;
public string CacheServerHost; public string CacheServerHost;
public int CacheServerPort; public int CacheServerPort;

View File

@@ -74,6 +74,7 @@ namespace YooAsset.Editor
BindListViewItem("CompressOption", $"{buildReport.Summary.CompressOption}"); BindListViewItem("CompressOption", $"{buildReport.Summary.CompressOption}");
BindListViewItem("DisableWriteTypeTree", $"{buildReport.Summary.DisableWriteTypeTree}"); BindListViewItem("DisableWriteTypeTree", $"{buildReport.Summary.DisableWriteTypeTree}");
BindListViewItem("IgnoreTypeTreeChanges", $"{buildReport.Summary.IgnoreTypeTreeChanges}"); BindListViewItem("IgnoreTypeTreeChanges", $"{buildReport.Summary.IgnoreTypeTreeChanges}");
BindListViewItem("ReplaceAssetPathWithAddress", $"{buildReport.Summary.ReplaceAssetPathWithAddress}");
BindListViewItem(string.Empty, string.Empty); BindListViewItem(string.Empty, string.Empty);
BindListViewHeader("Build Results"); BindListViewHeader("Build Results");

View File

@@ -41,6 +41,8 @@ namespace YooAsset.Editor
Texture, Texture,
RenderTexture, RenderTexture,
VideoClip, VideoClip,
PlayableAsset,
TimelineAsset
} }
/// <summary> /// <summary>

View File

@@ -53,24 +53,29 @@ namespace YooAsset
} }
// 创建内置清单实例 // 创建内置清单实例
var builtinFileCatalog = new DefaultBuiltinFileCatalog(); var buildinFileCatalog = new DefaultBuildinFileCatalog();
builtinFileCatalog.FileVersion = CatalogDefine.FileVersion; buildinFileCatalog.FileVersion = CatalogDefine.FileVersion;
builtinFileCatalog.PackageName = packageName; buildinFileCatalog.PackageName = packageName;
builtinFileCatalog.PackageVersion = packageVersion; buildinFileCatalog.PackageVersion = packageVersion;
// 创建白名单查询集合 // 创建白名单查询集合
HashSet<string> whiteFileList = new HashSet<string> HashSet<string> whiteFileList = new HashSet<string>
{ {
"link.xml", "link.xml",
"buildlogtep.json", "buildlogtep.json",
$"{packageName}.version", DefaultBuildinFileSystemDefine.BuildinCatalogJsonFileName,
$"{packageName}_{packageVersion}.bytes", DefaultBuildinFileSystemDefine.BuildinCatalogBinaryFileName
$"{packageName}_{packageVersion}.hash",
$"{packageName}_{packageVersion}.json",
$"{packageName}_{packageVersion}.report",
DefaultBuiltinFileSystemDefine.BuiltinCatalogJsonFileName,
DefaultBuiltinFileSystemDefine.BuiltinCatalogBinaryFileName
}; };
string packageVersionFileName = YooAssetSettingsData.GetPackageVersionFileName(packageName);
string packageHashFileName = YooAssetSettingsData.GetPackageHashFileName(packageName, packageVersion);
string manifestBinaryFIleName = YooAssetSettingsData.GetManifestBinaryFileName(packageName, packageVersion);
string manifestJsonFIleName = YooAssetSettingsData.GetManifestJsonFileName(packageName, packageVersion);
string reportFileName = YooAssetSettingsData.GetBuildReportFileName(packageName, packageVersion);
whiteFileList.Add(packageVersionFileName);
whiteFileList.Add(packageHashFileName);
whiteFileList.Add(manifestBinaryFIleName);
whiteFileList.Add(manifestJsonFIleName);
whiteFileList.Add(reportFileName);
// 记录所有内置资源文件 // 记录所有内置资源文件
DirectoryInfo rootDirectory = new DirectoryInfo(packageDirectory); DirectoryInfo rootDirectory = new DirectoryInfo(packageDirectory);
@@ -86,10 +91,10 @@ namespace YooAsset
string fileName = fileInfo.Name; string fileName = fileInfo.Name;
if (fileMapping.TryGetValue(fileName, out string bundleGUID)) if (fileMapping.TryGetValue(fileName, out string bundleGUID))
{ {
var wrapper = new DefaultBuiltinFileCatalog.FileWrapper(); var wrapper = new DefaultBuildinFileCatalog.FileWrapper();
wrapper.BundleGUID = bundleGUID; wrapper.BundleGUID = bundleGUID;
wrapper.FileName = fileName; wrapper.FileName = fileName;
builtinFileCatalog.Wrappers.Add(wrapper); buildinFileCatalog.Wrappers.Add(wrapper);
} }
else else
{ {
@@ -98,16 +103,44 @@ namespace YooAsset
} }
// 创建输出文件 // 创建输出文件
string jsonFilePath = $"{packageDirectory}/{DefaultBuiltinFileSystemDefine.BuiltinCatalogJsonFileName}"; string jsonFilePath = $"{packageDirectory}/{DefaultBuildinFileSystemDefine.BuildinCatalogJsonFileName}";
if (File.Exists(jsonFilePath)) if (File.Exists(jsonFilePath))
File.Delete(jsonFilePath); File.Delete(jsonFilePath);
SerializeToJson(jsonFilePath, builtinFileCatalog); SerializeToJson(jsonFilePath, buildinFileCatalog);
// 创建输出文件 // 创建输出文件
string binaryFilePath = $"{packageDirectory}/{DefaultBuiltinFileSystemDefine.BuiltinCatalogBinaryFileName}"; string binaryFilePath = $"{packageDirectory}/{DefaultBuildinFileSystemDefine.BuildinCatalogBinaryFileName}";
if (File.Exists(binaryFilePath)) if (File.Exists(binaryFilePath))
File.Delete(binaryFilePath); File.Delete(binaryFilePath);
SerializeToBinary(binaryFilePath, builtinFileCatalog); SerializeToBinary(binaryFilePath, buildinFileCatalog);
UnityEditor.AssetDatabase.Refresh();
Debug.Log($"Succeed to save catalog file : {binaryFilePath}");
return true;
}
/// <summary>
/// 生成空的包裹内置资源目录文件
/// </summary>
public static bool CreateEmptyCatalogFile(string packageName, string packageVersion, string outputPath)
{
// 创建内置清单实例
var buildinFileCatalog = new DefaultBuildinFileCatalog();
buildinFileCatalog.FileVersion = CatalogDefine.FileVersion;
buildinFileCatalog.PackageName = packageName;
buildinFileCatalog.PackageVersion = packageVersion;
// 创建输出文件
string jsonFilePath = $"{outputPath}/{DefaultBuildinFileSystemDefine.BuildinCatalogJsonFileName}";
if (File.Exists(jsonFilePath))
File.Delete(jsonFilePath);
SerializeToJson(jsonFilePath, buildinFileCatalog);
// 创建输出文件
string binaryFilePath = $"{outputPath}/{DefaultBuildinFileSystemDefine.BuildinCatalogBinaryFileName}";
if (File.Exists(binaryFilePath))
File.Delete(binaryFilePath);
SerializeToBinary(binaryFilePath, buildinFileCatalog);
UnityEditor.AssetDatabase.Refresh(); UnityEditor.AssetDatabase.Refresh();
Debug.Log($"Succeed to save catalog file : {binaryFilePath}"); Debug.Log($"Succeed to save catalog file : {binaryFilePath}");
@@ -118,7 +151,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 序列化JSON文件 /// 序列化JSON文件
/// </summary> /// </summary>
public static void SerializeToJson(string savePath, DefaultBuiltinFileCatalog catalog) public static void SerializeToJson(string savePath, DefaultBuildinFileCatalog catalog)
{ {
string json = JsonUtility.ToJson(catalog, true); string json = JsonUtility.ToJson(catalog, true);
FileUtility.WriteAllText(savePath, json); FileUtility.WriteAllText(savePath, json);
@@ -127,15 +160,15 @@ namespace YooAsset
/// <summary> /// <summary>
/// 反序列化JSON文件 /// 反序列化JSON文件
/// </summary> /// </summary>
public static DefaultBuiltinFileCatalog DeserializeFromJson(string jsonContent) public static DefaultBuildinFileCatalog DeserializeFromJson(string jsonContent)
{ {
return JsonUtility.FromJson<DefaultBuiltinFileCatalog>(jsonContent); return JsonUtility.FromJson<DefaultBuildinFileCatalog>(jsonContent);
} }
/// <summary> /// <summary>
/// 序列化(二进制文件) /// 序列化(二进制文件)
/// </summary> /// </summary>
public static void SerializeToBinary(string savePath, DefaultBuiltinFileCatalog catalog) public static void SerializeToBinary(string savePath, DefaultBuildinFileCatalog catalog)
{ {
using (FileStream fs = new FileStream(savePath, FileMode.Create)) using (FileStream fs = new FileStream(savePath, FileMode.Create))
{ {
@@ -170,7 +203,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 反序列化(二进制文件) /// 反序列化(二进制文件)
/// </summary> /// </summary>
public static DefaultBuiltinFileCatalog DeserializeFromBinary(byte[] binaryData) public static DefaultBuildinFileCatalog DeserializeFromBinary(byte[] binaryData)
{ {
// 创建缓存器 // 创建缓存器
BufferReader buffer = new BufferReader(binaryData); BufferReader buffer = new BufferReader(binaryData);
@@ -185,7 +218,7 @@ namespace YooAsset
if (fileVersion != CatalogDefine.FileVersion) if (fileVersion != CatalogDefine.FileVersion)
throw new Exception($"The catalog file version are not compatible : {fileVersion} != {CatalogDefine.FileVersion}"); throw new Exception($"The catalog file version are not compatible : {fileVersion} != {CatalogDefine.FileVersion}");
DefaultBuiltinFileCatalog catalog = new DefaultBuiltinFileCatalog(); DefaultBuildinFileCatalog catalog = new DefaultBuildinFileCatalog();
{ {
// 读取文件头信息 // 读取文件头信息
catalog.FileVersion = fileVersion; catalog.FileVersion = fileVersion;
@@ -194,10 +227,10 @@ namespace YooAsset
// 读取资源包列表 // 读取资源包列表
int fileCount = buffer.ReadInt32(); int fileCount = buffer.ReadInt32();
catalog.Wrappers = new List<DefaultBuiltinFileCatalog.FileWrapper>(fileCount); catalog.Wrappers = new List<DefaultBuildinFileCatalog.FileWrapper>(fileCount);
for (int i = 0; i < fileCount; i++) for (int i = 0; i < fileCount; i++)
{ {
var fileWrapper = new DefaultBuiltinFileCatalog.FileWrapper(); var fileWrapper = new DefaultBuildinFileCatalog.FileWrapper();
fileWrapper.BundleGUID = buffer.ReadUTF8(); fileWrapper.BundleGUID = buffer.ReadUTF8();
fileWrapper.FileName = buffer.ReadUTF8(); fileWrapper.FileName = buffer.ReadUTF8();
catalog.Wrappers.Add(fileWrapper); catalog.Wrappers.Add(fileWrapper);

View File

@@ -8,7 +8,7 @@ namespace YooAsset
/// 内置资源清单目录 /// 内置资源清单目录
/// </summary> /// </summary>
[Serializable] [Serializable]
internal class DefaultBuiltinFileCatalog internal class DefaultBuildinFileCatalog
{ {
[Serializable] [Serializable]
public class FileWrapper public class FileWrapper

View File

@@ -8,7 +8,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 内置文件系统 /// 内置文件系统
/// </summary> /// </summary>
internal class DefaultBuiltinFileSystem : IFileSystem internal class DefaultBuildinFileSystem : IFileSystem
{ {
public class FileWrapper public class FileWrapper
{ {
@@ -21,7 +21,7 @@ namespace YooAsset
} }
protected readonly Dictionary<string, FileWrapper> _wrappers = new Dictionary<string, FileWrapper>(10000); protected readonly Dictionary<string, FileWrapper> _wrappers = new Dictionary<string, FileWrapper>(10000);
protected readonly Dictionary<string, string> _builtinFilePathMapping = new Dictionary<string, string>(10000); protected readonly Dictionary<string, string> _buildinFilePathMapping = new Dictionary<string, string>(10000);
protected IFileSystem _unpackFileSystem; protected IFileSystem _unpackFileSystem;
protected string _packageRoot; protected string _packageRoot;
@@ -81,13 +81,18 @@ namespace YooAsset
/// <summary> /// <summary>
/// 自定义参数:拷贝内置清单 /// 自定义参数:拷贝内置清单
/// </summary> /// </summary>
public bool CopyBuiltinPackageManifest { private set; get; } = false; public bool CopyBuildinPackageManifest { private set; get; } = false;
/// <summary> /// <summary>
/// 自定义参数:拷贝内置清单的目标目录 /// 自定义参数:拷贝内置清单的目标目录
/// 注意:该参数为空的时候,会获取默认的沙盒目录! /// 注意:该参数为空的时候,会获取默认的沙盒目录!
/// </summary> /// </summary>
public string CopyBuiltinPackageManifestDestRoot { private set; get; } public string CopyBuildinPackageManifestDestRoot { private set; get; }
/// <summary>
/// 自定义参数:解压文件系统的根目录
/// </summary>
public string UnpackFileSystemRoot { private set; get; }
/// <summary> /// <summary>
/// 自定义参数:解密服务接口的实例类 /// 自定义参数:解密服务接口的实例类
@@ -106,7 +111,7 @@ namespace YooAsset
#endregion #endregion
public DefaultBuiltinFileSystem() public DefaultBuildinFileSystem()
{ {
} }
public virtual FSInitializeFileSystemOperation InitializeFileSystemAsync() public virtual FSInitializeFileSystemOperation InitializeFileSystemAsync()
@@ -131,7 +136,7 @@ namespace YooAsset
public virtual FSDownloadFileOperation DownloadFileAsync(PackageBundle bundle, DownloadFileOptions options) public virtual FSDownloadFileOperation DownloadFileAsync(PackageBundle bundle, DownloadFileOptions options)
{ {
// 注意:业务层的解压器会依赖该方法 // 注意:业务层的解压器会依赖该方法
options.ImportFilePath = GetBuiltinFileLoadPath(bundle); options.ImportFilePath = GetBuildinFileLoadPath(bundle);
return _unpackFileSystem.DownloadFileAsync(bundle, options); return _unpackFileSystem.DownloadFileAsync(bundle, options);
} }
public virtual FSLoadBundleOperation LoadBundleFile(PackageBundle bundle) public virtual FSLoadBundleOperation LoadBundleFile(PackageBundle bundle)
@@ -153,7 +158,7 @@ namespace YooAsset
} }
else else
{ {
string error = $"{nameof(DefaultBuiltinFileSystem)} not support load bundle type : {bundle.BundleType}"; string error = $"{nameof(DefaultBuildinFileSystem)} not support load bundle type : {bundle.BundleType}";
var operation = new FSLoadBundleCompleteOperation(error); var operation = new FSLoadBundleCompleteOperation(error);
return operation; return operation;
} }
@@ -184,11 +189,15 @@ namespace YooAsset
} }
else if (name == FileSystemParametersDefine.COPY_BUILDIN_PACKAGE_MANIFEST) else if (name == FileSystemParametersDefine.COPY_BUILDIN_PACKAGE_MANIFEST)
{ {
CopyBuiltinPackageManifest = Convert.ToBoolean(value); CopyBuildinPackageManifest = Convert.ToBoolean(value);
} }
else if (name == FileSystemParametersDefine.COPY_BUILDIN_PACKAGE_MANIFEST_DEST_ROOT) else if (name == FileSystemParametersDefine.COPY_BUILDIN_PACKAGE_MANIFEST_DEST_ROOT)
{ {
CopyBuiltinPackageManifestDestRoot = (string)value; CopyBuildinPackageManifestDestRoot = (string)value;
}
else if (name == FileSystemParametersDefine.UNPACK_FILE_SYSTEM_ROOT)
{
UnpackFileSystemRoot = (string)value;
} }
else if (name == FileSystemParametersDefine.DECRYPTION_SERVICES) else if (name == FileSystemParametersDefine.DECRYPTION_SERVICES)
{ {
@@ -212,7 +221,7 @@ namespace YooAsset
PackageName = packageName; PackageName = packageName;
if (string.IsNullOrEmpty(packageRoot)) if (string.IsNullOrEmpty(packageRoot))
_packageRoot = GetDefaultBuiltinPackageRoot(packageName); _packageRoot = GetDefaultBuildinPackageRoot(packageName);
else else
_packageRoot = packageRoot; _packageRoot = packageRoot;
@@ -226,7 +235,7 @@ namespace YooAsset
_unpackFileSystem.SetParameter(FileSystemParametersDefine.APPEND_FILE_EXTENSION, AppendFileExtension); _unpackFileSystem.SetParameter(FileSystemParametersDefine.APPEND_FILE_EXTENSION, AppendFileExtension);
_unpackFileSystem.SetParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, DecryptionServices); _unpackFileSystem.SetParameter(FileSystemParametersDefine.DECRYPTION_SERVICES, DecryptionServices);
_unpackFileSystem.SetParameter(FileSystemParametersDefine.COPY_LOCAL_FILE_SERVICES, CopyLocalFileServices); _unpackFileSystem.SetParameter(FileSystemParametersDefine.COPY_LOCAL_FILE_SERVICES, CopyLocalFileServices);
_unpackFileSystem.OnCreate(packageName, null); _unpackFileSystem.OnCreate(packageName, UnpackFileSystemRoot);
} }
public virtual void OnDestroy() public virtual void OnDestroy()
{ {
@@ -269,7 +278,7 @@ namespace YooAsset
if (IsUnpackBundleFile(bundle)) if (IsUnpackBundleFile(bundle))
return _unpackFileSystem.GetBundleFilePath(bundle); return _unpackFileSystem.GetBundleFilePath(bundle);
return GetBuiltinFileLoadPath(bundle); return GetBuildinFileLoadPath(bundle);
} }
public virtual byte[] ReadBundleFileData(PackageBundle bundle) public virtual byte[] ReadBundleFileData(PackageBundle bundle)
{ {
@@ -281,7 +290,7 @@ namespace YooAsset
#if UNITY_ANDROID #if UNITY_ANDROID
//TODO : 安卓平台内置文件属于APK压缩包内的文件。 //TODO : 安卓平台内置文件属于APK压缩包内的文件。
YooLogger.Error($"Android platform not support read builtin bundle file data !"); YooLogger.Error($"Android platform not support read buildin bundle file data !");
return null; return null;
#else #else
if (bundle.Encrypted) if (bundle.Encrypted)
@@ -292,7 +301,7 @@ namespace YooAsset
return null; return null;
} }
string filePath = GetBuiltinFileLoadPath(bundle); string filePath = GetBuildinFileLoadPath(bundle);
var fileInfo = new DecryptFileInfo() var fileInfo = new DecryptFileInfo()
{ {
BundleName = bundle.BundleName, BundleName = bundle.BundleName,
@@ -303,7 +312,7 @@ namespace YooAsset
} }
else else
{ {
string filePath = GetBuiltinFileLoadPath(bundle); string filePath = GetBuildinFileLoadPath(bundle);
return FileUtility.ReadAllBytes(filePath); return FileUtility.ReadAllBytes(filePath);
} }
#endif #endif
@@ -318,7 +327,7 @@ namespace YooAsset
#if UNITY_ANDROID #if UNITY_ANDROID
//TODO : 安卓平台内置文件属于APK压缩包内的文件。 //TODO : 安卓平台内置文件属于APK压缩包内的文件。
YooLogger.Error($"Android platform not support read builtin bundle file text !"); YooLogger.Error($"Android platform not support read buildin bundle file text !");
return null; return null;
#else #else
if (bundle.Encrypted) if (bundle.Encrypted)
@@ -329,7 +338,7 @@ namespace YooAsset
return null; return null;
} }
string filePath = GetBuiltinFileLoadPath(bundle); string filePath = GetBuildinFileLoadPath(bundle);
var fileInfo = new DecryptFileInfo() var fileInfo = new DecryptFileInfo()
{ {
BundleName = bundle.BundleName, BundleName = bundle.BundleName,
@@ -340,7 +349,7 @@ namespace YooAsset
} }
else else
{ {
string filePath = GetBuiltinFileLoadPath(bundle); string filePath = GetBuildinFileLoadPath(bundle);
return FileUtility.ReadAllText(filePath); return FileUtility.ReadAllText(filePath);
} }
#endif #endif
@@ -368,38 +377,38 @@ namespace YooAsset
} }
#region #region
protected string GetDefaultBuiltinPackageRoot(string packageName) protected string GetDefaultBuildinPackageRoot(string packageName)
{ {
string rootDirectory = YooAssetSettingsData.GetYooDefaultBuiltinRoot(); string rootDirectory = YooAssetSettingsData.GetYooDefaultBuildinRoot();
return PathUtility.Combine(rootDirectory, packageName); return PathUtility.Combine(rootDirectory, packageName);
} }
public string GetBuiltinFileLoadPath(PackageBundle bundle) public string GetBuildinFileLoadPath(PackageBundle bundle)
{ {
if (_builtinFilePathMapping.TryGetValue(bundle.BundleGUID, out string filePath) == false) if (_buildinFilePathMapping.TryGetValue(bundle.BundleGUID, out string filePath) == false)
{ {
filePath = PathUtility.Combine(_packageRoot, bundle.FileName); filePath = PathUtility.Combine(_packageRoot, bundle.FileName);
_builtinFilePathMapping.Add(bundle.BundleGUID, filePath); _buildinFilePathMapping.Add(bundle.BundleGUID, filePath);
} }
return filePath; return filePath;
} }
public string GetBuiltinPackageVersionFilePath() public string GetBuildinPackageVersionFilePath()
{ {
string fileName = YooAssetSettingsData.GetPackageVersionFileName(PackageName); string fileName = YooAssetSettingsData.GetPackageVersionFileName(PackageName);
return PathUtility.Combine(_packageRoot, fileName); return PathUtility.Combine(_packageRoot, fileName);
} }
public string GetBuiltinPackageHashFilePath(string packageVersion) public string GetBuildinPackageHashFilePath(string packageVersion)
{ {
string fileName = YooAssetSettingsData.GetPackageHashFileName(PackageName, packageVersion); string fileName = YooAssetSettingsData.GetPackageHashFileName(PackageName, packageVersion);
return PathUtility.Combine(_packageRoot, fileName); return PathUtility.Combine(_packageRoot, fileName);
} }
public string GetBuiltinPackageManifestFilePath(string packageVersion) public string GetBuildinPackageManifestFilePath(string packageVersion)
{ {
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(PackageName, packageVersion); string fileName = YooAssetSettingsData.GetManifestBinaryFileName(PackageName, packageVersion);
return PathUtility.Combine(_packageRoot, fileName); return PathUtility.Combine(_packageRoot, fileName);
} }
public string GetCatalogBinaryFileLoadPath() public string GetCatalogBinaryFileLoadPath()
{ {
return PathUtility.Combine(_packageRoot, DefaultBuiltinFileSystemDefine.BuiltinCatalogBinaryFileName); return PathUtility.Combine(_packageRoot, DefaultBuildinFileSystemDefine.BuildinCatalogBinaryFileName);
} }
/// <summary> /// <summary>
@@ -409,7 +418,7 @@ namespace YooAsset
{ {
if (_wrappers.ContainsKey(bundleGUID)) if (_wrappers.ContainsKey(bundleGUID))
{ {
YooLogger.Error($"{nameof(DefaultBuiltinFileSystem)} has element : {bundleGUID}"); YooLogger.Error($"{nameof(DefaultBuildinFileSystem)} has element : {bundleGUID}");
return false; return false;
} }
@@ -430,7 +439,7 @@ namespace YooAsset
/// </summary> /// </summary>
public DecryptResult LoadEncryptedAssetBundle(PackageBundle bundle) public DecryptResult LoadEncryptedAssetBundle(PackageBundle bundle)
{ {
string filePath = GetBuiltinFileLoadPath(bundle); string filePath = GetBuildinFileLoadPath(bundle);
var fileInfo = new DecryptFileInfo() var fileInfo = new DecryptFileInfo()
{ {
BundleName = bundle.BundleName, BundleName = bundle.BundleName,
@@ -445,7 +454,7 @@ namespace YooAsset
/// </summary> /// </summary>
public DecryptResult LoadEncryptedAssetBundleAsync(PackageBundle bundle) public DecryptResult LoadEncryptedAssetBundleAsync(PackageBundle bundle)
{ {
string filePath = GetBuiltinFileLoadPath(bundle); string filePath = GetBuildinFileLoadPath(bundle);
var fileInfo = new DecryptFileInfo() var fileInfo = new DecryptFileInfo()
{ {
BundleName = bundle.BundleName, BundleName = bundle.BundleName,

View File

@@ -1,16 +1,16 @@
 
namespace YooAsset namespace YooAsset
{ {
internal class DefaultBuiltinFileSystemDefine internal class DefaultBuildinFileSystemDefine
{ {
/// <summary> /// <summary>
/// 内置清单JSON文件名称 /// 内置清单JSON文件名称
/// </summary> /// </summary>
public const string BuiltinCatalogJsonFileName = "BuiltinCatalog.json"; public const string BuildinCatalogJsonFileName = "BuildinCatalog.json";
/// <summary> /// <summary>
/// 内置清单二进制文件名称 /// 内置清单二进制文件名称
/// </summary> /// </summary>
public const string BuiltinCatalogBinaryFileName = "BuiltinCatalog.bytes"; public const string BuildinCatalogBinaryFileName = "BuildinCatalog.bytes";
} }
} }

View File

@@ -8,23 +8,23 @@ namespace YooAsset
private enum ESteps private enum ESteps
{ {
None, None,
LoadBuiltinPackageVersion, LoadBuildinPackageVersion,
CopyBuiltinPackageHash, CopyBuildinPackageHash,
CopyBuiltinPackageManifest, CopyBuildinPackageManifest,
InitUnpackFileSystem, InitUnpackFileSystem,
LoadCatalogFile, LoadCatalogFile,
Done, Done,
} }
private readonly DefaultBuiltinFileSystem _fileSystem; private readonly DefaultBuildinFileSystem _fileSystem;
private RequestBuiltinPackageVersionOperation _requestBuiltinPackageVersionOp; private RequestBuildinPackageVersionOperation _requestBuildinPackageVersionOp;
private CopyBuiltinFileOperation _copyBuiltinHashFileOp; private CopyBuildinFileOperation _copyBuildinHashFileOp;
private CopyBuiltinFileOperation _copyBuiltinManifestFileOp; private CopyBuildinFileOperation _copyBuildinManifestFileOp;
private FSInitializeFileSystemOperation _initUnpackFIleSystemOp; private FSInitializeFileSystemOperation _initUnpackFIleSystemOp;
private LoadBuiltinCatalogFileOperation _loadBuiltinCatalogFileOp; private LoadBuildinCatalogFileOperation _loadBuildinCatalogFileOp;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
internal DBFSInitializeOperation(DefaultBuiltinFileSystem fileSystem) internal DBFSInitializeOperation(DefaultBuildinFileSystem fileSystem)
{ {
_fileSystem = fileSystem; _fileSystem = fileSystem;
} }
@@ -33,10 +33,10 @@ namespace YooAsset
#if UNITY_WEBGL #if UNITY_WEBGL
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = $"{nameof(DefaultBuiltinFileSystem)} is not support WEBGL platform !"; Error = $"{nameof(DefaultBuildinFileSystem)} is not support WEBGL platform !";
#else #else
if (_fileSystem.CopyBuiltinPackageManifest) if (_fileSystem.CopyBuildinPackageManifest)
_steps = ESteps.LoadBuiltinPackageVersion; _steps = ESteps.LoadBuildinPackageVersion;
else else
_steps = ESteps.InitUnpackFileSystem; _steps = ESteps.InitUnpackFileSystem;
#endif #endif
@@ -46,76 +46,76 @@ namespace YooAsset
if (_steps == ESteps.None || _steps == ESteps.Done) if (_steps == ESteps.None || _steps == ESteps.Done)
return; return;
if (_steps == ESteps.LoadBuiltinPackageVersion) if (_steps == ESteps.LoadBuildinPackageVersion)
{ {
if (_requestBuiltinPackageVersionOp == null) if (_requestBuildinPackageVersionOp == null)
{ {
_requestBuiltinPackageVersionOp = new RequestBuiltinPackageVersionOperation(_fileSystem); _requestBuildinPackageVersionOp = new RequestBuildinPackageVersionOperation(_fileSystem);
_requestBuiltinPackageVersionOp.StartOperation(); _requestBuildinPackageVersionOp.StartOperation();
AddChildOperation(_requestBuiltinPackageVersionOp); AddChildOperation(_requestBuildinPackageVersionOp);
} }
_requestBuiltinPackageVersionOp.UpdateOperation(); _requestBuildinPackageVersionOp.UpdateOperation();
if (_requestBuiltinPackageVersionOp.IsDone == false) if (_requestBuildinPackageVersionOp.IsDone == false)
return; return;
if (_requestBuiltinPackageVersionOp.Status == EOperationStatus.Succeed) if (_requestBuildinPackageVersionOp.Status == EOperationStatus.Succeed)
{ {
_steps = ESteps.CopyBuiltinPackageHash; _steps = ESteps.CopyBuildinPackageHash;
} }
else else
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = _requestBuiltinPackageVersionOp.Error; Error = _requestBuildinPackageVersionOp.Error;
} }
} }
if (_steps == ESteps.CopyBuiltinPackageHash) if (_steps == ESteps.CopyBuildinPackageHash)
{ {
if (_copyBuiltinHashFileOp == null) if (_copyBuildinHashFileOp == null)
{ {
string packageVersion = _requestBuiltinPackageVersionOp.PackageVersion; string packageVersion = _requestBuildinPackageVersionOp.PackageVersion;
string destFilePath = GetCopyPackageHashDestPath(packageVersion); string destFilePath = GetCopyPackageHashDestPath(packageVersion);
string sourceFilePath = _fileSystem.GetBuiltinPackageHashFilePath(packageVersion); string sourceFilePath = _fileSystem.GetBuildinPackageHashFilePath(packageVersion);
_copyBuiltinHashFileOp = new CopyBuiltinFileOperation(sourceFilePath, destFilePath); _copyBuildinHashFileOp = new CopyBuildinFileOperation(sourceFilePath, destFilePath);
_copyBuiltinHashFileOp.StartOperation(); _copyBuildinHashFileOp.StartOperation();
AddChildOperation(_copyBuiltinHashFileOp); AddChildOperation(_copyBuildinHashFileOp);
} }
_copyBuiltinHashFileOp.UpdateOperation(); _copyBuildinHashFileOp.UpdateOperation();
if (_copyBuiltinHashFileOp.IsDone == false) if (_copyBuildinHashFileOp.IsDone == false)
return; return;
if (_copyBuiltinHashFileOp.Status == EOperationStatus.Succeed) if (_copyBuildinHashFileOp.Status == EOperationStatus.Succeed)
{ {
_steps = ESteps.CopyBuiltinPackageManifest; _steps = ESteps.CopyBuildinPackageManifest;
} }
else else
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = _copyBuiltinHashFileOp.Error; Error = _copyBuildinHashFileOp.Error;
} }
} }
if (_steps == ESteps.CopyBuiltinPackageManifest) if (_steps == ESteps.CopyBuildinPackageManifest)
{ {
if (_copyBuiltinManifestFileOp == null) if (_copyBuildinManifestFileOp == null)
{ {
string packageVersion = _requestBuiltinPackageVersionOp.PackageVersion; string packageVersion = _requestBuildinPackageVersionOp.PackageVersion;
string destFilePath = GetCopyPackageManifestDestPath(packageVersion); string destFilePath = GetCopyPackageManifestDestPath(packageVersion);
string sourceFilePath = _fileSystem.GetBuiltinPackageManifestFilePath(packageVersion); string sourceFilePath = _fileSystem.GetBuildinPackageManifestFilePath(packageVersion);
_copyBuiltinManifestFileOp = new CopyBuiltinFileOperation(sourceFilePath, destFilePath); _copyBuildinManifestFileOp = new CopyBuildinFileOperation(sourceFilePath, destFilePath);
_copyBuiltinManifestFileOp.StartOperation(); _copyBuildinManifestFileOp.StartOperation();
AddChildOperation(_copyBuiltinManifestFileOp); AddChildOperation(_copyBuildinManifestFileOp);
} }
_copyBuiltinManifestFileOp.UpdateOperation(); _copyBuildinManifestFileOp.UpdateOperation();
if (_copyBuiltinManifestFileOp.IsDone == false) if (_copyBuildinManifestFileOp.IsDone == false)
return; return;
if (_copyBuiltinManifestFileOp.Status == EOperationStatus.Succeed) if (_copyBuildinManifestFileOp.Status == EOperationStatus.Succeed)
{ {
_steps = ESteps.InitUnpackFileSystem; _steps = ESteps.InitUnpackFileSystem;
} }
@@ -123,7 +123,7 @@ namespace YooAsset
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = _copyBuiltinManifestFileOp.Error; Error = _copyBuildinManifestFileOp.Error;
} }
} }
@@ -163,20 +163,20 @@ namespace YooAsset
if (_steps == ESteps.LoadCatalogFile) if (_steps == ESteps.LoadCatalogFile)
{ {
if (_loadBuiltinCatalogFileOp == null) if (_loadBuildinCatalogFileOp == null)
{ {
_loadBuiltinCatalogFileOp = new LoadBuiltinCatalogFileOperation(_fileSystem); _loadBuildinCatalogFileOp = new LoadBuildinCatalogFileOperation(_fileSystem);
_loadBuiltinCatalogFileOp.StartOperation(); _loadBuildinCatalogFileOp.StartOperation();
AddChildOperation(_loadBuiltinCatalogFileOp); AddChildOperation(_loadBuildinCatalogFileOp);
} }
_loadBuiltinCatalogFileOp.UpdateOperation(); _loadBuildinCatalogFileOp.UpdateOperation();
if (_loadBuiltinCatalogFileOp.IsDone == false) if (_loadBuildinCatalogFileOp.IsDone == false)
return; return;
if (_loadBuiltinCatalogFileOp.Status == EOperationStatus.Succeed) if (_loadBuildinCatalogFileOp.Status == EOperationStatus.Succeed)
{ {
var catalog = _loadBuiltinCatalogFileOp.Catalog; var catalog = _loadBuildinCatalogFileOp.Catalog;
if (catalog == null) if (catalog == null)
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
@@ -195,11 +195,11 @@ namespace YooAsset
foreach (var wrapper in catalog.Wrappers) foreach (var wrapper in catalog.Wrappers)
{ {
var fileWrapper = new DefaultBuiltinFileSystem.FileWrapper(wrapper.FileName); var fileWrapper = new DefaultBuildinFileSystem.FileWrapper(wrapper.FileName);
_fileSystem.RecordCatalogFile(wrapper.BundleGUID, fileWrapper); _fileSystem.RecordCatalogFile(wrapper.BundleGUID, fileWrapper);
} }
YooLogger.Log($"Package '{_fileSystem.PackageName}' builtin catalog files count : {catalog.Wrappers.Count}"); YooLogger.Log($"Package '{_fileSystem.PackageName}' buildin catalog files count : {catalog.Wrappers.Count}");
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Succeed; Status = EOperationStatus.Succeed;
} }
@@ -207,14 +207,14 @@ namespace YooAsset
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = _loadBuiltinCatalogFileOp.Error; Error = _loadBuildinCatalogFileOp.Error;
} }
} }
} }
private string GetCopyManifestFileRoot() private string GetCopyManifestFileRoot()
{ {
string destRoot = _fileSystem.CopyBuiltinPackageManifestDestRoot; string destRoot = _fileSystem.CopyBuildinPackageManifestDestRoot;
if (string.IsNullOrEmpty(destRoot)) if (string.IsNullOrEmpty(destRoot))
{ {
string defaultCacheRoot = YooAssetSettingsData.GetYooDefaultCacheRoot(); string defaultCacheRoot = YooAssetSettingsData.GetYooDefaultCacheRoot();

View File

@@ -16,7 +16,7 @@ namespace YooAsset
Done, Done,
} }
private readonly DefaultBuiltinFileSystem _fileSystem; private readonly DefaultBuildinFileSystem _fileSystem;
private readonly PackageBundle _bundle; private readonly PackageBundle _bundle;
private AssetBundleCreateRequest _createRequest; private AssetBundleCreateRequest _createRequest;
private AssetBundle _assetBundle; private AssetBundle _assetBundle;
@@ -24,7 +24,7 @@ namespace YooAsset
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
internal DBFSLoadAssetBundleOperation(DefaultBuiltinFileSystem fileSystem, PackageBundle bundle) internal DBFSLoadAssetBundleOperation(DefaultBuildinFileSystem fileSystem, PackageBundle bundle)
{ {
_fileSystem = fileSystem; _fileSystem = fileSystem;
_bundle = bundle; _bundle = bundle;
@@ -64,7 +64,7 @@ namespace YooAsset
} }
else else
{ {
string filePath = _fileSystem.GetBuiltinFileLoadPath(_bundle); string filePath = _fileSystem.GetBuildinFileLoadPath(_bundle);
_assetBundle = AssetBundle.LoadFromFile(filePath); _assetBundle = AssetBundle.LoadFromFile(filePath);
} }
} }
@@ -78,7 +78,7 @@ namespace YooAsset
} }
else else
{ {
string filePath = _fileSystem.GetBuiltinFileLoadPath(_bundle); string filePath = _fileSystem.GetBuildinFileLoadPath(_bundle);
_createRequest = AssetBundle.LoadFromFileAsync(filePath); _createRequest = AssetBundle.LoadFromFileAsync(filePath);
} }
} }
@@ -110,14 +110,14 @@ namespace YooAsset
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = $"Failed to load encrypted builtin asset bundle file : {_bundle.BundleName}"; Error = $"Failed to load encrypted buildin asset bundle file : {_bundle.BundleName}";
YooLogger.Error(Error); YooLogger.Error(Error);
} }
else else
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = $"Failed to load builtin asset bundle file : {_bundle.BundleName}"; Error = $"Failed to load buildin asset bundle file : {_bundle.BundleName}";
YooLogger.Error(Error); YooLogger.Error(Error);
} }
} }
@@ -150,16 +150,16 @@ namespace YooAsset
private enum ESteps private enum ESteps
{ {
None, None,
LoadBuiltinRawBundle, LoadBuildinRawBundle,
Done, Done,
} }
private readonly DefaultBuiltinFileSystem _fileSystem; private readonly DefaultBuildinFileSystem _fileSystem;
private readonly PackageBundle _bundle; private readonly PackageBundle _bundle;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
internal DBFSLoadRawBundleOperation(DefaultBuiltinFileSystem fileSystem, PackageBundle bundle) internal DBFSLoadRawBundleOperation(DefaultBuildinFileSystem fileSystem, PackageBundle bundle)
{ {
_fileSystem = fileSystem; _fileSystem = fileSystem;
_bundle = bundle; _bundle = bundle;
@@ -168,22 +168,22 @@ namespace YooAsset
{ {
DownloadProgress = 1f; DownloadProgress = 1f;
DownloadedBytes = _bundle.FileSize; DownloadedBytes = _bundle.FileSize;
_steps = ESteps.LoadBuiltinRawBundle; _steps = ESteps.LoadBuildinRawBundle;
} }
internal override void InternalUpdate() internal override void InternalUpdate()
{ {
if (_steps == ESteps.None || _steps == ESteps.Done) if (_steps == ESteps.None || _steps == ESteps.Done)
return; return;
if (_steps == ESteps.LoadBuiltinRawBundle) if (_steps == ESteps.LoadBuildinRawBundle)
{ {
string filePath = _fileSystem.GetBuiltinFileLoadPath(_bundle); string filePath = _fileSystem.GetBuildinFileLoadPath(_bundle);
#if UNITY_ANDROID #if UNITY_ANDROID
//TODO : 安卓平台内置文件属于APK压缩包内的文件。 //TODO : 安卓平台内置文件属于APK压缩包内的文件。
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = $"Can not load android builtin raw bundle file : {filePath}"; Error = $"Can not load android buildin raw bundle file : {filePath}";
YooLogger.Error(Error); YooLogger.Error(Error);
#else #else
if (File.Exists(filePath)) if (File.Exists(filePath))
@@ -196,7 +196,7 @@ namespace YooAsset
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = $"Can not found builtin raw bundle file : {filePath}"; Error = $"Can not found buildin raw bundle file : {filePath}";
YooLogger.Error(Error); YooLogger.Error(Error);
} }
#endif #endif

View File

@@ -0,0 +1,89 @@

namespace YooAsset
{
internal class DBFSLoadPackageManifestOperation : FSLoadPackageManifestOperation
{
private enum ESteps
{
None,
RequestBuildinPackageHash,
LoadBuildinPackageManifest,
Done,
}
private readonly DefaultBuildinFileSystem _fileSystem;
private readonly string _packageVersion;
private RequestBuildinPackageHashOperation _requestBuildinPackageHashOp;
private LoadBuildinPackageManifestOperation _loadBuildinPackageManifestOp;
private ESteps _steps = ESteps.None;
public DBFSLoadPackageManifestOperation(DefaultBuildinFileSystem fileSystem, string packageVersion)
{
_fileSystem = fileSystem;
_packageVersion = packageVersion;
}
internal override void InternalStart()
{
_steps = ESteps.RequestBuildinPackageHash;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
if (_steps == ESteps.RequestBuildinPackageHash)
{
if (_requestBuildinPackageHashOp == null)
{
_requestBuildinPackageHashOp = new RequestBuildinPackageHashOperation(_fileSystem, _packageVersion);
_requestBuildinPackageHashOp.StartOperation();
AddChildOperation(_requestBuildinPackageHashOp);
}
_requestBuildinPackageHashOp.UpdateOperation();
if (_requestBuildinPackageHashOp.IsDone == false)
return;
if (_requestBuildinPackageHashOp.Status == EOperationStatus.Succeed)
{
_steps = ESteps.LoadBuildinPackageManifest;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = _requestBuildinPackageHashOp.Error;
}
}
if (_steps == ESteps.LoadBuildinPackageManifest)
{
if (_loadBuildinPackageManifestOp == null)
{
string packageHash = _requestBuildinPackageHashOp.PackageHash;
_loadBuildinPackageManifestOp = new LoadBuildinPackageManifestOperation(_fileSystem, _packageVersion, packageHash);
_loadBuildinPackageManifestOp.StartOperation();
AddChildOperation(_loadBuildinPackageManifestOp);
}
_loadBuildinPackageManifestOp.UpdateOperation();
if (_loadBuildinPackageManifestOp.IsDone == false)
return;
if (_loadBuildinPackageManifestOp.Status == EOperationStatus.Succeed)
{
_steps = ESteps.Done;
Manifest = _loadBuildinPackageManifestOp.Manifest;
Status = EOperationStatus.Succeed;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = _loadBuildinPackageManifestOp.Error;
}
}
}
}
}

View File

@@ -10,12 +10,12 @@ namespace YooAsset
Done, Done,
} }
private readonly DefaultBuiltinFileSystem _fileSystem; private readonly DefaultBuildinFileSystem _fileSystem;
private RequestBuiltinPackageVersionOperation _requestBuiltinPackageVersionOp; private RequestBuildinPackageVersionOperation _requestBuildinPackageVersionOp;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
internal DBFSRequestPackageVersionOperation(DefaultBuiltinFileSystem fileSystem) internal DBFSRequestPackageVersionOperation(DefaultBuildinFileSystem fileSystem)
{ {
_fileSystem = fileSystem; _fileSystem = fileSystem;
} }
@@ -30,28 +30,28 @@ namespace YooAsset
if (_steps == ESteps.RequestPackageVersion) if (_steps == ESteps.RequestPackageVersion)
{ {
if (_requestBuiltinPackageVersionOp == null) if (_requestBuildinPackageVersionOp == null)
{ {
_requestBuiltinPackageVersionOp = new RequestBuiltinPackageVersionOperation(_fileSystem); _requestBuildinPackageVersionOp = new RequestBuildinPackageVersionOperation(_fileSystem);
_requestBuiltinPackageVersionOp.StartOperation(); _requestBuildinPackageVersionOp.StartOperation();
AddChildOperation(_requestBuiltinPackageVersionOp); AddChildOperation(_requestBuildinPackageVersionOp);
} }
_requestBuiltinPackageVersionOp.UpdateOperation(); _requestBuildinPackageVersionOp.UpdateOperation();
if (_requestBuiltinPackageVersionOp.IsDone == false) if (_requestBuildinPackageVersionOp.IsDone == false)
return; return;
if (_requestBuiltinPackageVersionOp.Status == EOperationStatus.Succeed) if (_requestBuildinPackageVersionOp.Status == EOperationStatus.Succeed)
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
PackageVersion = _requestBuiltinPackageVersionOp.PackageVersion; PackageVersion = _requestBuildinPackageVersionOp.PackageVersion;
Status = EOperationStatus.Succeed; Status = EOperationStatus.Succeed;
} }
else else
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = _requestBuiltinPackageVersionOp.Error; Error = _requestBuildinPackageVersionOp.Error;
} }
} }
} }

View File

@@ -3,7 +3,7 @@ using System.IO;
namespace YooAsset namespace YooAsset
{ {
internal class CopyBuiltinFileOperation : AsyncOperationBase internal class CopyBuildinFileOperation : AsyncOperationBase
{ {
private enum ESteps private enum ESteps
{ {
@@ -19,7 +19,7 @@ namespace YooAsset
private readonly string _destFilePath; private readonly string _destFilePath;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
public CopyBuiltinFileOperation(string sourceFilePath, string destFilePath) public CopyBuildinFileOperation(string sourceFilePath, string destFilePath)
{ {
_sourceFilePath = sourceFilePath; _sourceFilePath = sourceFilePath;
_destFilePath = destFilePath; _destFilePath = destFilePath;
@@ -61,7 +61,7 @@ namespace YooAsset
} }
catch (Exception ex) catch (Exception ex)
{ {
YooLogger.Warning($"Failed copy builtin file : {ex.Message}"); YooLogger.Warning($"Failed copy buildin file : {ex.Message}");
_steps = ESteps.UnpackFile; _steps = ESteps.UnpackFile;
} }
} }

View File

@@ -3,7 +3,7 @@ using System.IO;
namespace YooAsset namespace YooAsset
{ {
internal sealed class LoadBuiltinCatalogFileOperation : AsyncOperationBase internal sealed class LoadBuildinCatalogFileOperation : AsyncOperationBase
{ {
private enum ESteps private enum ESteps
{ {
@@ -14,7 +14,7 @@ namespace YooAsset
Done, Done,
} }
private readonly DefaultBuiltinFileSystem _fileSystem; private readonly DefaultBuildinFileSystem _fileSystem;
private UnityWebDataRequestOperation _webDataRequestOp; private UnityWebDataRequestOperation _webDataRequestOp;
private byte[] _fileData; private byte[] _fileData;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
@@ -22,9 +22,9 @@ namespace YooAsset
/// <summary> /// <summary>
/// 内置资源目录 /// 内置资源目录
/// </summary> /// </summary>
public DefaultBuiltinFileCatalog Catalog; public DefaultBuildinFileCatalog Catalog;
internal LoadBuiltinCatalogFileOperation(DefaultBuiltinFileSystem fileSystem) internal LoadBuildinCatalogFileOperation(DefaultBuildinFileSystem fileSystem)
{ {
_fileSystem = fileSystem; _fileSystem = fileSystem;
} }

View File

@@ -2,7 +2,7 @@
namespace YooAsset namespace YooAsset
{ {
internal class LoadBuiltinPackageManifestOperation : AsyncOperationBase internal class LoadBuildinPackageManifestOperation : AsyncOperationBase
{ {
private enum ESteps private enum ESteps
{ {
@@ -14,7 +14,7 @@ namespace YooAsset
Done, Done,
} }
private readonly DefaultBuiltinFileSystem _fileSystem; private readonly DefaultBuildinFileSystem _fileSystem;
private readonly string _packageVersion; private readonly string _packageVersion;
private readonly string _packageHash; private readonly string _packageHash;
private UnityWebDataRequestOperation _webDataRequestOp; private UnityWebDataRequestOperation _webDataRequestOp;
@@ -28,7 +28,7 @@ namespace YooAsset
public PackageManifest Manifest { private set; get; } public PackageManifest Manifest { private set; get; }
internal LoadBuiltinPackageManifestOperation(DefaultBuiltinFileSystem fileSystem, string packageVersion, string packageHash) internal LoadBuildinPackageManifestOperation(DefaultBuildinFileSystem fileSystem, string packageVersion, string packageHash)
{ {
_fileSystem = fileSystem; _fileSystem = fileSystem;
_packageVersion = packageVersion; _packageVersion = packageVersion;
@@ -45,7 +45,7 @@ namespace YooAsset
if (_steps == ESteps.TryLoadFileData) if (_steps == ESteps.TryLoadFileData)
{ {
string filePath = _fileSystem.GetBuiltinPackageManifestFilePath(_packageVersion); string filePath = _fileSystem.GetBuildinPackageManifestFilePath(_packageVersion);
if (File.Exists(filePath)) if (File.Exists(filePath))
{ {
_fileData = File.ReadAllBytes(filePath); _fileData = File.ReadAllBytes(filePath);
@@ -61,7 +61,7 @@ namespace YooAsset
{ {
if (_webDataRequestOp == null) if (_webDataRequestOp == null)
{ {
string filePath = _fileSystem.GetBuiltinPackageManifestFilePath(_packageVersion); string filePath = _fileSystem.GetBuildinPackageManifestFilePath(_packageVersion);
string url = DownloadSystemHelper.ConvertToWWWPath(filePath); string url = DownloadSystemHelper.ConvertToWWWPath(filePath);
_webDataRequestOp = new UnityWebDataRequestOperation(url, 60); _webDataRequestOp = new UnityWebDataRequestOperation(url, 60);
_webDataRequestOp.StartOperation(); _webDataRequestOp.StartOperation();
@@ -95,7 +95,7 @@ namespace YooAsset
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = "Failed to verify builtin package manifest file !"; Error = "Failed to verify buildin package manifest file !";
} }
} }

View File

@@ -2,7 +2,7 @@
namespace YooAsset namespace YooAsset
{ {
internal class RequestBuiltinPackageHashOperation : AsyncOperationBase internal class RequestBuildinPackageHashOperation : AsyncOperationBase
{ {
private enum ESteps private enum ESteps
{ {
@@ -13,7 +13,7 @@ namespace YooAsset
Done, Done,
} }
private readonly DefaultBuiltinFileSystem _fileSystem; private readonly DefaultBuildinFileSystem _fileSystem;
private readonly string _packageVersion; private readonly string _packageVersion;
private UnityWebTextRequestOperation _webTextRequestOp; private UnityWebTextRequestOperation _webTextRequestOp;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
@@ -24,7 +24,7 @@ namespace YooAsset
public string PackageHash { private set; get; } public string PackageHash { private set; get; }
internal RequestBuiltinPackageHashOperation(DefaultBuiltinFileSystem fileSystem, string packageVersion) internal RequestBuildinPackageHashOperation(DefaultBuildinFileSystem fileSystem, string packageVersion)
{ {
_fileSystem = fileSystem; _fileSystem = fileSystem;
_packageVersion = packageVersion; _packageVersion = packageVersion;
@@ -40,7 +40,7 @@ namespace YooAsset
if (_steps == ESteps.TryLoadPackageHash) if (_steps == ESteps.TryLoadPackageHash)
{ {
string filePath = _fileSystem.GetBuiltinPackageHashFilePath(_packageVersion); string filePath = _fileSystem.GetBuildinPackageHashFilePath(_packageVersion);
if (File.Exists(filePath)) if (File.Exists(filePath))
{ {
PackageHash = File.ReadAllText(filePath); PackageHash = File.ReadAllText(filePath);
@@ -56,7 +56,7 @@ namespace YooAsset
{ {
if (_webTextRequestOp == null) if (_webTextRequestOp == null)
{ {
string filePath = _fileSystem.GetBuiltinPackageHashFilePath(_packageVersion); string filePath = _fileSystem.GetBuildinPackageHashFilePath(_packageVersion);
string url = DownloadSystemHelper.ConvertToWWWPath(filePath); string url = DownloadSystemHelper.ConvertToWWWPath(filePath);
_webTextRequestOp = new UnityWebTextRequestOperation(url, 60); _webTextRequestOp = new UnityWebTextRequestOperation(url, 60);
_webTextRequestOp.StartOperation(); _webTextRequestOp.StartOperation();
@@ -86,7 +86,7 @@ namespace YooAsset
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = $"Builtin package hash file content is empty !"; Error = $"Buildin package hash file content is empty !";
} }
else else
{ {

View File

@@ -2,7 +2,7 @@
namespace YooAsset namespace YooAsset
{ {
internal class RequestBuiltinPackageVersionOperation : AsyncOperationBase internal class RequestBuildinPackageVersionOperation : AsyncOperationBase
{ {
private enum ESteps private enum ESteps
{ {
@@ -13,7 +13,7 @@ namespace YooAsset
Done, Done,
} }
private readonly DefaultBuiltinFileSystem _fileSystem; private readonly DefaultBuildinFileSystem _fileSystem;
private UnityWebTextRequestOperation _webTextRequestOp; private UnityWebTextRequestOperation _webTextRequestOp;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
@@ -23,7 +23,7 @@ namespace YooAsset
public string PackageVersion { private set; get; } public string PackageVersion { private set; get; }
internal RequestBuiltinPackageVersionOperation(DefaultBuiltinFileSystem fileSystem) internal RequestBuildinPackageVersionOperation(DefaultBuildinFileSystem fileSystem)
{ {
_fileSystem = fileSystem; _fileSystem = fileSystem;
} }
@@ -38,7 +38,7 @@ namespace YooAsset
if (_steps == ESteps.TryLoadPackageVersion) if (_steps == ESteps.TryLoadPackageVersion)
{ {
string filePath = _fileSystem.GetBuiltinPackageVersionFilePath(); string filePath = _fileSystem.GetBuildinPackageVersionFilePath();
if (File.Exists(filePath)) if (File.Exists(filePath))
{ {
PackageVersion = File.ReadAllText(filePath); PackageVersion = File.ReadAllText(filePath);
@@ -54,7 +54,7 @@ namespace YooAsset
{ {
if (_webTextRequestOp == null) if (_webTextRequestOp == null)
{ {
string filePath = _fileSystem.GetBuiltinPackageVersionFilePath(); string filePath = _fileSystem.GetBuildinPackageVersionFilePath();
string url = DownloadSystemHelper.ConvertToWWWPath(filePath); string url = DownloadSystemHelper.ConvertToWWWPath(filePath);
_webTextRequestOp = new UnityWebTextRequestOperation(url, 60); _webTextRequestOp = new UnityWebTextRequestOperation(url, 60);
_webTextRequestOp.StartOperation(); _webTextRequestOp.StartOperation();
@@ -84,7 +84,7 @@ namespace YooAsset
{ {
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = $"Builtin package version file content is empty !"; Error = $"Buildin package version file content is empty !";
} }
else else
{ {

View File

@@ -1,89 +0,0 @@

namespace YooAsset
{
internal class DBFSLoadPackageManifestOperation : FSLoadPackageManifestOperation
{
private enum ESteps
{
None,
RequestBuiltinPackageHash,
LoadBuiltinPackageManifest,
Done,
}
private readonly DefaultBuiltinFileSystem _fileSystem;
private readonly string _packageVersion;
private RequestBuiltinPackageHashOperation _requestBuiltinPackageHashOp;
private LoadBuiltinPackageManifestOperation _loadBuiltinPackageManifestOp;
private ESteps _steps = ESteps.None;
public DBFSLoadPackageManifestOperation(DefaultBuiltinFileSystem fileSystem, string packageVersion)
{
_fileSystem = fileSystem;
_packageVersion = packageVersion;
}
internal override void InternalStart()
{
_steps = ESteps.RequestBuiltinPackageHash;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
if (_steps == ESteps.RequestBuiltinPackageHash)
{
if (_requestBuiltinPackageHashOp == null)
{
_requestBuiltinPackageHashOp = new RequestBuiltinPackageHashOperation(_fileSystem, _packageVersion);
_requestBuiltinPackageHashOp.StartOperation();
AddChildOperation(_requestBuiltinPackageHashOp);
}
_requestBuiltinPackageHashOp.UpdateOperation();
if (_requestBuiltinPackageHashOp.IsDone == false)
return;
if (_requestBuiltinPackageHashOp.Status == EOperationStatus.Succeed)
{
_steps = ESteps.LoadBuiltinPackageManifest;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = _requestBuiltinPackageHashOp.Error;
}
}
if (_steps == ESteps.LoadBuiltinPackageManifest)
{
if (_loadBuiltinPackageManifestOp == null)
{
string packageHash = _requestBuiltinPackageHashOp.PackageHash;
_loadBuiltinPackageManifestOp = new LoadBuiltinPackageManifestOperation(_fileSystem, _packageVersion, packageHash);
_loadBuiltinPackageManifestOp.StartOperation();
AddChildOperation(_loadBuiltinPackageManifestOp);
}
_loadBuiltinPackageManifestOp.UpdateOperation();
if (_loadBuiltinPackageManifestOp.IsDone == false)
return;
if (_loadBuiltinPackageManifestOp.Status == EOperationStatus.Succeed)
{
_steps = ESteps.Done;
Manifest = _loadBuiltinPackageManifestOp.Manifest;
Status = EOperationStatus.Succeed;
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = _loadBuiltinPackageManifestOp.Error;
}
}
}
}
}

View File

@@ -158,6 +158,11 @@ namespace YooAsset
var operation = new ClearUnusedCacheBundleFilesOperation(this, manifest); var operation = new ClearUnusedCacheBundleFilesOperation(this, manifest);
return operation; return operation;
} }
else if (options.ClearMode == EFileClearMode.ClearBundleFilesByLocations.ToString())
{
var operation = new ClearCacheBundleFilesByLocationsOperaiton(this, manifest, options.ClearParam);
return operation;
}
else if (options.ClearMode == EFileClearMode.ClearBundleFilesByTags.ToString()) else if (options.ClearMode == EFileClearMode.ClearBundleFilesByTags.ToString())
{ {
var operation = new ClearCacheBundleFilesByTagsOperaiton(this, manifest, options.ClearParam); var operation = new ClearCacheBundleFilesByTagsOperaiton(this, manifest, options.ClearParam);

View File

@@ -11,6 +11,7 @@ namespace YooAsset
None, None,
CheckExist, CheckExist,
DownloadFile, DownloadFile,
AbortDownload,
LoadAssetBundle, LoadAssetBundle,
CheckResult, CheckResult,
Done, Done,
@@ -63,6 +64,17 @@ namespace YooAsset
} }
} }
if (_steps == ESteps.DownloadFile)
{
// 中断下载
if (AbortDownloadFile)
{
if (_downloadFileOp != null)
_downloadFileOp.AbortOperation();
_steps = ESteps.AbortDownload;
}
}
if (_steps == ESteps.DownloadFile) if (_steps == ESteps.DownloadFile)
{ {
if (_downloadFileOp == null) if (_downloadFileOp == null)
@@ -94,6 +106,23 @@ namespace YooAsset
} }
} }
if (_steps == ESteps.AbortDownload)
{
if (_downloadFileOp != null)
{
if (IsWaitForAsyncComplete)
_downloadFileOp.WaitForAsyncComplete();
_downloadFileOp.UpdateOperation();
if (_downloadFileOp.IsDone == false)
return;
}
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = "Abort download file !";
}
if (_steps == ESteps.LoadAssetBundle) if (_steps == ESteps.LoadAssetBundle)
{ {
if (_bundle.Encrypted) if (_bundle.Encrypted)
@@ -251,6 +280,7 @@ namespace YooAsset
None, None,
CheckExist, CheckExist,
DownloadFile, DownloadFile,
AbortDownload,
LoadCacheRawBundle, LoadCacheRawBundle,
Done, Done,
} }
@@ -310,6 +340,17 @@ namespace YooAsset
} }
} }
if (_steps == ESteps.DownloadFile)
{
// 中断下载
if (AbortDownloadFile)
{
if (_downloadFileOp != null)
_downloadFileOp.AbortOperation();
_steps = ESteps.AbortDownload;
}
}
if (_steps == ESteps.DownloadFile) if (_steps == ESteps.DownloadFile)
{ {
if (_downloadFileOp == null) if (_downloadFileOp == null)
@@ -341,6 +382,23 @@ namespace YooAsset
} }
} }
if (_steps == ESteps.AbortDownload)
{
if (_downloadFileOp != null)
{
if (IsWaitForAsyncComplete)
_downloadFileOp.WaitForAsyncComplete();
_downloadFileOp.UpdateOperation();
if (_downloadFileOp.IsDone == false)
return;
}
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = "Abort download file !";
}
if (_steps == ESteps.LoadCacheRawBundle) if (_steps == ESteps.LoadCacheRawBundle)
{ {
string filePath = _fileSystem.GetCacheBundleFileLoadPath(_bundle); string filePath = _fileSystem.GetCacheBundleFileLoadPath(_bundle);

View File

@@ -0,0 +1,142 @@
using System.Collections.Generic;
namespace YooAsset
{
internal class ClearCacheBundleFilesByLocationsOperaiton : FSClearCacheFilesOperation
{
private enum ESteps
{
None,
CheckManifest,
CheckArgs,
GetClearCacheFiles,
ClearFilterCacheFiles,
Done,
}
private readonly DefaultCacheFileSystem _fileSystem;
private readonly PackageManifest _manifest;
private readonly object _clearParam;
private string[] _locations;
private List<string> _clearBundleGUIDs;
private int _clearFileTotalCount = 0;
private ESteps _steps = ESteps.None;
internal ClearCacheBundleFilesByLocationsOperaiton(DefaultCacheFileSystem fileSystem, PackageManifest manifest, object clearParam)
{
_fileSystem = fileSystem;
_manifest = manifest;
_clearParam = clearParam;
}
internal override void InternalStart()
{
_steps = ESteps.CheckManifest;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
if (_steps == ESteps.CheckManifest)
{
if (_manifest == null)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = "Can not found active package manifest !";
}
else
{
_steps = ESteps.CheckArgs;
}
}
if (_steps == ESteps.CheckArgs)
{
if (_clearParam == null)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = "Clear param is null !";
return;
}
if (_clearParam is string)
{
_locations = new string[] { _clearParam as string };
}
else if (_clearParam is List<string>)
{
var tempList = _clearParam as List<string>;
_locations = tempList.ToArray();
}
else if (_clearParam is string[])
{
_locations = _clearParam as string[];
}
else
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = $"Invalid clear param : {_clearParam.GetType().FullName}";
return;
}
_steps = ESteps.GetClearCacheFiles;
}
if (_steps == ESteps.GetClearCacheFiles)
{
_clearBundleGUIDs = GetBundleGUIDsByLocation();
_clearFileTotalCount = _clearBundleGUIDs.Count;
_steps = ESteps.ClearFilterCacheFiles;
}
if (_steps == ESteps.ClearFilterCacheFiles)
{
for (int i = _clearBundleGUIDs.Count - 1; i >= 0; i--)
{
string bundleGUID = _clearBundleGUIDs[i];
_fileSystem.DeleteCacheBundleFile(bundleGUID);
_clearBundleGUIDs.RemoveAt(i);
if (OperationSystem.IsBusy)
break;
}
if (_clearFileTotalCount == 0)
Progress = 1.0f;
else
Progress = 1.0f - (_clearBundleGUIDs.Count / _clearFileTotalCount);
if (_clearBundleGUIDs.Count == 0)
{
_steps = ESteps.Done;
Status = EOperationStatus.Succeed;
}
}
}
private List<string> GetBundleGUIDsByLocation()
{
List<string> result = new List<string>(_locations.Length);
foreach (var location in _locations)
{
string assetPath = _manifest.TryMappingToAssetPath(location);
if (_manifest.TryGetPackageAsset(assetPath, out PackageAsset packageAsset))
{
PackageBundle bundle = _manifest.GetMainPackageBundle(packageAsset.BundleID);
if (bundle != null)
{
result.Add(bundle.BundleGUID);
}
}
}
return result;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0be6ffd570645bf4a95126958a8e8a86
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -20,7 +20,7 @@ namespace YooAsset
private UnityDownloadFileOperation _unityDownloadFileOp; private UnityDownloadFileOperation _unityDownloadFileOp;
protected int _requestCount = 0; protected int _requestCount = 0;
protected float _tryAgainTimer; protected float _tryAgainTimer = 0;
protected int _failedTryAgain; protected int _failedTryAgain;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;

View File

@@ -16,7 +16,7 @@ namespace YooAsset
} }
private readonly DefaultCacheFileSystem _fileSystem; private readonly DefaultCacheFileSystem _fileSystem;
private IEnumerator<DirectoryInfo> _filesEnumerator = null; private IEnumerator<string> _filesEnumerator = null;
private float _verifyStartTime; private float _verifyStartTime;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
@@ -42,11 +42,11 @@ namespace YooAsset
if (_steps == ESteps.Prepare) if (_steps == ESteps.Prepare)
{ {
DirectoryInfo rootDirectory = new DirectoryInfo(_fileSystem.GetCacheBundleFilesRoot()); string rootDirectory = _fileSystem.GetCacheBundleFilesRoot();
if (rootDirectory.Exists) if (Directory.Exists(rootDirectory))
{ {
var directorieInfos = rootDirectory.EnumerateDirectories(); var directories = Directory.EnumerateDirectories(rootDirectory);
_filesEnumerator = directorieInfos.GetEnumerator(); _filesEnumerator = directories.GetEnumerator();
} }
_steps = ESteps.SearchFiles; _steps = ESteps.SearchFiles;
} }
@@ -76,15 +76,15 @@ namespace YooAsset
break; break;
var rootFoder = _filesEnumerator.Current; var rootFoder = _filesEnumerator.Current;
var childDirectories = rootFoder.GetDirectories(); var childDirectories = Directory.EnumerateDirectories(rootFoder);
foreach (var chidDirectory in childDirectories) foreach (var chidDirectory in childDirectories)
{ {
string bundleGUID = chidDirectory.Name; string bundleGUID = Path.GetFileName(chidDirectory);
if (_fileSystem.IsRecordBundleFile(bundleGUID)) if (_fileSystem.IsRecordBundleFile(bundleGUID))
continue; continue;
// 创建验证元素类 // 创建验证元素类
string fileRootPath = chidDirectory.FullName; string fileRootPath = chidDirectory;
string dataFilePath = $"{fileRootPath}/{DefaultCacheFileSystemDefine.BundleDataFileName}"; string dataFilePath = $"{fileRootPath}/{DefaultCacheFileSystemDefine.BundleDataFileName}";
string infoFilePath = $"{fileRootPath}/{DefaultCacheFileSystemDefine.BundleInfoFileName}"; string infoFilePath = $"{fileRootPath}/{DefaultCacheFileSystemDefine.BundleInfoFileName}";
@@ -108,17 +108,15 @@ namespace YooAsset
return isFindItem; return isFindItem;
} }
private string FindDataFileExtension(DirectoryInfo directoryInfo) private string FindDataFileExtension(string directory)
{ {
string dataFileExtension = string.Empty; string dataFileExtension = string.Empty;
var fileInfos = directoryInfo.GetFiles(); string searchPattern = DefaultCacheFileSystemDefine.BundleDataFileName + "*";
foreach (var fileInfo in fileInfos) var dataFiles = Directory.EnumerateFiles(directory, searchPattern);
foreach (var filePath in dataFiles)
{ {
if (fileInfo.Name.StartsWith(DefaultCacheFileSystemDefine.BundleDataFileName)) dataFileExtension = Path.GetExtension(filePath);
{ break;
dataFileExtension = fileInfo.Extension;
break;
}
} }
return dataFileExtension; return dataFileExtension;
} }

View File

@@ -8,6 +8,7 @@ namespace YooAsset
None, None,
CheckExist, CheckExist,
DownloadFile, DownloadFile,
AbortDownload,
LoadAssetBundle, LoadAssetBundle,
CheckResult, CheckResult,
Done, Done,
@@ -48,6 +49,17 @@ namespace YooAsset
} }
} }
if (_steps == ESteps.DownloadFile)
{
// 中断下载
if (AbortDownloadFile)
{
if (_downloadFileOp != null)
_downloadFileOp.AbortOperation();
_steps = ESteps.AbortDownload;
}
}
if (_steps == ESteps.DownloadFile) if (_steps == ESteps.DownloadFile)
{ {
if (_downloadFileOp == null) if (_downloadFileOp == null)
@@ -79,6 +91,23 @@ namespace YooAsset
} }
} }
if (_steps == ESteps.AbortDownload)
{
if (_downloadFileOp != null)
{
if (IsWaitForAsyncComplete)
_downloadFileOp.WaitForAsyncComplete();
_downloadFileOp.UpdateOperation();
if (_downloadFileOp.IsDone == false)
return;
}
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = "Abort download file !";
}
if (_steps == ESteps.LoadAssetBundle) if (_steps == ESteps.LoadAssetBundle)
{ {
if (IsWaitForAsyncComplete) if (IsWaitForAsyncComplete)

View File

@@ -20,7 +20,7 @@ namespace YooAsset
protected UnityVirtualBundleRequestOperation _unityDownloadFileOp; protected UnityVirtualBundleRequestOperation _unityDownloadFileOp;
protected int _requestCount = 0; protected int _requestCount = 0;
protected float _tryAgainTimer; protected float _tryAgainTimer = 0;
protected int _failedTryAgain; protected int _failedTryAgain;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;

View File

@@ -4,12 +4,12 @@ namespace YooAsset
{ {
internal class DefaultUnpackRemoteServices : IRemoteServices internal class DefaultUnpackRemoteServices : IRemoteServices
{ {
private readonly string _builtinPackageRoot; private readonly string _buildinPackageRoot;
protected readonly Dictionary<string, string> _mapping = new Dictionary<string, string>(10000); protected readonly Dictionary<string, string> _mapping = new Dictionary<string, string>(10000);
public DefaultUnpackRemoteServices(string builtinPackRoot) public DefaultUnpackRemoteServices(string buildinPackRoot)
{ {
_builtinPackageRoot = builtinPackRoot; _buildinPackageRoot = buildinPackRoot;
} }
string IRemoteServices.GetRemoteMainURL(string fileName) string IRemoteServices.GetRemoteMainURL(string fileName)
{ {
@@ -24,7 +24,7 @@ namespace YooAsset
{ {
if (_mapping.TryGetValue(fileName, out string url) == false) if (_mapping.TryGetValue(fileName, out string url) == false)
{ {
string filePath = PathUtility.Combine(_builtinPackageRoot, fileName); string filePath = PathUtility.Combine(_buildinPackageRoot, fileName);
url = DownloadSystemHelper.ConvertToWWWPath(filePath); url = DownloadSystemHelper.ConvertToWWWPath(filePath);
_mapping.Add(fileName, url); _mapping.Add(fileName, url);
} }

Some files were not shown because too many files have changed in this diff Show More