mirror of
https://github.com/tuyoogame/YooAsset.git
synced 2026-05-27 11:10:11 +00:00
Compare commits
31 Commits
0bde506aec
...
2.3.18
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4b6a8ca406 | ||
|
|
c8e45a6cae | ||
|
|
1fbc9d26a6 | ||
|
|
abb087b02e | ||
|
|
aeaf03011f | ||
|
|
78d24ad3a6 | ||
|
|
aab2c4625e | ||
|
|
079ef75605 | ||
|
|
75881b55f6 | ||
|
|
2020c7d508 | ||
|
|
088d939346 | ||
|
|
fa50e91c9f | ||
|
|
2e7b992a4b | ||
|
|
29fbbd97ff | ||
|
|
abb150e33f | ||
|
|
78e20f434e | ||
|
|
304222b788 | ||
|
|
101236db8a | ||
|
|
37de007b3f | ||
|
|
d570ba8d74 | ||
|
|
2a956099ae | ||
|
|
74037a5a29 | ||
|
|
861f850a32 | ||
|
|
8b1b5f988a | ||
|
|
efafd1173f | ||
|
|
03e49ff1fb | ||
|
|
ea34be1f00 | ||
|
|
831a9981e3 | ||
|
|
9de4aaa658 | ||
|
|
3579a23bd5 | ||
|
|
c865ddc7f2 |
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ namespace YooAsset.Editor
|
|||||||
{
|
{
|
||||||
void IBuildTask.Run(BuildContext context)
|
void IBuildTask.Run(BuildContext context)
|
||||||
{
|
{
|
||||||
CreateManifestFile(false, false, false, context);
|
CreateManifestFile(false, true, false, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override string[] GetBundleDepends(BuildContext context, string bundleName)
|
protected override string[] GetBundleDepends(BuildContext context, string bundleName)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,28 +14,56 @@ namespace YooAsset.Editor
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected override string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context)
|
protected override string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context)
|
||||||
|
{
|
||||||
|
var buildParametersContext = context.GetContextObject<BuildParametersContext>();
|
||||||
|
var rawFileBuildParameters = buildParametersContext.Parameters as RawFileBuildParameters;
|
||||||
|
if (rawFileBuildParameters.IncludePathInHash)
|
||||||
|
{
|
||||||
|
string filePath = bundleInfo.PackageSourceFilePath;
|
||||||
|
return GetFileMD5IncludePath(filePath);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
string filePath = bundleInfo.PackageSourceFilePath;
|
string filePath = bundleInfo.PackageSourceFilePath;
|
||||||
return HashUtility.FileMD5(filePath);
|
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)
|
||||||
|
{
|
||||||
|
var buildParametersContext = context.GetContextObject<BuildParametersContext>();
|
||||||
|
var rawFileBuildParameters = buildParametersContext.Parameters as RawFileBuildParameters;
|
||||||
|
if (rawFileBuildParameters.IncludePathInHash)
|
||||||
|
{
|
||||||
|
string filePath = bundleInfo.PackageSourceFilePath;
|
||||||
|
return GetFileMD5IncludePath(filePath);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetFileMD5IncludePath(string filePath)
|
||||||
|
{
|
||||||
|
string pathHash = HashUtility.StringMD5(filePath.ToLowerInvariant());
|
||||||
|
string contentHash = HashUtility.FileMD5(filePath);
|
||||||
|
string combined = pathHash + contentHash;
|
||||||
|
return HashUtility.StringMD5(combined);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,5 +6,9 @@ namespace YooAsset.Editor
|
|||||||
{
|
{
|
||||||
public class RawFileBuildParameters : BuildParameters
|
public class RawFileBuildParameters : BuildParameters
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 文件哈希值计算包含路径信息
|
||||||
|
/// </summary>
|
||||||
|
public bool IncludePathInHash = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
|||||||
@@ -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.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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,6 +169,7 @@ namespace YooAsset.Editor
|
|||||||
File.Delete(_databaseFilePath);
|
File.Delete(_databaseFilePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_database != null)
|
||||||
_database.Clear();
|
_database.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ namespace YooAsset.Editor
|
|||||||
Texture,
|
Texture,
|
||||||
RenderTexture,
|
RenderTexture,
|
||||||
VideoClip,
|
VideoClip,
|
||||||
|
PlayableAsset,
|
||||||
|
TimelineAsset
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -63,14 +63,19 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
"link.xml",
|
"link.xml",
|
||||||
"buildlogtep.json",
|
"buildlogtep.json",
|
||||||
$"{packageName}.version",
|
|
||||||
$"{packageName}_{packageVersion}.bytes",
|
|
||||||
$"{packageName}_{packageVersion}.hash",
|
|
||||||
$"{packageName}_{packageVersion}.json",
|
|
||||||
$"{packageName}_{packageVersion}.report",
|
|
||||||
DefaultBuildinFileSystemDefine.BuildinCatalogJsonFileName,
|
DefaultBuildinFileSystemDefine.BuildinCatalogJsonFileName,
|
||||||
DefaultBuildinFileSystemDefine.BuildinCatalogBinaryFileName
|
DefaultBuildinFileSystemDefine.BuildinCatalogBinaryFileName
|
||||||
};
|
};
|
||||||
|
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);
|
||||||
@@ -113,6 +118,34 @@ namespace YooAsset
|
|||||||
Debug.Log($"Succeed to save catalog file : {binaryFilePath}");
|
Debug.Log($"Succeed to save catalog file : {binaryFilePath}");
|
||||||
return true;
|
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();
|
||||||
|
Debug.Log($"Succeed to save catalog file : {binaryFilePath}");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -89,6 +89,11 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string CopyBuildinPackageManifestDestRoot { private set; get; }
|
public string CopyBuildinPackageManifestDestRoot { private set; get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 自定义参数:解压文件系统的根目录
|
||||||
|
/// </summary>
|
||||||
|
public string UnpackFileSystemRoot { private set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 自定义参数:解密服务接口的实例类
|
/// 自定义参数:解密服务接口的实例类
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -190,6 +195,10 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
CopyBuildinPackageManifestDestRoot = (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)
|
||||||
{
|
{
|
||||||
DecryptionServices = (IDecryptionServices)value;
|
DecryptionServices = (IDecryptionServices)value;
|
||||||
@@ -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()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0be6ffd570645bf4a95126958a8e8a86
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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,18 +108,16 @@ 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);
|
||||||
{
|
|
||||||
dataFileExtension = fileInfo.Extension;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return dataFileExtension;
|
return dataFileExtension;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,12 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
ClearUnusedBundleFiles,
|
ClearUnusedBundleFiles,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 清理指定地址的文件
|
||||||
|
/// 说明:需要指定参数,可选:string, string[], List<string>
|
||||||
|
/// </summary>
|
||||||
|
ClearBundleFilesByLocations,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 清理指定标签的文件
|
/// 清理指定标签的文件
|
||||||
/// 说明:需要指定参数,可选:string, string[], List<string>
|
/// 说明:需要指定参数,可选:string, string[], List<string>
|
||||||
|
|||||||
@@ -26,5 +26,6 @@ namespace YooAsset
|
|||||||
public const string COPY_BUILDIN_PACKAGE_MANIFEST = "COPY_BUILDIN_PACKAGE_MANIFEST";
|
public const string COPY_BUILDIN_PACKAGE_MANIFEST = "COPY_BUILDIN_PACKAGE_MANIFEST";
|
||||||
public const string COPY_BUILDIN_PACKAGE_MANIFEST_DEST_ROOT = "COPY_BUILDIN_PACKAGE_MANIFEST_DEST_ROOT";
|
public const string COPY_BUILDIN_PACKAGE_MANIFEST_DEST_ROOT = "COPY_BUILDIN_PACKAGE_MANIFEST_DEST_ROOT";
|
||||||
public const string COPY_LOCAL_FILE_SERVICES = "COPY_LOCAL_FILE_SERVICES";
|
public const string COPY_LOCAL_FILE_SERVICES = "COPY_LOCAL_FILE_SERVICES";
|
||||||
|
public const string UNPACK_FILE_SYSTEM_ROOT = "UNPACK_FILE_SYSTEM_ROOT";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,6 +17,11 @@ namespace YooAsset
|
|||||||
/// 下载大小
|
/// 下载大小
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public long DownloadedBytes { protected set; get; } = 0;
|
public long DownloadedBytes { protected set; get; } = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 终止下载文件
|
||||||
|
/// </summary>
|
||||||
|
public bool AbortDownloadFile = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal sealed class FSLoadBundleCompleteOperation : FSLoadBundleOperation
|
internal sealed class FSLoadBundleCompleteOperation : FSLoadBundleOperation
|
||||||
|
|||||||
@@ -18,15 +18,16 @@ namespace YooAsset
|
|||||||
private readonly IWebDecryptionServices _decryptionServices;
|
private readonly IWebDecryptionServices _decryptionServices;
|
||||||
private UnityWebDataRequestOperation _unityWebDataRequestOp;
|
private UnityWebDataRequestOperation _unityWebDataRequestOp;
|
||||||
|
|
||||||
protected int _requestCount = 0;
|
private int _requestCount = 0;
|
||||||
protected float _tryAgainTimer;
|
private float _tryAgainTimer = 0;
|
||||||
protected int _failedTryAgain;
|
private int _failedTryAgain;
|
||||||
private ESteps _steps = ESteps.None;
|
private ESteps _steps = ESteps.None;
|
||||||
|
|
||||||
internal LoadWebEncryptAssetBundleOperation(PackageBundle bundle, DownloadFileOptions options, IWebDecryptionServices decryptionServices)
|
internal LoadWebEncryptAssetBundleOperation(PackageBundle bundle, DownloadFileOptions options, IWebDecryptionServices decryptionServices)
|
||||||
{
|
{
|
||||||
_bundle = bundle;
|
_bundle = bundle;
|
||||||
_options = options;
|
_options = options;
|
||||||
|
_failedTryAgain = options.FailedTryAgain;
|
||||||
_decryptionServices = decryptionServices;
|
_decryptionServices = decryptionServices;
|
||||||
}
|
}
|
||||||
internal override void InternalStart()
|
internal override void InternalStart()
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ namespace YooAsset
|
|||||||
private readonly bool _disableUnityWebCache;
|
private readonly bool _disableUnityWebCache;
|
||||||
private UnityAssetBundleRequestOperation _unityAssetBundleRequestOp;
|
private UnityAssetBundleRequestOperation _unityAssetBundleRequestOp;
|
||||||
|
|
||||||
protected int _requestCount = 0;
|
private int _requestCount = 0;
|
||||||
protected float _tryAgainTimer;
|
private float _tryAgainTimer = 0;
|
||||||
protected int _failedTryAgain;
|
private int _failedTryAgain;
|
||||||
private ESteps _steps = ESteps.None;
|
private ESteps _steps = ESteps.None;
|
||||||
|
|
||||||
|
|
||||||
@@ -28,6 +28,7 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
_bundle = bundle;
|
_bundle = bundle;
|
||||||
_options = options;
|
_options = options;
|
||||||
|
_failedTryAgain = options.FailedTryAgain;
|
||||||
_disableUnityWebCache = disableUnityWebCache;
|
_disableUnityWebCache = disableUnityWebCache;
|
||||||
}
|
}
|
||||||
internal override void InternalStart()
|
internal override void InternalStart()
|
||||||
|
|||||||
@@ -173,6 +173,13 @@ namespace YooAsset
|
|||||||
|
|
||||||
if (Result != null)
|
if (Result != null)
|
||||||
Result.UnloadBundleFile();
|
Result.UnloadBundleFile();
|
||||||
|
|
||||||
|
if (IsDone == false)
|
||||||
|
{
|
||||||
|
_steps = ESteps.Done;
|
||||||
|
Status = EOperationStatus.Failed;
|
||||||
|
Error = "Bundle loader destroyed !";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -180,11 +187,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool CanDestroyLoader()
|
public bool CanDestroyLoader()
|
||||||
{
|
{
|
||||||
// 注意:正在加载中的任务不可以销毁
|
if (CanReleasableLoader() == false)
|
||||||
if (_steps == ESteps.LoadBundleFile)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (RefCount > 0)
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// YOOASSET_LEGACY_DEPENDENCY
|
// YOOASSET_LEGACY_DEPENDENCY
|
||||||
@@ -194,14 +197,34 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
foreach (var bundleID in LoadBundleInfo.Bundle.ReferenceBundleIDs)
|
foreach (var bundleID in LoadBundleInfo.Bundle.ReferenceBundleIDs)
|
||||||
{
|
{
|
||||||
|
#if YOOASSET_EXPERIMENTAL
|
||||||
|
if (_resManager.CheckBundleReleasable(bundleID) == false)
|
||||||
|
return false;
|
||||||
|
#else
|
||||||
if (_resManager.CheckBundleDestroyed(bundleID) == false)
|
if (_resManager.CheckBundleDestroyed(bundleID) == false)
|
||||||
return false;
|
return false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 是否可以释放
|
||||||
|
/// </summary>
|
||||||
|
public bool CanReleasableLoader()
|
||||||
|
{
|
||||||
|
// 注意:正在加载中的任务不可以销毁
|
||||||
|
if (_steps == ESteps.LoadBundleFile)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (RefCount > 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 添加附属的资源提供者
|
/// 添加附属的资源提供者
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -240,5 +263,28 @@ namespace YooAsset
|
|||||||
_removeList.Clear();
|
_removeList.Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 尝试终止加载器
|
||||||
|
/// </summary>
|
||||||
|
public void TryAbortLoader()
|
||||||
|
{
|
||||||
|
if (IsDone == false)
|
||||||
|
{
|
||||||
|
if (_steps == ESteps.CheckConcurrency)
|
||||||
|
{
|
||||||
|
_steps = ESteps.Done;
|
||||||
|
Status = EOperationStatus.Failed;
|
||||||
|
Error = "Abort bundle loader !";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_steps == ESteps.LoadBundleFile)
|
||||||
|
{
|
||||||
|
// 注意:终止下载器
|
||||||
|
if (_loadBundleOp != null)
|
||||||
|
_loadBundleOp.AbortDownloadFile = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -23,7 +23,7 @@ namespace YooAsset
|
|||||||
None,
|
None,
|
||||||
CheckOptions,
|
CheckOptions,
|
||||||
ReleaseAll,
|
ReleaseAll,
|
||||||
AbortDownload,
|
TryAbortLoader,
|
||||||
CheckLoading,
|
CheckLoading,
|
||||||
DestroyAll,
|
DestroyAll,
|
||||||
Done,
|
Done,
|
||||||
@@ -78,15 +78,16 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_steps = ESteps.AbortDownload;
|
_steps = ESteps.TryAbortLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_steps == ESteps.AbortDownload)
|
if (_steps == ESteps.TryAbortLoader)
|
||||||
{
|
{
|
||||||
// 注意:终止所有下载任务
|
// 尝试终止所有加载任务
|
||||||
|
// 注意:正在加载AssetBundle的任务无法终止
|
||||||
foreach (var loader in _resManager.LoaderDic.Values)
|
foreach (var loader in _resManager.LoaderDic.Values)
|
||||||
{
|
{
|
||||||
loader.AbortOperation();
|
loader.TryAbortLoader();
|
||||||
}
|
}
|
||||||
_steps = ESteps.CheckLoading;
|
_steps = ESteps.CheckLoading;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -329,6 +329,14 @@ namespace YooAsset
|
|||||||
return true;
|
return true;
|
||||||
return bundleFileLoader.IsDestroyed;
|
return bundleFileLoader.IsDestroyed;
|
||||||
}
|
}
|
||||||
|
internal bool CheckBundleReleasable(int bundleID)
|
||||||
|
{
|
||||||
|
string bundleName = _bundleQuery.GetMainBundleName(bundleID);
|
||||||
|
var bundleFileLoader = TryGetBundleFileLoader(bundleName);
|
||||||
|
if (bundleFileLoader == null)
|
||||||
|
return true;
|
||||||
|
return bundleFileLoader.CanReleasableLoader();
|
||||||
|
}
|
||||||
internal bool HasAnyLoader()
|
internal bool HasAnyLoader()
|
||||||
{
|
{
|
||||||
return LoaderDic.Count > 0;
|
return LoaderDic.Count > 0;
|
||||||
|
|||||||
@@ -13,13 +13,15 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
|
|
||||||
private readonly ResourcePackage _resourcePackage;
|
private readonly ResourcePackage _resourcePackage;
|
||||||
|
private readonly UnloadAllAssetsOptions _options;
|
||||||
private UnloadAllAssetsOperation _unloadAllAssetsOp;
|
private UnloadAllAssetsOperation _unloadAllAssetsOp;
|
||||||
private ESteps _steps = ESteps.None;
|
private ESteps _steps = ESteps.None;
|
||||||
|
|
||||||
|
|
||||||
public DestroyOperation(ResourcePackage resourcePackage)
|
public DestroyOperation(ResourcePackage resourcePackage, UnloadAllAssetsOptions options)
|
||||||
{
|
{
|
||||||
_resourcePackage = resourcePackage;
|
_resourcePackage = resourcePackage;
|
||||||
|
_options = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal override void InternalStart()
|
internal override void InternalStart()
|
||||||
@@ -64,7 +66,7 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
if (_unloadAllAssetsOp == null)
|
if (_unloadAllAssetsOp == null)
|
||||||
{
|
{
|
||||||
_unloadAllAssetsOp = _resourcePackage.UnloadAllAssetsAsync();
|
_unloadAllAssetsOp = _resourcePackage.UnloadAllAssetsAsync(_options);
|
||||||
_unloadAllAssetsOp.StartOperation();
|
_unloadAllAssetsOp.StartOperation();
|
||||||
AddChildOperation(_unloadAllAssetsOp);
|
AddChildOperation(_unloadAllAssetsOp);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -209,7 +209,10 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public DestroyOperation DestroyAsync()
|
public DestroyOperation DestroyAsync()
|
||||||
{
|
{
|
||||||
var operation = new DestroyOperation(this);
|
var options = new UnloadAllAssetsOptions();
|
||||||
|
options.ReleaseAllHandles = true;
|
||||||
|
options.LockLoadOperation = true;
|
||||||
|
var operation = new DestroyOperation(this, options);
|
||||||
OperationSystem.StartOperation(null, operation);
|
OperationSystem.StartOperation(null, operation);
|
||||||
return operation;
|
return operation;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,13 +76,7 @@ namespace YooAsset
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the computed hash value.
|
/// Gets the computed hash value.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public uint CRCValue
|
public uint CRCValue { private set; get; }
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return _currentCrc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="CRC32Algorithm"/> class.
|
/// Initializes a new instance of the <see cref="CRC32Algorithm"/> class.
|
||||||
@@ -115,6 +109,8 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
protected override byte[] HashFinal()
|
protected override byte[] HashFinal()
|
||||||
{
|
{
|
||||||
|
CRCValue = _currentCrc;
|
||||||
|
|
||||||
if (BitConverter.IsLittleEndian)
|
if (BitConverter.IsLittleEndian)
|
||||||
return new[] { (byte)_currentCrc, (byte)(_currentCrc >> 8), (byte)(_currentCrc >> 16), (byte)(_currentCrc >> 24) };
|
return new[] { (byte)_currentCrc, (byte)(_currentCrc >> 8), (byte)(_currentCrc >> 16), (byte)(_currentCrc >> 24) };
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
using System.IO;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace YooAsset.Editor
|
||||||
|
{
|
||||||
|
public class CreateEmptyCatalogWindow : EditorWindow
|
||||||
|
{
|
||||||
|
static CreateEmptyCatalogWindow _thisInstance;
|
||||||
|
|
||||||
|
[MenuItem("Tools/空清单生成工具(Catalog)", false, 102)]
|
||||||
|
static void ShowWindow()
|
||||||
|
{
|
||||||
|
if (_thisInstance == null)
|
||||||
|
{
|
||||||
|
_thisInstance = EditorWindow.GetWindow(typeof(CreateEmptyCatalogWindow), false, "空清单生成工具", true) as CreateEmptyCatalogWindow;
|
||||||
|
_thisInstance.minSize = new Vector2(800, 600);
|
||||||
|
}
|
||||||
|
_thisInstance.Show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private string _packageName = string.Empty;
|
||||||
|
|
||||||
|
private void OnGUI()
|
||||||
|
{
|
||||||
|
GUILayout.Space(10);
|
||||||
|
EditorGUILayout.BeginHorizontal();
|
||||||
|
_packageName = EditorGUILayout.TextField("Package Name", _packageName);
|
||||||
|
EditorGUILayout.EndHorizontal();
|
||||||
|
|
||||||
|
if (string.IsNullOrEmpty(_packageName) == false)
|
||||||
|
{
|
||||||
|
if (GUILayout.Button("生成空的Catalog文件", GUILayout.MaxWidth(150)))
|
||||||
|
{
|
||||||
|
string outputPath = EditorTools.OpenFolderPanel("输出目录", "Assets/");
|
||||||
|
if (string.IsNullOrEmpty(outputPath) == false)
|
||||||
|
{
|
||||||
|
CreateEmptyCatalogFile(outputPath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CreateEmptyCatalogFile(string outputPath)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
bool result = CatalogTools.CreateEmptyCatalogFile(_packageName, string.Empty, outputPath);
|
||||||
|
if (result == false)
|
||||||
|
{
|
||||||
|
Debug.LogError($"Create package {_packageName} catalog file failed ! See the detail error in console !");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (System.Exception ex)
|
||||||
|
{
|
||||||
|
Debug.LogError($"Create package {_packageName} catalog file failed ! {ex.Message}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 211aadfc630b2ec419d5efce05e8aabe
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -10,7 +10,7 @@ namespace YooAsset.Editor
|
|||||||
{
|
{
|
||||||
static PackageComparatorWindow _thisInstance;
|
static PackageComparatorWindow _thisInstance;
|
||||||
|
|
||||||
[MenuItem("Tools/补丁包比对工具", false, 102)]
|
[MenuItem("Tools/补丁包比对工具", false, 103)]
|
||||||
static void ShowWindow()
|
static void ShowWindow()
|
||||||
{
|
{
|
||||||
if (_thisInstance == null)
|
if (_thisInstance == null)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace YooAsset.Editor
|
|||||||
{
|
{
|
||||||
static PackageImporterWindow _thisInstance;
|
static PackageImporterWindow _thisInstance;
|
||||||
|
|
||||||
[MenuItem("Tools/补丁包导入工具", false, 101)]
|
[MenuItem("Tools/补丁包导入工具", false, 104)]
|
||||||
static void ShowWindow()
|
static void ShowWindow()
|
||||||
{
|
{
|
||||||
if (_thisInstance == null)
|
if (_thisInstance == null)
|
||||||
|
|||||||
@@ -16,8 +16,9 @@ internal class APFSDownloadFileOperation : FSDownloadFileOperation
|
|||||||
private readonly AlipayFileSystem _fileSystem;
|
private readonly AlipayFileSystem _fileSystem;
|
||||||
private readonly DownloadFileOptions _options;
|
private readonly DownloadFileOptions _options;
|
||||||
private UnityWebCacheRequestOperation _webCacheRequestOp;
|
private UnityWebCacheRequestOperation _webCacheRequestOp;
|
||||||
|
|
||||||
private int _requestCount = 0;
|
private int _requestCount = 0;
|
||||||
private float _tryAgainTimer;
|
private float _tryAgainTimer = 0;
|
||||||
private int _failedTryAgain;
|
private int _failedTryAgain;
|
||||||
private ESteps _steps = ESteps.None;
|
private ESteps _steps = ESteps.None;
|
||||||
|
|
||||||
@@ -25,6 +26,7 @@ internal class APFSDownloadFileOperation : FSDownloadFileOperation
|
|||||||
{
|
{
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_options = options;
|
_options = options;
|
||||||
|
_failedTryAgain = options.FailedTryAgain;
|
||||||
}
|
}
|
||||||
internal override void InternalStart()
|
internal override void InternalStart()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ namespace YooAsset
|
|||||||
private UnityAlipayAssetBundleRequestOperation _unityAssetBundleRequestOp;
|
private UnityAlipayAssetBundleRequestOperation _unityAssetBundleRequestOp;
|
||||||
|
|
||||||
private int _requestCount = 0;
|
private int _requestCount = 0;
|
||||||
private float _tryAgainTimer;
|
private float _tryAgainTimer = 0;
|
||||||
private int _failedTryAgain;
|
private int _failedTryAgain;
|
||||||
private ESteps _steps = ESteps.None;
|
private ESteps _steps = ESteps.None;
|
||||||
|
|
||||||
@@ -29,6 +29,7 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
_bundle = bundle;
|
_bundle = bundle;
|
||||||
_options = options;
|
_options = options;
|
||||||
|
_failedTryAgain = options.FailedTryAgain;
|
||||||
}
|
}
|
||||||
internal override void InternalStart()
|
internal override void InternalStart()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,8 +16,9 @@ internal class TPFSDownloadFileOperation : FSDownloadFileOperation
|
|||||||
private readonly TaptapFileSystem _fileSystem;
|
private readonly TaptapFileSystem _fileSystem;
|
||||||
private readonly DownloadFileOptions _options;
|
private readonly DownloadFileOptions _options;
|
||||||
private UnityWebCacheRequestOperation _webCacheRequestOp;
|
private UnityWebCacheRequestOperation _webCacheRequestOp;
|
||||||
|
|
||||||
private int _requestCount = 0;
|
private int _requestCount = 0;
|
||||||
private float _tryAgainTimer;
|
private float _tryAgainTimer = 0;
|
||||||
private int _failedTryAgain;
|
private int _failedTryAgain;
|
||||||
private ESteps _steps = ESteps.None;
|
private ESteps _steps = ESteps.None;
|
||||||
|
|
||||||
@@ -25,6 +26,7 @@ internal class TPFSDownloadFileOperation : FSDownloadFileOperation
|
|||||||
{
|
{
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_options = options;
|
_options = options;
|
||||||
|
_failedTryAgain = options.FailedTryAgain;
|
||||||
}
|
}
|
||||||
internal override void InternalStart()
|
internal override void InternalStart()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace YooAsset
|
|||||||
private UnityTaptapAssetBundleRequestOperation _unityAssetBundleRequestOp;
|
private UnityTaptapAssetBundleRequestOperation _unityAssetBundleRequestOp;
|
||||||
|
|
||||||
private int _requestCount = 0;
|
private int _requestCount = 0;
|
||||||
private float _tryAgainTimer;
|
private float _tryAgainTimer = 0;
|
||||||
private int _failedTryAgain;
|
private int _failedTryAgain;
|
||||||
private ESteps _steps = ESteps.None;
|
private ESteps _steps = ESteps.None;
|
||||||
|
|
||||||
@@ -28,6 +28,7 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
_bundle = bundle;
|
_bundle = bundle;
|
||||||
_options = options;
|
_options = options;
|
||||||
|
_failedTryAgain = options.FailedTryAgain;
|
||||||
}
|
}
|
||||||
internal override void InternalStart()
|
internal override void InternalStart()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,8 +16,9 @@ internal class TTFSDownloadFileOperation : FSDownloadFileOperation
|
|||||||
private readonly TiktokFileSystem _fileSystem;
|
private readonly TiktokFileSystem _fileSystem;
|
||||||
private readonly DownloadFileOptions _options;
|
private readonly DownloadFileOptions _options;
|
||||||
private UnityWebCacheRequestOperation _webCacheRequestOp;
|
private UnityWebCacheRequestOperation _webCacheRequestOp;
|
||||||
|
|
||||||
private int _requestCount = 0;
|
private int _requestCount = 0;
|
||||||
private float _tryAgainTimer;
|
private float _tryAgainTimer = 0;
|
||||||
private int _failedTryAgain;
|
private int _failedTryAgain;
|
||||||
private ESteps _steps = ESteps.None;
|
private ESteps _steps = ESteps.None;
|
||||||
|
|
||||||
@@ -25,6 +26,7 @@ internal class TTFSDownloadFileOperation : FSDownloadFileOperation
|
|||||||
{
|
{
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_options = options;
|
_options = options;
|
||||||
|
_failedTryAgain = options.FailedTryAgain;
|
||||||
}
|
}
|
||||||
internal override void InternalStart()
|
internal override void InternalStart()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace YooAsset
|
|||||||
private UnityTiktokAssetBundleRequestOperation _unityAssetBundleRequestOp;
|
private UnityTiktokAssetBundleRequestOperation _unityAssetBundleRequestOp;
|
||||||
|
|
||||||
private int _requestCount = 0;
|
private int _requestCount = 0;
|
||||||
private float _tryAgainTimer;
|
private float _tryAgainTimer = 0;
|
||||||
private int _failedTryAgain;
|
private int _failedTryAgain;
|
||||||
private ESteps _steps = ESteps.None;
|
private ESteps _steps = ESteps.None;
|
||||||
|
|
||||||
@@ -28,6 +28,7 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
_bundle = bundle;
|
_bundle = bundle;
|
||||||
_options = options;
|
_options = options;
|
||||||
|
_failedTryAgain = options.FailedTryAgain;
|
||||||
}
|
}
|
||||||
internal override void InternalStart()
|
internal override void InternalStart()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -16,8 +16,9 @@ internal class WXFSDownloadFileOperation : FSDownloadFileOperation
|
|||||||
private readonly WechatFileSystem _fileSystem;
|
private readonly WechatFileSystem _fileSystem;
|
||||||
private readonly DownloadFileOptions _options;
|
private readonly DownloadFileOptions _options;
|
||||||
private UnityWebCacheRequestOperation _webCacheRequestOp;
|
private UnityWebCacheRequestOperation _webCacheRequestOp;
|
||||||
|
|
||||||
private int _requestCount = 0;
|
private int _requestCount = 0;
|
||||||
private float _tryAgainTimer;
|
private float _tryAgainTimer = 0;
|
||||||
private int _failedTryAgain;
|
private int _failedTryAgain;
|
||||||
private ESteps _steps = ESteps.None;
|
private ESteps _steps = ESteps.None;
|
||||||
|
|
||||||
@@ -25,6 +26,7 @@ internal class WXFSDownloadFileOperation : FSDownloadFileOperation
|
|||||||
{
|
{
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_options = options;
|
_options = options;
|
||||||
|
_failedTryAgain = options.FailedTryAgain;
|
||||||
}
|
}
|
||||||
internal override void InternalStart()
|
internal override void InternalStart()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ namespace YooAsset
|
|||||||
private UnityWechatAssetBundleRequestOperation _unityAssetBundleRequestOp;
|
private UnityWechatAssetBundleRequestOperation _unityAssetBundleRequestOp;
|
||||||
|
|
||||||
private int _requestCount = 0;
|
private int _requestCount = 0;
|
||||||
private float _tryAgainTimer;
|
private float _tryAgainTimer = 0;
|
||||||
private int _failedTryAgain;
|
private int _failedTryAgain;
|
||||||
private ESteps _steps = ESteps.None;
|
private ESteps _steps = ESteps.None;
|
||||||
|
|
||||||
@@ -28,6 +28,7 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
_bundle = bundle;
|
_bundle = bundle;
|
||||||
_options = options;
|
_options = options;
|
||||||
|
_failedTryAgain = options.FailedTryAgain;
|
||||||
}
|
}
|
||||||
internal override void InternalStart()
|
internal override void InternalStart()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
"GUID:5efd170ecd8084500bed5692932fe14e",
|
"GUID:5efd170ecd8084500bed5692932fe14e",
|
||||||
"GUID:bb21d6197862c4c3e863390dec9859a7",
|
"GUID:bb21d6197862c4c3e863390dec9859a7",
|
||||||
"GUID:870f26a2ffa82429195df0861505c5d5",
|
"GUID:870f26a2ffa82429195df0861505c5d5",
|
||||||
"GUID:870f26a2ffa82429195df0861505c5d5",
|
|
||||||
"GUID:6921e41464907054da1a045ea64ca16f"
|
"GUID:6921e41464907054da1a045ea64ca16f"
|
||||||
],
|
],
|
||||||
"includePlatforms": [],
|
"includePlatforms": [],
|
||||||
|
|||||||
@@ -94,19 +94,19 @@ namespace Cysharp.Threading.Tasks
|
|||||||
switch (handle)
|
switch (handle)
|
||||||
{
|
{
|
||||||
case AssetHandle asset_handle:
|
case AssetHandle asset_handle:
|
||||||
asset_handle.Completed += result.continuationAction;
|
asset_handle.Completed += result._continuationAction;
|
||||||
break;
|
break;
|
||||||
case SceneHandle scene_handle:
|
case SceneHandle scene_handle:
|
||||||
scene_handle.Completed += result.continuationAction;
|
scene_handle.Completed += result._continuationAction;
|
||||||
break;
|
break;
|
||||||
case SubAssetsHandle sub_asset_handle:
|
case SubAssetsHandle sub_asset_handle:
|
||||||
sub_asset_handle.Completed += result.continuationAction;
|
sub_asset_handle.Completed += result._continuationAction;
|
||||||
break;
|
break;
|
||||||
case RawFileHandle raw_file_handle:
|
case RawFileHandle raw_file_handle:
|
||||||
raw_file_handle.Completed += result.continuationAction;
|
raw_file_handle.Completed += result._continuationAction;
|
||||||
break;
|
break;
|
||||||
case AllAssetsHandle all_assets_handle:
|
case AllAssetsHandle all_assets_handle:
|
||||||
all_assets_handle.Completed += result.continuationAction;
|
all_assets_handle.Completed += result._continuationAction;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "com.tuyoogame.yooasset",
|
"name": "com.tuyoogame.yooasset",
|
||||||
"displayName": "YooAsset",
|
"displayName": "YooAsset",
|
||||||
"version": "2.3.16",
|
"version": "2.3.18",
|
||||||
"unity": "2019.4",
|
"unity": "2019.4",
|
||||||
"description": "unity3d resources management system.",
|
"description": "unity3d resources management system.",
|
||||||
"author": {
|
"author": {
|
||||||
|
|||||||
Reference in New Issue
Block a user