Compare commits

...

2 Commits

Author SHA1 Message Date
何冠峰
b0dc829b04 fix #515
资源路径大小写不敏感逻辑优化
2025-03-31 19:06:03 +08:00
何冠峰
b3ead90832 fix #526 2025-03-31 18:13:07 +08:00
7 changed files with 37 additions and 19 deletions

View File

@@ -69,8 +69,7 @@ namespace YooAsset
if (_steps == ESteps.VerifyFileData) if (_steps == ESteps.VerifyFileData)
{ {
string fileHash = HashUtility.BytesCRC32(_webDataRequestOp.Result); if (ManifestTools.VerifyManifestData(_webDataRequestOp.Result, _packageHash))
if (fileHash == _packageHash)
{ {
_steps = ESteps.LoadManifest; _steps = ESteps.LoadManifest;
} }

View File

@@ -59,8 +59,7 @@ namespace YooAsset
if (_steps == ESteps.VerifyFileData) if (_steps == ESteps.VerifyFileData)
{ {
string fileHash = HashUtility.BytesCRC32(_fileData); if (ManifestTools.VerifyManifestData(_fileData, _packageHash))
if (fileHash == _packageHash)
{ {
_steps = ESteps.LoadManifest; _steps = ESteps.LoadManifest;
} }

View File

@@ -59,8 +59,7 @@ namespace YooAsset
if (_steps == ESteps.VerifyFileData) if (_steps == ESteps.VerifyFileData)
{ {
string fileHash = HashUtility.BytesCRC32(_fileData); if (ManifestTools.VerifyManifestData(_fileData, _packageHash))
if (fileHash == _packageHash)
{ {
_steps = ESteps.LoadManifest; _steps = ESteps.LoadManifest;
} }

View File

@@ -72,8 +72,7 @@ namespace YooAsset
if (_steps == ESteps.VerifyFileData) if (_steps == ESteps.VerifyFileData)
{ {
string fileHash = HashUtility.BytesCRC32(_webDataRequestOp.Result); if (ManifestTools.VerifyManifestData(_webDataRequestOp.Result, _packageHash))
if (fileHash == _packageHash)
{ {
_steps = ESteps.LoadManifest; _steps = ESteps.LoadManifest;
} }

View File

@@ -69,8 +69,7 @@ namespace YooAsset
if (_steps == ESteps.VerifyFileData) if (_steps == ESteps.VerifyFileData)
{ {
string fileHash = HashUtility.BytesCRC32(_webDataRequestOp.Result); if (ManifestTools.VerifyManifestData(_webDataRequestOp.Result, _packageHash))
if (fileHash == _packageHash)
{ {
_steps = ESteps.LoadManifest; _steps = ESteps.LoadManifest;
} }

View File

@@ -8,6 +8,30 @@ namespace YooAsset
{ {
internal static class ManifestTools internal static class ManifestTools
{ {
/// <summary>
/// 验证清单文件的二进制数据
/// </summary>
public static bool VerifyManifestData(byte[] fileData, string hashValue)
{
if (fileData == null || fileData.Length == 0)
return false;
if (string.IsNullOrEmpty(hashValue))
return false;
// 注意:兼容俩种验证方式
// 注意计算MD5的哈希值通常为32个字符
string fileHash;
if (hashValue.Length == 32)
fileHash = HashUtility.BytesMD5(fileData);
else
fileHash = HashUtility.BytesCRC32(fileData);
if (fileHash == hashValue)
return true;
else
return false;
}
/// <summary> /// <summary>
/// 序列化JSON文件 /// 序列化JSON文件
/// </summary> /// </summary>
@@ -197,9 +221,16 @@ namespace YooAsset
manifest.AssetDic = new Dictionary<string, PackageAsset>(assetCount); manifest.AssetDic = new Dictionary<string, PackageAsset>(assetCount);
if (manifest.EnableAddressable) if (manifest.EnableAddressable)
{
manifest.AssetPathMapping1 = new Dictionary<string, string>(assetCount * 3); manifest.AssetPathMapping1 = new Dictionary<string, string>(assetCount * 3);
}
else else
manifest.AssetPathMapping1 = new Dictionary<string, string>(assetCount * 2); {
if (manifest.LocationToLower)
manifest.AssetPathMapping1 = new Dictionary<string, string>(assetCount * 2, StringComparer.OrdinalIgnoreCase);
else
manifest.AssetPathMapping1 = new Dictionary<string, string>(assetCount * 2);
}
if (manifest.IncludeAssetGUID) if (manifest.IncludeAssetGUID)
manifest.AssetPathMapping2 = new Dictionary<string, string>(assetCount); manifest.AssetPathMapping2 = new Dictionary<string, string>(assetCount);
@@ -221,8 +252,6 @@ namespace YooAsset
// 填充AssetPathMapping1 // 填充AssetPathMapping1
{ {
string location = packageAsset.AssetPath; string location = packageAsset.AssetPath;
if (manifest.LocationToLower)
location = location.ToLower();
// 添加原生路径的映射 // 添加原生路径的映射
if (manifest.AssetPathMapping1.ContainsKey(location)) if (manifest.AssetPathMapping1.ContainsKey(location))

View File

@@ -138,9 +138,6 @@ namespace YooAsset
if (string.IsNullOrEmpty(location)) if (string.IsNullOrEmpty(location))
return string.Empty; return string.Empty;
if (LocationToLower)
location = location.ToLower();
if (AssetPathMapping1.TryGetValue(location, out string assetPath)) if (AssetPathMapping1.TryGetValue(location, out string assetPath))
return assetPath; return assetPath;
else else
@@ -307,9 +304,6 @@ namespace YooAsset
return string.Empty; return string.Empty;
} }
if (LocationToLower)
location = location.ToLower();
if (AssetPathMapping1.TryGetValue(location, out string assetPath)) if (AssetPathMapping1.TryGetValue(location, out string assetPath))
{ {
return assetPath; return assetPath;