mirror of https://github.com/tuyoogame/YooAsset
update editor code
parent
ffffff16e9
commit
ecb6f71f81
|
@ -8,39 +8,54 @@ namespace YooAsset.Editor
|
||||||
{
|
{
|
||||||
public class BuildBundleInfo
|
public class BuildBundleInfo
|
||||||
{
|
{
|
||||||
public class InfoWrapper
|
#region 补丁文件的关键信息
|
||||||
{
|
/// <summary>
|
||||||
/// <summary>
|
/// Unity引擎生成的哈希值(构建内容的哈希值)
|
||||||
/// 构建内容的哈希值
|
/// </summary>
|
||||||
/// </summary>
|
public string PackageUnityHash { set; get; }
|
||||||
public string ContentHash { set; get; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 文件哈希值
|
/// Unity引擎生成的CRC
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string FileHash { set; get; }
|
public uint PackageUnityCRC { set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 文件哈希值
|
/// 文件哈希值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string FileCRC { set; get; }
|
public string PackageFileHash { set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 文件哈希值
|
/// 文件哈希值
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public long FileSize { set; get; }
|
public string PackageFileCRC { set; get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 文件哈希值
|
||||||
|
/// </summary>
|
||||||
|
public long PackageFileSize { set; get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 构建输出的文件路径
|
/// 构建输出的文件路径
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string BuildOutputFilePath { set; get; }
|
public string BuildOutputFilePath { set; get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 补丁包的源文件路径
|
||||||
|
/// </summary>
|
||||||
|
public string PackageSourceFilePath { set; get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 补丁包的目标文件路径
|
||||||
|
/// </summary>
|
||||||
|
public string PackageDestFilePath { set; get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 加密生成文件的路径
|
||||||
|
/// 注意:如果未加密该路径为空
|
||||||
|
/// </summary>
|
||||||
|
public string EncryptedFilePath { set; get; }
|
||||||
|
#endregion
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 补丁包输出文件路径
|
|
||||||
/// </summary>
|
|
||||||
public string PackageOutputFilePath { set; get; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 资源包名称
|
/// 资源包名称
|
||||||
|
@ -53,22 +68,11 @@ namespace YooAsset.Editor
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public readonly List<BuildAssetInfo> AllMainAssets = new List<BuildAssetInfo>();
|
public readonly List<BuildAssetInfo> AllMainAssets = new List<BuildAssetInfo>();
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 补丁文件信息
|
|
||||||
/// </summary>
|
|
||||||
public readonly InfoWrapper BundleInfo = new InfoWrapper();
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Bundle文件的加载方法
|
/// Bundle文件的加载方法
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public EBundleLoadMethod LoadMethod { set; get; }
|
public EBundleLoadMethod LoadMethod { set; get; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 加密生成文件的路径
|
|
||||||
/// 注意:如果未加密该路径为空
|
|
||||||
/// </summary>
|
|
||||||
public string EncryptedFilePath { set; get; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否为原生文件
|
/// 是否为原生文件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -208,9 +212,10 @@ namespace YooAsset.Editor
|
||||||
{
|
{
|
||||||
PackageBundle packageBundle = new PackageBundle();
|
PackageBundle packageBundle = new PackageBundle();
|
||||||
packageBundle.BundleName = BundleName;
|
packageBundle.BundleName = BundleName;
|
||||||
packageBundle.FileHash = BundleInfo.FileHash;
|
packageBundle.FileHash = PackageFileHash;
|
||||||
packageBundle.FileCRC = BundleInfo.FileCRC;
|
packageBundle.FileCRC = PackageFileCRC;
|
||||||
packageBundle.FileSize = BundleInfo.FileSize;
|
packageBundle.FileSize = PackageFileSize;
|
||||||
|
packageBundle.UnityCRC = PackageUnityCRC;
|
||||||
packageBundle.IsRawFile = IsRawFile;
|
packageBundle.IsRawFile = IsRawFile;
|
||||||
packageBundle.LoadMethod = (byte)LoadMethod;
|
packageBundle.LoadMethod = (byte)LoadMethod;
|
||||||
packageBundle.Tags = GetBundleTags();
|
packageBundle.Tags = GetBundleTags();
|
||||||
|
|
|
@ -70,7 +70,7 @@ namespace YooAsset.Editor
|
||||||
int fileTotalCount = buildMapContext.Collection.Count;
|
int fileTotalCount = buildMapContext.Collection.Count;
|
||||||
foreach (var bundleInfo in buildMapContext.Collection)
|
foreach (var bundleInfo in buildMapContext.Collection)
|
||||||
{
|
{
|
||||||
EditorTools.CopyFile(bundleInfo.BundleInfo.BuildOutputFilePath, bundleInfo.BundleInfo.PackageOutputFilePath, true);
|
EditorTools.CopyFile(bundleInfo.PackageSourceFilePath, bundleInfo.PackageDestFilePath, true);
|
||||||
EditorTools.DisplayProgressBar("拷贝补丁文件", ++progressValue, fileTotalCount);
|
EditorTools.DisplayProgressBar("拷贝补丁文件", ++progressValue, fileTotalCount);
|
||||||
}
|
}
|
||||||
EditorTools.ClearProgressBar();
|
EditorTools.ClearProgressBar();
|
||||||
|
|
|
@ -29,32 +29,35 @@ namespace YooAsset.Editor
|
||||||
// 2.更新构建输出的文件路径
|
// 2.更新构建输出的文件路径
|
||||||
foreach (var bundleInfo in buildMapContext.Collection)
|
foreach (var bundleInfo in buildMapContext.Collection)
|
||||||
{
|
{
|
||||||
|
bundleInfo.BuildOutputFilePath = $"{pipelineOutputDirectory}/{bundleInfo.BundleName}";
|
||||||
if (bundleInfo.IsEncryptedFile)
|
if (bundleInfo.IsEncryptedFile)
|
||||||
bundleInfo.BundleInfo.BuildOutputFilePath = bundleInfo.EncryptedFilePath;
|
bundleInfo.PackageSourceFilePath = bundleInfo.EncryptedFilePath;
|
||||||
else
|
else
|
||||||
bundleInfo.BundleInfo.BuildOutputFilePath = $"{pipelineOutputDirectory}/{bundleInfo.BundleName}";
|
bundleInfo.PackageSourceFilePath = bundleInfo.BuildOutputFilePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3.更新文件其它信息
|
// 3.更新文件其它信息
|
||||||
foreach (var bundleInfo in buildMapContext.Collection)
|
foreach (var bundleInfo in buildMapContext.Collection)
|
||||||
{
|
{
|
||||||
string buildOutputFilePath = bundleInfo.BundleInfo.BuildOutputFilePath;
|
bundleInfo.PackageUnityHash = GetUnityHash(bundleInfo, context);
|
||||||
bundleInfo.BundleInfo.ContentHash = GetBundleContentHash(bundleInfo, context);
|
bundleInfo.PackageUnityCRC = GetUnityCRC(bundleInfo, context);
|
||||||
bundleInfo.BundleInfo.FileHash = GetBundleFileHash(buildOutputFilePath, buildParametersContext);
|
bundleInfo.PackageFileHash = GetBundleFileHash(bundleInfo.PackageSourceFilePath, buildParametersContext);
|
||||||
bundleInfo.BundleInfo.FileCRC = GetBundleFileCRC(buildOutputFilePath, buildParametersContext);
|
bundleInfo.PackageFileCRC = GetBundleFileCRC(bundleInfo.PackageSourceFilePath, buildParametersContext);
|
||||||
bundleInfo.BundleInfo.FileSize = GetBundleFileSize(buildOutputFilePath, buildParametersContext);
|
bundleInfo.PackageFileSize = GetBundleFileSize(bundleInfo.PackageSourceFilePath, buildParametersContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4.更新补丁包输出的文件路径
|
// 4.更新补丁包输出的文件路径
|
||||||
foreach (var bundleInfo in buildMapContext.Collection)
|
foreach (var bundleInfo in buildMapContext.Collection)
|
||||||
{
|
{
|
||||||
string fileExtension = ManifestTools.GetRemoteBundleFileExtension(bundleInfo.BundleName);
|
string bundleName = bundleInfo.BundleName;
|
||||||
string fileName = ManifestTools.GetRemoteBundleFileName(outputNameStyle, bundleInfo.BundleName, fileExtension, bundleInfo.BundleInfo.FileHash);
|
string fileHash = bundleInfo.PackageFileHash;
|
||||||
bundleInfo.BundleInfo.PackageOutputFilePath = $"{packageOutputDirectory}/{fileName}";
|
string fileExtension = ManifestTools.GetRemoteBundleFileExtension(bundleName);
|
||||||
|
string fileName = ManifestTools.GetRemoteBundleFileName(outputNameStyle, bundleName, fileExtension, fileHash);
|
||||||
|
bundleInfo.PackageDestFilePath = $"{packageOutputDirectory}/{fileName}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetBundleContentHash(BuildBundleInfo bundleInfo, BuildContext context)
|
private string GetUnityHash(BuildBundleInfo bundleInfo, BuildContext context)
|
||||||
{
|
{
|
||||||
var buildParametersContext = context.GetContextObject<BuildParametersContext>();
|
var buildParametersContext = context.GetContextObject<BuildParametersContext>();
|
||||||
var parameters = buildParametersContext.Parameters;
|
var parameters = buildParametersContext.Parameters;
|
||||||
|
@ -64,7 +67,7 @@ namespace YooAsset.Editor
|
||||||
|
|
||||||
if (bundleInfo.IsRawFile)
|
if (bundleInfo.IsRawFile)
|
||||||
{
|
{
|
||||||
string filePath = bundleInfo.BundleInfo.BuildOutputFilePath;
|
string filePath = bundleInfo.PackageSourceFilePath;
|
||||||
return HashUtility.FileMD5(filePath);
|
return HashUtility.FileMD5(filePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +78,7 @@ namespace YooAsset.Editor
|
||||||
if (hash.isValid)
|
if (hash.isValid)
|
||||||
return hash.ToString();
|
return hash.ToString();
|
||||||
else
|
else
|
||||||
throw new Exception($"Not found bundle in build result : {bundleInfo.BundleName}");
|
throw new Exception($"Not found bundle hash in build result : {bundleInfo.BundleName}");
|
||||||
}
|
}
|
||||||
else if (parameters.BuildPipeline == EBuildPipeline.ScriptableBuildPipeline)
|
else if (parameters.BuildPipeline == EBuildPipeline.ScriptableBuildPipeline)
|
||||||
{
|
{
|
||||||
|
@ -84,7 +87,39 @@ namespace YooAsset.Editor
|
||||||
if (buildResult.Results.BundleInfos.TryGetValue(bundleInfo.BundleName, out var value))
|
if (buildResult.Results.BundleInfos.TryGetValue(bundleInfo.BundleName, out var value))
|
||||||
return value.Hash.ToString();
|
return value.Hash.ToString();
|
||||||
else
|
else
|
||||||
throw new Exception($"Not found bundle in build result : {bundleInfo.BundleName}");
|
throw new Exception($"Not found bundle hash in build result : {bundleInfo.BundleName}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new System.NotImplementedException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private uint GetUnityCRC(BuildBundleInfo bundleInfo, BuildContext context)
|
||||||
|
{
|
||||||
|
var buildParametersContext = context.GetContextObject<BuildParametersContext>();
|
||||||
|
var parameters = buildParametersContext.Parameters;
|
||||||
|
var buildMode = parameters.BuildMode;
|
||||||
|
if (buildMode == EBuildMode.DryRunBuild || buildMode == EBuildMode.SimulateBuild)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (bundleInfo.IsRawFile)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (parameters.BuildPipeline == EBuildPipeline.BuiltinBuildPipeline)
|
||||||
|
{
|
||||||
|
string filePath = bundleInfo.BuildOutputFilePath;
|
||||||
|
if (BuildPipeline.GetCRCForAssetBundle(filePath, out uint crc))
|
||||||
|
return crc;
|
||||||
|
else
|
||||||
|
throw new Exception($"Not found bundle crc in build result : {bundleInfo.BundleName}");
|
||||||
|
}
|
||||||
|
else if (parameters.BuildPipeline == EBuildPipeline.ScriptableBuildPipeline)
|
||||||
|
{
|
||||||
|
var buildResult = context.GetContextObject<TaskBuilding_SBP.BuildResultContext>();
|
||||||
|
if (buildResult.Results.BundleInfos.TryGetValue(bundleInfo.BundleName, out var value))
|
||||||
|
return value.Crc;
|
||||||
|
else
|
||||||
|
throw new Exception($"Not found bundle crc in build result : {bundleInfo.BundleName}");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue