diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileCatalog.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileCatalog.cs
index bc991a86..aad797bf 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileCatalog.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileCatalog.cs
@@ -1,13 +1,14 @@
using System;
+using System.IO;
using System.Collections.Generic;
-using UnityEngine;
namespace YooAsset
{
///
/// 内置资源清单目录
///
- internal class DefaultBuildinFileCatalog : ScriptableObject
+ [Serializable]
+ internal class DefaultBuildinFileCatalog
{
[Serializable]
public class FileWrapper
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs
index f3c12cb8..06ea1ae6 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystem.cs
@@ -338,8 +338,7 @@ namespace YooAsset
}
public string GetCatalogFileLoadPath()
{
- string fileName = Path.GetFileNameWithoutExtension(DefaultBuildinFileSystemDefine.BuildinCatalogFileName);
- return YooAssetSettingsData.GetYooResourcesLoadPath(PackageName, fileName);
+ return PathUtility.Combine(_packageRoot, DefaultBuildinFileSystemDefine.BuildinCatalogFileName);
}
///
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs
index b117f411..c5a76264 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemBuild.cs
@@ -17,10 +17,6 @@ namespace YooAsset
{
YooLogger.Log("Begin to create catalog file !");
- string savePath = YooAssetSettingsData.GetYooResourcesFullPath();
- if (UnityEditor.AssetDatabase.DeleteAsset(savePath))
- UnityEditor.AssetDatabase.Refresh();
-
string rootPath = YooAssetSettingsData.GetYooDefaultBuildinRoot();
DirectoryInfo rootDirectory = new DirectoryInfo(rootPath);
if (rootDirectory.Exists == false)
@@ -87,10 +83,23 @@ namespace YooAsset
}
// 创建内置清单实例
- var buildinFileCatalog = ScriptableObject.CreateInstance();
+ var buildinFileCatalog = new DefaultBuildinFileCatalog();
buildinFileCatalog.PackageName = packageName;
buildinFileCatalog.PackageVersion = packageVersion;
+ // 创建白名单查询集合
+ HashSet whiteFileList = new HashSet
+ {
+ "link.xml",
+ "buildlogtep.json",
+ $"{packageName}.version",
+ $"{packageName}_{packageVersion}.bytes",
+ $"{packageName}_{packageVersion}.hash",
+ $"{packageName}_{packageVersion}.json",
+ $"{packageName}_{packageVersion}.report",
+ DefaultBuildinFileSystemDefine.BuildinCatalogFileName
+ };
+
// 记录所有内置资源文件
DirectoryInfo rootDirectory = new DirectoryInfo(pacakgeDirectory);
FileInfo[] fileInfos = rootDirectory.GetFiles();
@@ -99,17 +108,7 @@ namespace YooAsset
if (fileInfo.Extension == ".meta")
continue;
- if (fileInfo.Name == "link.xml" || fileInfo.Name == "buildlogtep.json")
- continue;
- if (fileInfo.Name == $"{packageName}.version")
- continue;
- if (fileInfo.Name == $"{packageName}_{packageVersion}.bytes")
- continue;
- if (fileInfo.Name == $"{packageName}_{packageVersion}.hash")
- continue;
- if (fileInfo.Name == $"{packageName}_{packageVersion}.json")
- continue;
- if (fileInfo.Name == $"{packageName}_{packageVersion}.report")
+ if (whiteFileList.Contains(fileInfo.Name))
continue;
string fileName = fileInfo.Name;
@@ -125,18 +124,13 @@ namespace YooAsset
}
// 创建输出目录
- string fullPath = YooAssetSettingsData.GetYooResourcesFullPath();
- string saveFilePath = $"{fullPath}/{packageName}/{DefaultBuildinFileSystemDefine.BuildinCatalogFileName}";
- FileUtility.CreateFileDirectory(saveFilePath);
-
+ string saveFilePath = $"{pacakgeDirectory}/{DefaultBuildinFileSystemDefine.BuildinCatalogFileName}";
+ if (File.Exists(saveFilePath))
+ File.Delete(saveFilePath);
+
// 创建输出文件
- UnityEditor.AssetDatabase.CreateAsset(buildinFileCatalog, saveFilePath);
- UnityEditor.EditorUtility.SetDirty(buildinFileCatalog);
-#if UNITY_2019
- UnityEditor.AssetDatabase.SaveAssets();
-#else
- UnityEditor.AssetDatabase.SaveAssetIfDirty(buildinFileCatalog);
-#endif
+ File.WriteAllText(saveFilePath, JsonUtility.ToJson(buildinFileCatalog, false));
+ UnityEditor.AssetDatabase.Refresh();
Debug.Log($"Succeed to save buildin file catalog : {saveFilePath}");
return true;
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemDefine.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemDefine.cs
index 876e01d2..5a70375b 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemDefine.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/DefaultBuildinFileSystemDefine.cs
@@ -6,6 +6,6 @@ namespace YooAsset
///
/// 内置清单文件名称
///
- public const string BuildinCatalogFileName = "BuildinCatalog.asset";
+ public const string BuildinCatalogFileName = "BuildinCatalog.json";
}
}
\ No newline at end of file
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinCatalogFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinCatalogFileOperation.cs
index 3490e52c..2cd635cb 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinCatalogFileOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultBuildinFileSystem/Operation/internal/LoadBuildinCatalogFileOperation.cs
@@ -1,4 +1,5 @@
-using UnityEngine;
+using System;
+using UnityEngine;
namespace YooAsset
{
@@ -7,12 +8,15 @@ namespace YooAsset
private enum ESteps
{
None,
+ RequestData,
LoadCatalog,
Done,
}
private readonly DefaultBuildinFileSystem _fileSystem;
+ private UnityWebTextRequestOperation _webTextRequestOp;
private ESteps _steps = ESteps.None;
+ private string _textData = null;
internal LoadBuildinCatalogFileOperation(DefaultBuildinFileSystem fileSystem)
@@ -21,42 +25,78 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _steps = ESteps.LoadCatalog;
+ _steps = ESteps.RequestData;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
+ if (_steps == ESteps.RequestData)
+ {
+ if (_webTextRequestOp == null)
+ {
+ string filePath = _fileSystem.GetCatalogFileLoadPath();
+ string url = DownloadSystemHelper.ConvertToWWWPath(filePath);
+ _webTextRequestOp = new UnityWebTextRequestOperation(url);
+ _webTextRequestOp.StartOperation();
+ AddChildOperation(_webTextRequestOp);
+ }
+
+ _webTextRequestOp.UpdateOperation();
+ if (_webTextRequestOp.IsDone == false)
+ return;
+
+ if (_webTextRequestOp.Status == EOperationStatus.Succeed)
+ {
+ _steps = ESteps.LoadCatalog;
+ _textData = _webTextRequestOp.Result;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _webTextRequestOp.Error;
+ }
+ }
+
if (_steps == ESteps.LoadCatalog)
{
- string catalogFilePath = _fileSystem.GetCatalogFileLoadPath();
- var catalog = Resources.Load(catalogFilePath);
- if (catalog == null)
+ if (string.IsNullOrEmpty(_textData))
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Failed to load catalog file : {catalogFilePath}";
+ Error = $"Buildin catalog file content is empty !";
return;
}
- if (catalog.PackageName != _fileSystem.PackageName)
+ try
+ {
+ var catalog = JsonUtility.FromJson(_textData);
+ if (catalog.PackageName != _fileSystem.PackageName)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Catalog file package name {catalog.PackageName} cannot match the file system package name {_fileSystem.PackageName}";
+ return;
+ }
+
+ foreach (var wrapper in catalog.Wrappers)
+ {
+ var fileWrapper = new DefaultBuildinFileSystem.FileWrapper(wrapper.FileName);
+ _fileSystem.RecordCatalogFile(wrapper.BundleGUID, fileWrapper);
+ }
+
+ YooLogger.Log($"Package '{_fileSystem.PackageName}' buildin catalog files count : {catalog.Wrappers.Count}");
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeed;
+ }
+ catch (Exception e)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Catalog file package name {catalog.PackageName} cannot match the file system package name {_fileSystem.PackageName}";
- return;
+ Error = $"Failed to load catalog file : {e.Message}";
}
-
- foreach (var wrapper in catalog.Wrappers)
- {
- var fileWrapper = new DefaultBuildinFileSystem.FileWrapper(wrapper.FileName);
- _fileSystem.RecordCatalogFile(wrapper.BundleGUID, fileWrapper);
- }
-
- YooLogger.Log($"Package '{_fileSystem.PackageName}' buildin catalog files count : {catalog.Wrappers.Count}");
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeed;
}
}
}
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs
index f8245aac..b632a628 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/DefaultWebServerFileSystem.cs
@@ -200,8 +200,7 @@ namespace YooAsset
}
public string GetCatalogFileLoadPath()
{
- string fileName = Path.GetFileNameWithoutExtension(DefaultBuildinFileSystemDefine.BuildinCatalogFileName);
- return YooAssetSettingsData.GetYooResourcesLoadPath(PackageName, fileName);
+ return PathUtility.Combine(_webPackageRoot, DefaultBuildinFileSystemDefine.BuildinCatalogFileName);
}
///
diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/internal/LoadWebServerCatalogFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/internal/LoadWebServerCatalogFileOperation.cs
index 2b3b4f6b..93cf1482 100644
--- a/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/internal/LoadWebServerCatalogFileOperation.cs
+++ b/Assets/YooAsset/Runtime/FileSystem/DefaultWebServerFileSystem/Operation/internal/LoadWebServerCatalogFileOperation.cs
@@ -11,17 +11,15 @@ namespace YooAsset
private enum ESteps
{
None,
+ RequestData,
LoadCatalog,
Done,
}
private readonly DefaultWebServerFileSystem _fileSystem;
+ private UnityWebTextRequestOperation _webTextRequestOp;
private ESteps _steps = ESteps.None;
-
- ///
- /// 内置清单版本
- ///
- public string PackageVersion { private set; get; }
+ private string _textData = null;
internal LoadWebServerCatalogFileOperation(DefaultWebServerFileSystem fileSystem)
{
@@ -29,43 +27,78 @@ namespace YooAsset
}
internal override void InternalStart()
{
- _steps = ESteps.LoadCatalog;
+ _steps = ESteps.RequestData;
}
internal override void InternalUpdate()
{
if (_steps == ESteps.None || _steps == ESteps.Done)
return;
+ if (_steps == ESteps.RequestData)
+ {
+ if (_webTextRequestOp == null)
+ {
+ string filePath = _fileSystem.GetCatalogFileLoadPath();
+ string url = DownloadSystemHelper.ConvertToWWWPath(filePath);
+ _webTextRequestOp = new UnityWebTextRequestOperation(url);
+ _webTextRequestOp.StartOperation();
+ AddChildOperation(_webTextRequestOp);
+ }
+
+ _webTextRequestOp.UpdateOperation();
+ if (_webTextRequestOp.IsDone == false)
+ return;
+
+ if (_webTextRequestOp.Status == EOperationStatus.Succeed)
+ {
+ _steps = ESteps.LoadCatalog;
+ _textData = _webTextRequestOp.Result;
+ }
+ else
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = _webTextRequestOp.Error;
+ }
+ }
+
if (_steps == ESteps.LoadCatalog)
{
- string catalogFilePath = _fileSystem.GetCatalogFileLoadPath();
- var catalog = Resources.Load(catalogFilePath);
- if (catalog == null)
+ if (string.IsNullOrEmpty(_textData))
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Failed to load web server catalog file : {catalogFilePath}";
+ Error = $"Buildin catalog file content is empty !";
return;
}
- if (catalog.PackageName != _fileSystem.PackageName)
+ try
+ {
+ var catalog = JsonUtility.FromJson(_textData);
+ if (catalog.PackageName != _fileSystem.PackageName)
+ {
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Failed;
+ Error = $"Catalog file package name {catalog.PackageName} cannot match the file system package name {_fileSystem.PackageName}";
+ return;
+ }
+
+ foreach (var wrapper in catalog.Wrappers)
+ {
+ var fileWrapper = new DefaultWebServerFileSystem.FileWrapper(wrapper.FileName);
+ _fileSystem.RecordCatalogFile(wrapper.BundleGUID, fileWrapper);
+ }
+
+ YooLogger.Log($"Package '{_fileSystem.PackageName}' buildin catalog files count : {catalog.Wrappers.Count}");
+ _steps = ESteps.Done;
+ Status = EOperationStatus.Succeed;
+ }
+ catch (Exception e)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Web server catalog file package name {catalog.PackageName} cannot match the file system package name {_fileSystem.PackageName}";
- return;
+ Error = $"Failed to load catalog file : {e.Message}";
}
-
- PackageVersion = catalog.PackageVersion;
- foreach (var wrapper in catalog.Wrappers)
- {
- var fileWrapper = new DefaultWebServerFileSystem.FileWrapper(wrapper.FileName);
- _fileSystem.RecordCatalogFile(wrapper.BundleGUID, fileWrapper);
- }
-
- YooLogger.Log($"Package '{_fileSystem.PackageName}' catalog files count : {catalog.Wrappers.Count}");
- _steps = ESteps.Done;
- Status = EOperationStatus.Succeed;
}
}
}
diff --git a/Assets/YooAsset/Runtime/Settings/YooAssetSettingsData.cs b/Assets/YooAsset/Runtime/Settings/YooAssetSettingsData.cs
index 6ea1560b..e67f2c47 100644
--- a/Assets/YooAsset/Runtime/Settings/YooAssetSettingsData.cs
+++ b/Assets/YooAsset/Runtime/Settings/YooAssetSettingsData.cs
@@ -106,28 +106,6 @@ namespace YooAsset
}
#region 路径相关
- ///
- /// 获取YOO的Resources目录的加载路径
- ///
- internal static string GetYooResourcesLoadPath(string packageName, string fileName)
- {
- if (string.IsNullOrEmpty(Setting.DefaultYooFolderName))
- return PathUtility.Combine(packageName, fileName);
- else
- return PathUtility.Combine(Setting.DefaultYooFolderName, packageName, fileName);
- }
-
- ///
- /// 获取YOO的Resources目录的全路径
- ///
- internal static string GetYooResourcesFullPath()
- {
- if (string.IsNullOrEmpty(Setting.DefaultYooFolderName))
- return $"Assets/Resources";
- else
- return $"Assets/Resources/{Setting.DefaultYooFolderName}";
- }
-
///
/// 获取YOO的编辑器下缓存文件根目录
///