diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs
index 261d6062..eb1d6a9b 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs
@@ -34,14 +34,20 @@ namespace YooAsset
DirectoryInfo[] subDirectories = rootDirectory.GetDirectories();
foreach (var subDirectory in subDirectories)
{
- CreateBuildinCatalogFile(subDirectory.Name, subDirectory.FullName);
+ string packageName = subDirectory.Name;
+ string pacakgeDirectory = subDirectory.FullName;
+ bool result = CreateBuildinCatalogFile(packageName, pacakgeDirectory);
+ if (result == false)
+ {
+ throw new System.Exception($"Create package {packageName} catalog file failed ! See the detail error in console !");
+ }
}
}
///
/// 生成包裹的内置资源目录文件
///
- public static void CreateBuildinCatalogFile(string packageName, string pacakgeDirectory)
+ public static bool CreateBuildinCatalogFile(string packageName, string pacakgeDirectory)
{
// 获取资源清单版本
string packageVersion;
@@ -50,7 +56,8 @@ namespace YooAsset
string versionFilePath = $"{pacakgeDirectory}/{versionFileName}";
if (File.Exists(versionFilePath) == false)
{
- throw new System.Exception($"Can not found package version file : {versionFilePath}");
+ Debug.LogError($"Can not found package version file : {versionFilePath}");
+ return false;
}
packageVersion = FileUtility.ReadAllText(versionFilePath);
@@ -63,7 +70,8 @@ namespace YooAsset
string manifestFilePath = $"{pacakgeDirectory}/{manifestFileName}";
if (File.Exists(manifestFilePath) == false)
{
- throw new System.Exception($"Can not found package manifest file : {manifestFilePath}");
+ Debug.LogError($"Can not found package manifest file : {manifestFilePath}");
+ return false;
}
var binaryData = FileUtility.ReadAllBytes(manifestFilePath);
@@ -117,10 +125,12 @@ namespace YooAsset
}
}
+ // 创建输出目录
string fullPath = YooAssetSettingsData.GetYooResourcesFullPath();
string saveFilePath = $"{fullPath}/{packageName}/{DefaultBuildinFileSystemDefine.BuildinCatalogFileName}";
FileUtility.CreateFileDirectory(saveFilePath);
+ // 创建输出文件
UnityEditor.AssetDatabase.CreateAsset(buildinFileCatalog, saveFilePath);
UnityEditor.EditorUtility.SetDirty(buildinFileCatalog);
#if UNITY_2019
@@ -128,7 +138,9 @@ namespace YooAsset
#else
UnityEditor.AssetDatabase.SaveAssetIfDirty(buildinFileCatalog);
#endif
+
Debug.Log($"Succeed to save buildin file catalog : {saveFilePath}");
+ return true;
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSInitializeOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSInitializeOperation.cs
index b8bab890..21f55c3b 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSInitializeOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/DBFSInitializeOperation.cs
@@ -74,7 +74,14 @@ namespace YooAsset
// 兼容性初始化
// 说明:内置文件系统在编辑器下运行时需要动态生成
string packageRoot = _fileSystem.FileRoot;
- DefaultBuildinFileSystemBuild.CreateBuildinCatalogFile(_fileSystem.PackageName, packageRoot);
+ bool result = DefaultBuildinFileSystemBuild.CreateBuildinCatalogFile(_fileSystem.PackageName, packageRoot);
+ if (result == false)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Create package catalog file failed ! See the detail error in console !";
+ return;
+ }
#endif
_loadCatalogFileOp = new LoadBuildinCatalogFileOperation(_fileSystem);
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/DWSFSInitializeOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/DWSFSInitializeOperation.cs
index 113fb822..1813211a 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/DWSFSInitializeOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/DWSFSInitializeOperation.cs
@@ -1,4 +1,6 @@
+using static UnityEngine.Networking.UnityWebRequest;
+
namespace YooAsset
{
internal class DWSFSInitializeOperation : FSInitializeFileSystemOperation
@@ -37,7 +39,14 @@ namespace YooAsset
// 说明:内置文件系统在编辑器下运行时需要动态生成
string buildinRoot = YooAssetSettingsData.GetYooEditorBuildinRoot();
string packageRoot = PathUtility.Combine(buildinRoot, _fileSystem.PackageName);
- DefaultBuildinFileSystemBuild.CreateBuildinCatalogFile(_fileSystem.PackageName, packageRoot);
+ bool result = DefaultBuildinFileSystemBuild.CreateBuildinCatalogFile(_fileSystem.PackageName, packageRoot);
+ if (result == false)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Create package catalog file failed ! See the detail error in console !";
+ return;
+ }
#endif
_loadCatalogFileOp = new LoadWebServerCatalogFileOperation(_fileSystem);
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyOperation.cs b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyOperation.cs
index 9dd1ac5e..d69646c2 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyOperation.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/Operation/DestroyOperation.cs
@@ -6,6 +6,7 @@ namespace YooAsset
private enum ESteps
{
None,
+ CheckInitStatus,
UnloadAllAssets,
DestroyPackage,
Done,
@@ -23,13 +24,42 @@ namespace YooAsset
internal override void InternalOnStart()
{
- _steps = ESteps.UnloadAllAssets;
+ _steps = ESteps.CheckInitStatus;
}
internal override void InternalOnUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
+ if (_steps == ESteps.CheckInitStatus)
+ {
+ if (_resourcePackage.InitializeStatus == EOperationStatus.None)
+ {
+ _steps = ESteps.DestroyPackage;
+ }
+ else if (_resourcePackage.InitializeStatus == EOperationStatus.Processing)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = "The Package is initializing ! Please try to destroy the package again later.";
+ }
+ else if (_resourcePackage.InitializeStatus == EOperationStatus.Failed)
+ {
+ _steps = ESteps.DestroyPackage;
+ }
+ else if (_resourcePackage.InitializeStatus == EOperationStatus.Succeed)
+ {
+ if (_resourcePackage.PackageValid)
+ _steps = ESteps.UnloadAllAssets;
+ else
+ _steps = ESteps.DestroyPackage;
+ }
+ else
+ {
+ throw new System.NotImplementedException(_resourcePackage.InitializeStatus.ToString());
+ }
+ }
+
if (_steps == ESteps.UnloadAllAssets)
{
if (_unloadAllAssetsOp == null)
diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs
index 8fb909fd..a8a7de7e 100644
--- a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs
+++ b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs
@@ -31,6 +31,19 @@ namespace YooAsset
get { return _initializeStatus; }
}
+ ///
+ /// 包裹是否有效
+ ///
+ public bool PackageValid
+ {
+ get
+ {
+ if (_playModeImpl == null)
+ return false;
+ return _playModeImpl.ActiveManifest != null;
+ }
+ }
+
internal ResourcePackage(string packageName)
{
@@ -258,7 +271,7 @@ namespace YooAsset
DebugCheckInitialize();
return _playModeImpl.ClearCacheFilesAsync(clearMode.ToString(), clearParam);
}
-
+
///
/// 清理缓存文件
///