Compare commits

...

11 Commits

Author SHA1 Message Date
何冠峰
64e9734bbe update sapce shooter 2025-02-22 14:14:18 +08:00
何冠峰
f6244885be update diagnostic system
优化了Debugger窗口的显示页面
2025-02-22 14:14:05 +08:00
何冠峰
82c57c382f update TableView
支持Counter
2025-02-21 16:54:43 +08:00
何冠峰
7eacb46555 update resource package 2025-02-21 15:29:42 +08:00
何冠峰
d9c911d89b update asset bundle reporter 2025-02-20 18:50:26 +08:00
何冠峰
a3ceb3dcb6 update asset bundle builder 2025-02-20 12:04:42 +08:00
何冠峰
a5b68b28b2 update asset bundle builder 2025-02-20 11:27:44 +08:00
何冠峰
bd285faf37 update space shooter 2025-02-20 11:27:30 +08:00
何冠峰
8a4960b560 code style 2025-02-20 11:02:59 +08:00
何冠峰
83c6ae2057 update asset bundle builder
修复怀旧依赖模式下,TAG传染不正确的问题。
2025-02-20 11:01:25 +08:00
何冠峰
b71563e889 Update EBuildBundleType.cs 2025-02-20 10:02:12 +08:00
44 changed files with 692 additions and 448 deletions

View File

@@ -56,13 +56,13 @@ namespace YooAsset.Editor
public string EncryptedFilePath { set; get; } public string EncryptedFilePath { set; get; }
#endregion #endregion
private readonly HashSet<string> _assetPaths = new HashSet<string>(); private readonly Dictionary<string, BuildAssetInfo> _packAssetDic = new Dictionary<string, BuildAssetInfo>(100);
/// <summary> /// <summary>
/// 参与构建的资源列表 /// 参与构建的资源列表
/// 注意:不包含零依赖资源和冗余资源 /// 注意:不包含零依赖资源和冗余资源
/// </summary> /// </summary>
public readonly List<BuildAssetInfo> MainAssets = new List<BuildAssetInfo>(); public readonly List<BuildAssetInfo> AllPackAssets = new List<BuildAssetInfo>(100);
/// <summary> /// <summary>
/// 资源包名称 /// 资源包名称
@@ -86,51 +86,68 @@ namespace YooAsset.Editor
public void PackAsset(BuildAssetInfo buildAsset) public void PackAsset(BuildAssetInfo buildAsset)
{ {
string assetPath = buildAsset.AssetInfo.AssetPath; string assetPath = buildAsset.AssetInfo.AssetPath;
if (_assetPaths.Contains(assetPath)) if (_packAssetDic.ContainsKey(assetPath))
throw new System.Exception($"Should never get here ! Asset is existed : {assetPath}"); throw new System.Exception($"Should never get here ! Asset is existed : {assetPath}");
_assetPaths.Add(assetPath); _packAssetDic.Add(assetPath, buildAsset);
MainAssets.Add(buildAsset); AllPackAssets.Add(buildAsset);
} }
/// <summary> /// <summary>
/// 是否包含指定资源 /// 是否包含指定资源
/// </summary> /// </summary>
public bool IsContainsAsset(string assetPath) public bool IsContainsPackAsset(string assetPath)
{ {
return _assetPaths.Contains(assetPath); return _packAssetDic.ContainsKey(assetPath);
} }
/// <summary> /// <summary>
/// 获取构建的资源路径列表 /// 获取构建的资源路径列表
/// </summary> /// </summary>
public string[] GetAllMainAssetPaths() public string[] GetAllPackAssetPaths()
{ {
return MainAssets.Select(t => t.AssetInfo.AssetPath).ToArray(); return AllPackAssets.Select(t => t.AssetInfo.AssetPath).ToArray();
} }
/// <summary> /// <summary>
/// 获取该资源包内的所有资源(包括零依赖资源和冗余资源) /// 获取构建的主资源信息
/// </summary> /// </summary>
public List<string> GetAllBuiltinAssetPaths() public BuildAssetInfo GetPackAssetInfo(string assetPath)
{ {
var packAssets = GetAllMainAssetPaths(); if (_packAssetDic.TryGetValue(assetPath, out BuildAssetInfo value))
List<string> result = new List<string>(packAssets);
foreach (var buildAsset in MainAssets)
{ {
if (buildAsset.AllDependAssetInfos == null) return value;
continue; }
foreach (var dependAssetInfo in buildAsset.AllDependAssetInfos) else
{
throw new Exception($"Can not found pack asset info {assetPath} in bundle : {BundleName}");
}
}
/// <summary>
/// 获取资源包内部所有资产
/// </summary>
public List<AssetInfo> GetBundleContents()
{
Dictionary<string, AssetInfo> result = new Dictionary<string, AssetInfo>(AllPackAssets.Count);
foreach (var packAsset in AllPackAssets)
{
result.Add(packAsset.AssetInfo.AssetPath, packAsset.AssetInfo);
if (packAsset.AllDependAssetInfos != null)
{ {
// 注意:依赖资源里只添加零依赖资源和冗余资源 foreach (var dependAssetInfo in packAsset.AllDependAssetInfos)
if (dependAssetInfo.HasBundleName() == false)
{ {
if (result.Contains(dependAssetInfo.AssetInfo.AssetPath) == false) // 注意:依赖资源里只添加零依赖资源和冗余资源
result.Add(dependAssetInfo.AssetInfo.AssetPath); if (dependAssetInfo.HasBundleName() == false)
{
string dependAssetPath = dependAssetInfo.AssetInfo.AssetPath;
if (result.ContainsKey(dependAssetPath) == false)
result.Add(dependAssetPath, dependAssetInfo.AssetInfo);
}
} }
} }
} }
return result; return result.Values.ToList();
} }
/// <summary> /// <summary>
@@ -142,7 +159,7 @@ namespace YooAsset.Editor
AssetBundleBuild build = new AssetBundleBuild(); AssetBundleBuild build = new AssetBundleBuild();
build.assetBundleName = BundleName; build.assetBundleName = BundleName;
build.assetBundleVariant = string.Empty; build.assetBundleVariant = string.Empty;
build.assetNames = GetAllMainAssetPaths(); build.assetNames = GetAllPackAssetPaths();
return build; return build;
} }
@@ -151,7 +168,7 @@ namespace YooAsset.Editor
/// </summary> /// </summary>
public BuildAssetInfo[] GetAllManifestAssetInfos() public BuildAssetInfo[] GetAllManifestAssetInfos()
{ {
return MainAssets.Where(t => t.CollectorType == ECollectorType.MainAssetCollector).ToArray(); return AllPackAssets.Where(t => t.CollectorType == ECollectorType.MainAssetCollector).ToArray();
} }
/// <summary> /// <summary>

View File

@@ -51,12 +51,6 @@ namespace YooAsset.Editor
/// </summary> /// </summary>
public string PackageNote; public string PackageNote;
/// <summary>
/// 旧版依赖模式
/// 说明兼容YooAssets1.5.x版本
/// </summary>
public bool LegacyDependency = false;
/// <summary> /// <summary>
/// 清空构建缓存文件 /// 清空构建缓存文件
/// </summary> /// </summary>

View File

@@ -31,7 +31,6 @@ namespace YooAsset.Editor
// 创建新补丁清单 // 创建新补丁清单
PackageManifest manifest = new PackageManifest(); PackageManifest manifest = new PackageManifest();
manifest.FileVersion = YooAssetSettings.ManifestFileVersion; manifest.FileVersion = YooAssetSettings.ManifestFileVersion;
manifest.LegacyDependency = buildParameters.LegacyDependency;
manifest.EnableAddressable = buildMapContext.Command.EnableAddressable; manifest.EnableAddressable = buildMapContext.Command.EnableAddressable;
manifest.LocationToLower = buildMapContext.Command.LocationToLower; manifest.LocationToLower = buildMapContext.Command.LocationToLower;
manifest.IncludeAssetGUID = buildMapContext.Command.IncludeAssetGUID; manifest.IncludeAssetGUID = buildMapContext.Command.IncludeAssetGUID;
@@ -44,24 +43,20 @@ namespace YooAsset.Editor
manifest.AssetList = CreatePackageAssetList(buildMapContext); manifest.AssetList = CreatePackageAssetList(buildMapContext);
manifest.BundleList = CreatePackageBundleList(buildMapContext); manifest.BundleList = CreatePackageBundleList(buildMapContext);
// 处理资源清单的资源对象 // 1. 处理资源清单的资源对象
ProcessPacakgeAsset(manifest); ProcessPacakgeAsset(manifest);
// 处理资源包的依赖列表 // 2. 处理资源包的依赖列表
if (processBundleDepends) if (processBundleDepends)
ProcessBundleDepends(context, manifest); ProcessBundleDepends(context, manifest);
// 处理资源包的标签集合 // 3. 处理资源包的标签集合
if (processBundleTags) if (processBundleTags)
ProcessBundleTags(manifest); ProcessBundleTags(manifest);
#region YOOASSET_LEGACY_DEPENDENCY // 4. 处理内置资源包
if (buildParameters.LegacyDependency) if (processBundleDepends)
{ ProcessBuiltinBundleDependency(context, manifest);
if (processBundleDepends)
ProcessLegacyDependency(context, manifest);
}
#endregion
// 创建补丁清单文本文件 // 创建补丁清单文本文件
{ {
@@ -73,17 +68,13 @@ namespace YooAsset.Editor
// 创建补丁清单二进制文件 // 创建补丁清单二进制文件
string packageHash; string packageHash;
string packagePath;
{ {
string fileName = YooAssetSettingsData.GetManifestBinaryFileName(buildParameters.PackageName, buildParameters.PackageVersion); string fileName = YooAssetSettingsData.GetManifestBinaryFileName(buildParameters.PackageName, buildParameters.PackageVersion);
string filePath = $"{packageOutputDirectory}/{fileName}"; packagePath = $"{packageOutputDirectory}/{fileName}";
ManifestTools.SerializeToBinary(filePath, manifest); ManifestTools.SerializeToBinary(packagePath, manifest);
packageHash = HashUtility.FileCRC32(filePath); packageHash = HashUtility.FileCRC32(packagePath);
BuildLogger.Log($"Create package manifest file: {filePath}"); BuildLogger.Log($"Create package manifest file: {packagePath}");
ManifestContext manifestContext = new ManifestContext();
byte[] bytesData = FileUtility.ReadAllBytes(filePath);
manifestContext.Manifest = ManifestTools.DeserializeFromBinary(bytesData);
context.SetContextObject(manifestContext);
} }
// 创建补丁清单哈希文件 // 创建补丁清单哈希文件
@@ -101,6 +92,14 @@ namespace YooAsset.Editor
FileUtility.WriteAllText(filePath, buildParameters.PackageVersion); FileUtility.WriteAllText(filePath, buildParameters.PackageVersion);
BuildLogger.Log($"Create package manifest version file: {filePath}"); BuildLogger.Log($"Create package manifest version file: {filePath}");
} }
// 填充上下文
{
ManifestContext manifestContext = new ManifestContext();
byte[] bytesData = FileUtility.ReadAllBytes(packagePath);
manifestContext.Manifest = ManifestTools.DeserializeFromBinary(bytesData);
context.SetContextObject(manifestContext);
}
} }
/// <summary> /// <summary>
@@ -191,6 +190,14 @@ namespace YooAsset.Editor
var assetInfo = packageAsset.TempDataInEditor as BuildAssetInfo; var assetInfo = packageAsset.TempDataInEditor as BuildAssetInfo;
packageAsset.BundleID = GetCachedBundleIndexID(assetInfo.BundleName); packageAsset.BundleID = GetCachedBundleIndexID(assetInfo.BundleName);
} }
// 记录资源对象依赖的资源包ID集合
// 注意:依赖关系非引擎构建结果里查询!
foreach (var packageAsset in manifest.AssetList)
{
var mainAssetInfo = packageAsset.TempDataInEditor as BuildAssetInfo;
packageAsset.DependBundleIDs = GetAssetDependBundleIDs(mainAssetInfo);
}
} }
/// <summary> /// <summary>
@@ -202,15 +209,18 @@ namespace YooAsset.Editor
foreach (var packageBundle in manifest.BundleList) foreach (var packageBundle in manifest.BundleList)
{ {
int mainBundleID = GetCachedBundleIndexID(packageBundle.BundleName); int mainBundleID = GetCachedBundleIndexID(packageBundle.BundleName);
string[] depends = GetBundleDepends(context, packageBundle.BundleName); string[] dependNames = GetBundleDepends(context, packageBundle.BundleName);
List<int> dependIDs = new List<int>(depends.Length); List<int> dependIDs = new List<int>(dependNames.Length);
foreach (var dependBundleName in depends) foreach (var dependName in dependNames)
{ {
int bundleID = GetCachedBundleIndexID(dependBundleName); int dependBundleID = GetCachedBundleIndexID(dependName);
if (bundleID != mainBundleID) if (dependBundleID != mainBundleID)
dependIDs.Add(bundleID); dependIDs.Add(dependBundleID);
} }
packageBundle.DependIDs = dependIDs.ToArray();
// 排序并填充数据
dependIDs.Sort();
packageBundle.DependBundleIDs = dependIDs.ToArray();
} }
} }
@@ -219,23 +229,27 @@ namespace YooAsset.Editor
/// </summary> /// </summary>
private void ProcessBundleTags(PackageManifest manifest) private void ProcessBundleTags(PackageManifest manifest)
{ {
foreach (var packageBundle in manifest.BundleList)
{
packageBundle.Tags = Array.Empty<string>();
}
// 将主资源的标签信息传染给其依赖的资源包集合 // 将主资源的标签信息传染给其依赖的资源包集合
foreach (var packageAsset in manifest.AssetList) foreach (var packageAsset in manifest.AssetList)
{ {
var assetTags = packageAsset.AssetTags; var assetTags = packageAsset.AssetTags;
int bundleID = packageAsset.BundleID; int bundleID = packageAsset.BundleID;
CacheBundleTags(bundleID, assetTags); CacheBundleTags(bundleID, assetTags);
if (packageAsset.DependBundleIDs != null)
var packageBundle = manifest.BundleList[bundleID];
if (packageBundle.DependIDs != null)
{ {
foreach (var dependBundleID in packageBundle.DependIDs) foreach (var dependBundleID in packageAsset.DependBundleIDs)
{ {
CacheBundleTags(dependBundleID, assetTags); CacheBundleTags(dependBundleID, assetTags);
} }
} }
} }
// 将缓存的资源标签赋值给资源包
for (int index = 0; index < manifest.BundleList.Count; index++) for (int index = 0; index < manifest.BundleList.Count; index++)
{ {
var packageBundle = manifest.BundleList[index]; var packageBundle = manifest.BundleList[index];
@@ -284,46 +298,15 @@ namespace YooAsset.Editor
} }
#region YOOASSET_LEGACY_DEPENDENCY #region YOOASSET_LEGACY_DEPENDENCY
private class DependencyQuery private void ProcessBuiltinBundleDependency(BuildContext context, PackageManifest manifest)
{ {
private readonly HashSet<int> _dependIDs;
public DependencyQuery(int[] dependIDs)
{
_dependIDs = new HashSet<int>(dependIDs);
}
public bool Contains(int bundleID)
{
return _dependIDs.Contains(bundleID);
}
}
private void ProcessLegacyDependency(BuildContext context, PackageManifest manifest)
{
foreach (var packageBundle in manifest.BundleList)
{
var dependIDs = packageBundle.DependIDs;
packageBundle.TempDataInEditor = new DependencyQuery(dependIDs);
}
// 记录资源对象依赖的资源包ID集合
// 注意:依赖关系非引擎构建结果里查询!
foreach (var packageAsset in manifest.AssetList)
{
var mainAssetInfo = packageAsset.TempDataInEditor as BuildAssetInfo;
packageAsset.DependBundleIDs = GetAssetDependBundleIDs(mainAssetInfo);
}
// 记录引用该资源包的资源包ID集合
foreach (var packageBundle in manifest.BundleList)
{
packageBundle.ReferenceBundleIDs = GetBundleReferenceBundleIDs(manifest, packageBundle);
}
// 注意:如果是可编程构建管线,需要补充内置资源包 // 注意:如果是可编程构建管线,需要补充内置资源包
// 注意:该步骤依赖前面的操作! // 注意:该步骤依赖前面的操作!
var buildResultContext = context.TryGetContextObject<TaskBuilding_SBP.BuildResultContext>(); var buildResultContext = context.TryGetContextObject<TaskBuilding_SBP.BuildResultContext>();
if (buildResultContext != null) if (buildResultContext != null)
{ {
// 注意:初始化资源清单建立引用关系
ManifestTools.InitManifest(manifest);
ProcessBuiltinBundleReference(context, manifest, buildResultContext.BuiltinShadersBundleName); ProcessBuiltinBundleReference(context, manifest, buildResultContext.BuiltinShadersBundleName);
ProcessBuiltinBundleReference(context, manifest, buildResultContext.MonoScriptsBundleName); ProcessBuiltinBundleReference(context, manifest, buildResultContext.MonoScriptsBundleName);
} }
@@ -387,26 +370,11 @@ namespace YooAsset.Editor
} }
} }
} }
return result.ToArray();
}
private int[] GetBundleReferenceBundleIDs(PackageManifest manifest, PackageBundle queryBundle)
{
int queryBundleID = GetCachedBundleIndexID(queryBundle.BundleName);
List<int> result = new List<int>();
foreach (var packageBundle in manifest.BundleList)
{
if (packageBundle == queryBundle)
continue;
var dependencyQuery = packageBundle.TempDataInEditor as DependencyQuery; // 排序并返回数据
if (dependencyQuery.Contains(queryBundleID)) List<int> listResult = new List<int>(result);
{ listResult.Sort();
int referenceBundleID = GetCachedBundleIndexID(packageBundle.BundleName); return listResult.ToArray();
if (result.Contains(referenceBundleID) == false)
result.Add(referenceBundleID);
}
}
return result.ToArray();
} }
#endregion #endregion
} }

View File

@@ -18,11 +18,7 @@ namespace YooAsset.Editor
// 概述信息 // 概述信息
{ {
#if UNITY_2019_4_OR_NEWER buildReport.Summary.YooVersion = EditorTools.GetPackageManagerYooVersion();
UnityEditor.PackageManager.PackageInfo packageInfo = UnityEditor.PackageManager.PackageInfo.FindForAssembly(typeof(BuildReport).Assembly);
if (packageInfo != null)
buildReport.Summary.YooVersion = packageInfo.version;
#endif
buildReport.Summary.UnityVersion = UnityEngine.Application.unityVersion; buildReport.Summary.UnityVersion = UnityEngine.Application.unityVersion;
buildReport.Summary.BuildDate = DateTime.Now.ToString(); buildReport.Summary.BuildDate = DateTime.Now.ToString();
buildReport.Summary.BuildSeconds = BuildRunner.TotalSeconds; buildReport.Summary.BuildSeconds = BuildRunner.TotalSeconds;
@@ -38,37 +34,34 @@ namespace YooAsset.Editor
buildReport.Summary.EnableAddressable = buildMapContext.Command.EnableAddressable; buildReport.Summary.EnableAddressable = buildMapContext.Command.EnableAddressable;
buildReport.Summary.LocationToLower = buildMapContext.Command.LocationToLower; buildReport.Summary.LocationToLower = buildMapContext.Command.LocationToLower;
buildReport.Summary.IncludeAssetGUID = buildMapContext.Command.IncludeAssetGUID; buildReport.Summary.IncludeAssetGUID = buildMapContext.Command.IncludeAssetGUID;
buildReport.Summary.IgnoreRuleName = buildMapContext.Command.IgnoreRule.GetType().FullName;
buildReport.Summary.AutoCollectShaders = buildMapContext.Command.AutoCollectShaders; buildReport.Summary.AutoCollectShaders = buildMapContext.Command.AutoCollectShaders;
buildReport.Summary.IgnoreRuleName = buildMapContext.Command.IgnoreRule.GetType().FullName;
// 构建参数 // 构建参数
buildReport.Summary.LegacyDependency = buildParameters.LegacyDependency;
buildReport.Summary.ClearBuildCacheFiles = buildParameters.ClearBuildCacheFiles; buildReport.Summary.ClearBuildCacheFiles = buildParameters.ClearBuildCacheFiles;
buildReport.Summary.UseAssetDependencyDB = buildParameters.UseAssetDependencyDB; buildReport.Summary.UseAssetDependencyDB = buildParameters.UseAssetDependencyDB;
buildReport.Summary.EnableSharePackRule = buildParameters.EnableSharePackRule; buildReport.Summary.EnableSharePackRule = buildParameters.EnableSharePackRule;
buildReport.Summary.SingleReferencedPackAlone = buildParameters.SingleReferencedPackAlone;
buildReport.Summary.FileNameStyle = buildParameters.FileNameStyle;
buildReport.Summary.EncryptionClassName = buildParameters.EncryptionServices == null ? "null" : buildParameters.EncryptionServices.GetType().FullName; buildReport.Summary.EncryptionClassName = buildParameters.EncryptionServices == null ? "null" : buildParameters.EncryptionServices.GetType().FullName;
if (buildParameters.BuildPipeline == nameof(BuiltinBuildPipeline)) if (buildParameters is BuiltinBuildParameters)
{ {
var builtinBuildParameters = buildParameters as BuiltinBuildParameters; var builtinBuildParameters = buildParameters as BuiltinBuildParameters;
buildReport.Summary.FileNameStyle = buildParameters.FileNameStyle;
buildReport.Summary.CompressOption = builtinBuildParameters.CompressOption; buildReport.Summary.CompressOption = builtinBuildParameters.CompressOption;
buildReport.Summary.DisableWriteTypeTree = builtinBuildParameters.DisableWriteTypeTree; buildReport.Summary.DisableWriteTypeTree = builtinBuildParameters.DisableWriteTypeTree;
buildReport.Summary.IgnoreTypeTreeChanges = builtinBuildParameters.IgnoreTypeTreeChanges; buildReport.Summary.IgnoreTypeTreeChanges = builtinBuildParameters.IgnoreTypeTreeChanges;
} }
else if (buildParameters.BuildPipeline == nameof(ScriptableBuildPipeline)) else if (buildParameters is ScriptableBuildParameters)
{ {
var scriptableBuildParameters = buildParameters as ScriptableBuildParameters; var scriptableBuildParameters = buildParameters as ScriptableBuildParameters;
buildReport.Summary.FileNameStyle = buildParameters.FileNameStyle;
buildReport.Summary.CompressOption = scriptableBuildParameters.CompressOption; buildReport.Summary.CompressOption = scriptableBuildParameters.CompressOption;
buildReport.Summary.DisableWriteTypeTree = scriptableBuildParameters.DisableWriteTypeTree; buildReport.Summary.DisableWriteTypeTree = scriptableBuildParameters.DisableWriteTypeTree;
buildReport.Summary.IgnoreTypeTreeChanges = scriptableBuildParameters.IgnoreTypeTreeChanges; buildReport.Summary.IgnoreTypeTreeChanges = scriptableBuildParameters.IgnoreTypeTreeChanges;
} buildReport.Summary.WriteLinkXML = scriptableBuildParameters.WriteLinkXML;
else buildReport.Summary.CacheServerHost = scriptableBuildParameters.CacheServerHost;
{ buildReport.Summary.CacheServerPort = scriptableBuildParameters.CacheServerPort;
buildReport.Summary.FileNameStyle = buildParameters.FileNameStyle; buildReport.Summary.BuiltinShadersBundleName = scriptableBuildParameters.BuiltinShadersBundleName;
buildReport.Summary.CompressOption = ECompressOption.Uncompressed; buildReport.Summary.MonoScriptsBundleName = scriptableBuildParameters.MonoScriptsBundleName;
buildReport.Summary.DisableWriteTypeTree = false;
buildReport.Summary.IgnoreTypeTreeChanges = false;
} }
// 构建结果 // 构建结果
@@ -92,7 +85,8 @@ namespace YooAsset.Editor
reportAssetInfo.AssetGUID = AssetDatabase.AssetPathToGUID(packageAsset.AssetPath); reportAssetInfo.AssetGUID = AssetDatabase.AssetPathToGUID(packageAsset.AssetPath);
reportAssetInfo.MainBundleName = mainBundle.BundleName; reportAssetInfo.MainBundleName = mainBundle.BundleName;
reportAssetInfo.MainBundleSize = mainBundle.FileSize; reportAssetInfo.MainBundleSize = mainBundle.FileSize;
reportAssetInfo.DependAssets = GetDependAssets(buildMapContext, mainBundle.BundleName, packageAsset.AssetPath); reportAssetInfo.DependAssets = GetAssetDependAssets(buildMapContext, mainBundle.BundleName, packageAsset.AssetPath);
reportAssetInfo.DependBundles = GetAssetDependBundles(manifest, packageAsset);
buildReport.AssetInfos.Add(reportAssetInfo); buildReport.AssetInfos.Add(reportAssetInfo);
} }
@@ -108,8 +102,9 @@ namespace YooAsset.Editor
reportBundleInfo.FileSize = packageBundle.FileSize; reportBundleInfo.FileSize = packageBundle.FileSize;
reportBundleInfo.Encrypted = packageBundle.Encrypted; reportBundleInfo.Encrypted = packageBundle.Encrypted;
reportBundleInfo.Tags = packageBundle.Tags; reportBundleInfo.Tags = packageBundle.Tags;
reportBundleInfo.DependBundles = GetDependBundles(manifest, packageBundle); reportBundleInfo.DependBundles = GetBundleDependBundles(manifest, packageBundle);
reportBundleInfo.AllBuiltinAssets = GetAllBuiltinAssets(buildMapContext, packageBundle.BundleName); reportBundleInfo.ReferenceBundles = GetBundleReferenceBundles(manifest, packageBundle);
reportBundleInfo.BundleContents = GetBundleContents(buildMapContext, packageBundle.BundleName);
buildReport.BundleInfos.Add(reportBundleInfo); buildReport.BundleInfos.Add(reportBundleInfo);
} }
@@ -124,12 +119,28 @@ namespace YooAsset.Editor
} }
/// <summary> /// <summary>
/// 获取资源对象依赖的所有资源 /// 获取资源对象依赖的其它所有资源
/// </summary> /// </summary>
private List<string> GetDependBundles(PackageManifest manifest, PackageBundle packageBundle) private List<AssetInfo> GetAssetDependAssets(BuildMapContext buildMapContext, string bundleName, string assetPath)
{ {
List<string> dependBundles = new List<string>(packageBundle.DependIDs.Length); List<AssetInfo> result = new List<AssetInfo>();
foreach (int index in packageBundle.DependIDs) var bundleInfo = buildMapContext.GetBundleInfo(bundleName);
var assetInfo = bundleInfo.GetPackAssetInfo(assetPath);
foreach (var dependAssetInfo in assetInfo.AllDependAssetInfos)
{
result.Add(dependAssetInfo.AssetInfo);
}
result.Sort();
return result;
}
/// <summary>
/// 获取资源对象依赖的资源包集合
/// </summary>
private List<string> GetAssetDependBundles(PackageManifest manifest, PackageAsset packageAsset)
{
List<string> dependBundles = new List<string>(packageAsset.DependBundleIDs.Length);
foreach (int index in packageAsset.DependBundleIDs)
{ {
string dependBundleName = manifest.BundleList[index].BundleName; string dependBundleName = manifest.BundleList[index].BundleName;
dependBundles.Add(dependBundleName); dependBundles.Add(dependBundleName);
@@ -139,42 +150,42 @@ namespace YooAsset.Editor
} }
/// <summary> /// <summary>
/// 获取资源对象依赖的其它所有资源 /// 获取资源依赖的资源包集合
/// </summary> /// </summary>
private List<string> GetDependAssets(BuildMapContext buildMapContext, string bundleName, string assetPath) private List<string> GetBundleDependBundles(PackageManifest manifest, PackageBundle packageBundle)
{ {
List<string> result = new List<string>(); List<string> dependBundles = new List<string>(packageBundle.DependBundleIDs.Length);
var bundleInfo = buildMapContext.GetBundleInfo(bundleName); foreach (int index in packageBundle.DependBundleIDs)
{ {
BuildAssetInfo findAssetInfo = null; string dependBundleName = manifest.BundleList[index].BundleName;
foreach (var buildAsset in bundleInfo.MainAssets) dependBundles.Add(dependBundleName);
{
if (buildAsset.AssetInfo.AssetPath == assetPath)
{
findAssetInfo = buildAsset;
break;
}
}
if (findAssetInfo == null)
{
throw new Exception($"Should never get here ! Not found asset {assetPath} in bunlde {bundleName}");
}
foreach (var dependAssetInfo in findAssetInfo.AllDependAssetInfos)
{
result.Add(dependAssetInfo.AssetInfo.AssetPath);
}
} }
result.Sort(); dependBundles.Sort();
return result; return dependBundles;
} }
/// <summary> /// <summary>
/// 获取该资源包内的所有资源 /// 获取引用该资源包的资源包集合
/// </summary> /// </summary>
private List<string> GetAllBuiltinAssets(BuildMapContext buildMapContext, string bundleName) private List<string> GetBundleReferenceBundles(PackageManifest manifest, PackageBundle packageBundle)
{
List<string> referenceBundles = new List<string>(packageBundle.ReferenceBundleIDs.Count);
foreach (int index in packageBundle.ReferenceBundleIDs)
{
string dependBundleName = manifest.BundleList[index].BundleName;
referenceBundles.Add(dependBundleName);
}
referenceBundles.Sort();
return referenceBundles;
}
/// <summary>
/// 获取资源包内部所有资产
/// </summary>
private List<AssetInfo> GetBundleContents(BuildMapContext buildMapContext, string bundleName)
{ {
var bundleInfo = buildMapContext.GetBundleInfo(bundleName); var bundleInfo = buildMapContext.GetBundleInfo(bundleName);
List<string> result = bundleInfo.GetAllBuiltinAssetPaths(); List<AssetInfo> result = bundleInfo.GetBundleContents();
result.Sort(); result.Sort();
return result; return result;
} }

View File

@@ -45,7 +45,7 @@ namespace YooAsset.Editor
{ {
long tempSize = 0; long tempSize = 0;
var assetPaths = bundleInfo.GetAllMainAssetPaths(); var assetPaths = bundleInfo.GetAllPackAssetPaths();
foreach (var assetPath in assetPaths) foreach (var assetPath in assetPaths)
{ {
long size = FileUtility.GetFileSize(assetPath); long size = FileUtility.GetFileSize(assetPath);

View File

@@ -23,7 +23,7 @@ namespace YooAsset.Editor
foreach (var bundleInfo in buildMapContext.Collection) foreach (var bundleInfo in buildMapContext.Collection)
{ {
string dest = $"{pipelineOutputDirectory}/{bundleInfo.BundleName}"; string dest = $"{pipelineOutputDirectory}/{bundleInfo.BundleName}";
foreach (var buildAsset in bundleInfo.MainAssets) foreach (var buildAsset in bundleInfo.AllPackAssets)
{ {
EditorTools.CopyFile(buildAsset.AssetInfo.AssetPath, dest, true); EditorTools.CopyFile(buildAsset.AssetInfo.AssetPath, dest, true);
} }

View File

@@ -27,7 +27,7 @@ namespace YooAsset.Editor
// 注意:原生文件资源包只能包含一个原生文件 // 注意:原生文件资源包只能包含一个原生文件
foreach (var bundleInfo in buildMapContext.Collection) foreach (var bundleInfo in buildMapContext.Collection)
{ {
if (bundleInfo.MainAssets.Count != 1) if (bundleInfo.AllPackAssets.Count != 1)
{ {
string message = BuildLogger.GetErrorMessage(ErrorCode.NotSupportMultipleRawAsset, $"The bundle does not support multiple raw asset : {bundleInfo.BundleName}"); string message = BuildLogger.GetErrorMessage(ErrorCode.NotSupportMultipleRawAsset, $"The bundle does not support multiple raw asset : {bundleInfo.BundleName}");
throw new Exception(message); throw new Exception(message);

View File

@@ -37,7 +37,6 @@ namespace YooAsset.Editor
buildParameters.BuildTarget = BuildTarget; buildParameters.BuildTarget = BuildTarget;
buildParameters.PackageName = PackageName; buildParameters.PackageName = PackageName;
buildParameters.PackageVersion = GetPackageVersion(); buildParameters.PackageVersion = GetPackageVersion();
buildParameters.LegacyDependency = false;
buildParameters.EnableSharePackRule = true; buildParameters.EnableSharePackRule = true;
buildParameters.VerifyBuildingResult = true; buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle; buildParameters.FileNameStyle = fileNameStyle;

View File

@@ -38,7 +38,6 @@ namespace YooAsset.Editor
buildParameters.BuildTarget = BuildTarget; buildParameters.BuildTarget = BuildTarget;
buildParameters.PackageName = PackageName; buildParameters.PackageName = PackageName;
buildParameters.PackageVersion = GetPackageVersion(); buildParameters.PackageVersion = GetPackageVersion();
buildParameters.LegacyDependency = false;
buildParameters.EnableSharePackRule = true; buildParameters.EnableSharePackRule = true;
buildParameters.VerifyBuildingResult = true; buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle; buildParameters.FileNameStyle = fileNameStyle;

View File

@@ -272,7 +272,7 @@ namespace YooAsset.Editor
packageData.ProviderInfos.Sort(); packageData.ProviderInfos.Sort();
foreach (var providerInfo in packageData.ProviderInfos) foreach (var providerInfo in packageData.ProviderInfos)
{ {
providerInfo.DependBundleInfos.Sort(); providerInfo.DependBundles.Sort();
} }
} }

View File

@@ -13,6 +13,7 @@ namespace YooAsset.Editor
{ {
private class ProviderTableData : DefaultTableData private class ProviderTableData : DefaultTableData
{ {
public DebugPackageData PackageData;
public DebugProviderInfo ProviderInfo; public DebugProviderInfo ProviderInfo;
} }
private class DependTableData : DefaultTableData private class DependTableData : DefaultTableData
@@ -205,7 +206,7 @@ namespace YooAsset.Editor
{ {
StyleColor textColor; StyleColor textColor;
var providerTableData = data as ProviderTableData; var providerTableData = data as ProviderTableData;
if(providerTableData.ProviderInfo.Status == EOperationStatus.Failed.ToString()) if (providerTableData.ProviderInfo.Status == EOperationStatus.Failed.ToString())
textColor = new StyleColor(Color.yellow); textColor = new StyleColor(Color.yellow);
else else
textColor = new StyleColor(Color.white); textColor = new StyleColor(Color.white);
@@ -309,6 +310,7 @@ namespace YooAsset.Editor
foreach (var providerInfo in packageData.ProviderInfos) foreach (var providerInfo in packageData.ProviderInfos)
{ {
var rowData = new ProviderTableData(); var rowData = new ProviderTableData();
rowData.PackageData = packageData;
rowData.ProviderInfo = providerInfo; rowData.ProviderInfo = providerInfo;
rowData.AddAssetPathCell("PackageName", packageData.PackageName); rowData.AddAssetPathCell("PackageName", packageData.PackageName);
rowData.AddStringValueCell("AssetPath", providerInfo.AssetPath); rowData.AddStringValueCell("AssetPath", providerInfo.AssetPath);
@@ -368,12 +370,14 @@ namespace YooAsset.Editor
private void OnProviderTableViewSelectionChanged(ITableData data) private void OnProviderTableViewSelectionChanged(ITableData data)
{ {
var providerTableData = data as ProviderTableData; var providerTableData = data as ProviderTableData;
DebugPackageData packageData = providerTableData.PackageData;
DebugProviderInfo providerInfo = providerTableData.ProviderInfo; DebugProviderInfo providerInfo = providerTableData.ProviderInfo;
// 填充依赖数据 // 填充依赖数据
var sourceDatas = new List<ITableData>(providerInfo.DependBundleInfos.Count); var sourceDatas = new List<ITableData>(providerInfo.DependBundles.Count);
foreach (var dependBundleInfo in providerInfo.DependBundleInfos) foreach (var bundleName in providerInfo.DependBundles)
{ {
var dependBundleInfo = packageData.GetBundleInfo(bundleName);
var rowData = new DependTableData(); var rowData = new DependTableData();
rowData.BundleInfo = dependBundleInfo; rowData.BundleInfo = dependBundleInfo;
rowData.AddStringValueCell("DependBundles", dependBundleInfo.BundleName); rowData.AddStringValueCell("DependBundles", dependBundleInfo.BundleName);

View File

@@ -13,19 +13,24 @@ namespace YooAsset.Editor
{ {
private class BundleTableData : DefaultTableData private class BundleTableData : DefaultTableData
{ {
public string PackageName; public DebugPackageData PackageData;
public DebugBundleInfo BundleInfo; public DebugBundleInfo BundleInfo;
} }
private class UsingTableData : DefaultTableData private class UsingTableData : DefaultTableData
{ {
public DebugProviderInfo ProviderInfo; public DebugProviderInfo ProviderInfo;
} }
private class ReferenceTableData : DefaultTableData
{
public DebugBundleInfo BundleInfo;
}
private VisualTreeAsset _visualAsset; private VisualTreeAsset _visualAsset;
private TemplateContainer _root; private TemplateContainer _root;
private TableView _bundleTableView; private TableView _bundleTableView;
private TableView _usingTableView; private TableView _usingTableView;
private TableView _referenceTableView;
private DebugReport _debugReport; private DebugReport _debugReport;
private List<ITableData> _sourceDatas; private List<ITableData> _sourceDatas;
@@ -44,20 +49,25 @@ namespace YooAsset.Editor
_root.style.flexGrow = 1f; _root.style.flexGrow = 1f;
// 资源包列表 // 资源包列表
_bundleTableView = _root.Q<TableView>("TopTableView"); _bundleTableView = _root.Q<TableView>("BundleTableView");
_bundleTableView.SelectionChangedEvent = OnBundleTableViewSelectionChanged; _bundleTableView.SelectionChangedEvent = OnBundleTableViewSelectionChanged;
CreateBundleTableViewColumns(); CreateBundleTableViewColumns();
// 使用列表 // 使用列表
_usingTableView = _root.Q<TableView>("BottomTableView"); _usingTableView = _root.Q<TableView>("UsingTableView");
CreateUsingTableViewColumns(); CreateUsingTableViewColumns();
// 引用列表
_referenceTableView = _root.Q<TableView>("ReferenceTableView");
CreateReferenceTableViewColumns();
#if UNITY_2020_3_OR_NEWER #if UNITY_2020_3_OR_NEWER
var topGroup = _root.Q<VisualElement>("TopGroup"); var topGroup = _root.Q<VisualElement>("TopGroup");
var bottomGroup = _root.Q<VisualElement>("BottomGroup"); var bottomGroup = _root.Q<VisualElement>("BottomGroup");
topGroup.style.minHeight = 100; topGroup.style.minHeight = 100;
bottomGroup.style.minHeight = 100f; bottomGroup.style.minHeight = 100f;
PanelSplitView.SplitVerticalPanel(_root, topGroup, bottomGroup); PanelSplitView.SplitVerticalPanel(_root, topGroup, bottomGroup);
PanelSplitView.SplitVerticalPanel(bottomGroup, _usingTableView, _referenceTableView);
#endif #endif
} }
private void CreateBundleTableViewColumns() private void CreateBundleTableViewColumns()
@@ -269,6 +279,79 @@ namespace YooAsset.Editor
_usingTableView.AddColumn(column); _usingTableView.AddColumn(column);
} }
} }
private void CreateReferenceTableViewColumns()
{
// BundleName
{
var columnStyle = new ColumnStyle(600, 500, 1000);
columnStyle.Stretchable = true;
columnStyle.Searchable = true;
columnStyle.Sortable = true;
var column = new TableColumn("ReferenceBundle", "Reference Bundle", columnStyle);
column.MakeCell = () =>
{
var label = new Label();
label.style.unityTextAlign = TextAnchor.MiddleLeft;
return label;
};
column.BindCell = (VisualElement element, ITableData data, ITableCell cell) =>
{
var infoLabel = element as Label;
infoLabel.text = (string)cell.GetDisplayObject();
};
_referenceTableView.AddColumn(column);
}
// RefCount
{
var columnStyle = new ColumnStyle(100);
columnStyle.Stretchable = false;
columnStyle.Searchable = false;
columnStyle.Sortable = true;
var column = new TableColumn("RefCount", "Ref Count", columnStyle);
column.MakeCell = () =>
{
var label = new Label();
label.style.unityTextAlign = TextAnchor.MiddleLeft;
return label;
};
column.BindCell = (VisualElement element, ITableData data, ITableCell cell) =>
{
var infoLabel = element as Label;
infoLabel.text = (string)cell.GetDisplayObject();
};
_referenceTableView.AddColumn(column);
}
// Status
{
var columnStyle = new ColumnStyle(100);
columnStyle.Stretchable = false;
columnStyle.Searchable = false;
columnStyle.Sortable = true;
var column = new TableColumn("Status", "Status", columnStyle);
column.MakeCell = () =>
{
var label = new Label();
label.style.unityTextAlign = TextAnchor.MiddleLeft;
return label;
};
column.BindCell = (VisualElement element, ITableData data, ITableCell cell) =>
{
StyleColor textColor;
var feferenceTableData = data as ReferenceTableData;
if (feferenceTableData.BundleInfo.Status == EOperationStatus.Failed)
textColor = new StyleColor(Color.yellow);
else
textColor = new StyleColor(Color.white);
var infoLabel = element as Label;
infoLabel.text = (string)cell.GetDisplayObject();
infoLabel.style.color = textColor;
};
_referenceTableView.AddColumn(column);
}
}
/// <summary> /// <summary>
/// 填充页面数据 /// 填充页面数据
@@ -280,30 +363,22 @@ namespace YooAsset.Editor
// 清空旧数据 // 清空旧数据
_bundleTableView.ClearAll(false, true); _bundleTableView.ClearAll(false, true);
_usingTableView.ClearAll(false, true); _usingTableView.ClearAll(false, true);
_referenceTableView.ClearAll(false, true);
// 填充数据源 // 填充数据源
_sourceDatas = new List<ITableData>(1000); _sourceDatas = new List<ITableData>(1000);
foreach (var packageData in debugReport.PackageDatas) foreach (var packageData in debugReport.PackageDatas)
{ {
var tempDic = new HashSet<string>(); foreach (var bundleInfo in packageData.BundleInfos)
foreach (var providerInfo in packageData.ProviderInfos)
{ {
foreach (var bundleInfo in providerInfo.DependBundleInfos) var rowData = new BundleTableData();
{ rowData.PackageData = packageData;
if (tempDic.Contains(bundleInfo.BundleName) == false) rowData.BundleInfo = bundleInfo;
{ rowData.AddAssetPathCell("PackageName", packageData.PackageName);
tempDic.Add(bundleInfo.BundleName); rowData.AddStringValueCell("BundleName", bundleInfo.BundleName);
rowData.AddLongValueCell("RefCount", bundleInfo.RefCount);
var rowData = new BundleTableData(); rowData.AddStringValueCell("Status", bundleInfo.Status.ToString());
rowData.PackageName = packageData.PackageName; _sourceDatas.Add(rowData);
rowData.BundleInfo = bundleInfo;
rowData.AddAssetPathCell("PackageName", packageData.PackageName);
rowData.AddStringValueCell("BundleName", bundleInfo.BundleName);
rowData.AddLongValueCell("RefCount", bundleInfo.RefCount);
rowData.AddStringValueCell("Status", bundleInfo.Status.ToString());
_sourceDatas.Add(rowData);
}
}
} }
} }
_bundleTableView.itemsSource = _sourceDatas; _bundleTableView.itemsSource = _sourceDatas;
@@ -322,6 +397,8 @@ namespace YooAsset.Editor
_bundleTableView.RebuildView(); _bundleTableView.RebuildView();
_usingTableView.ClearAll(false, true); _usingTableView.ClearAll(false, true);
_usingTableView.RebuildView(); _usingTableView.RebuildView();
_referenceTableView.ClearAll(false, true);
_referenceTableView.RebuildView();
} }
/// <summary> /// <summary>
@@ -355,19 +432,17 @@ namespace YooAsset.Editor
private void OnBundleTableViewSelectionChanged(ITableData data) private void OnBundleTableViewSelectionChanged(ITableData data)
{ {
var bundleTableData = data as BundleTableData; var bundleTableData = data as BundleTableData;
var packageData = bundleTableData.PackageData;
var selectBundleInfo = bundleTableData.BundleInfo;
// 填充依赖数据 // 填充UsingTableView
var sourceDatas = new List<ITableData>(1000);
foreach (var packageData in _debugReport.PackageDatas)
{ {
if (packageData.PackageName != bundleTableData.PackageName) var sourceDatas = new List<ITableData>(1000);
continue;
foreach (var providerInfo in packageData.ProviderInfos) foreach (var providerInfo in packageData.ProviderInfos)
{ {
foreach (var bundleInfo in providerInfo.DependBundleInfos) foreach (var dependBundleName in providerInfo.DependBundles)
{ {
if (bundleInfo.BundleName == bundleTableData.BundleInfo.BundleName) if (dependBundleName == selectBundleInfo.BundleName)
{ {
var rowData = new UsingTableData(); var rowData = new UsingTableData();
rowData.ProviderInfo = providerInfo; rowData.ProviderInfo = providerInfo;
@@ -381,9 +456,26 @@ namespace YooAsset.Editor
} }
} }
} }
_usingTableView.itemsSource = sourceDatas;
_usingTableView.RebuildView();
}
// 填充ReferenceTableView
{
var sourceDatas = new List<ITableData>(1000);
foreach (string referenceBundleName in selectBundleInfo.ReferenceBundles)
{
var bundleInfo = packageData.GetBundleInfo(referenceBundleName);
var rowData = new ReferenceTableData();
rowData.BundleInfo = bundleInfo;
rowData.AddStringValueCell("BundleName", bundleInfo.BundleName);
rowData.AddLongValueCell("RefCount", bundleInfo.RefCount);
rowData.AddStringValueCell("Status", bundleInfo.Status.ToString());
sourceDatas.Add(rowData);
}
_referenceTableView.itemsSource = sourceDatas;
_referenceTableView.RebuildView();
} }
_usingTableView.itemsSource = sourceDatas;
_usingTableView.RebuildView();
} }
} }
} }

View File

@@ -1,8 +1,9 @@
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="False"> <ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="False">
<ui:VisualElement name="TopGroup" style="flex-grow: 1; border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-top-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); margin-left: 0; margin-right: 0; margin-top: 2px; margin-bottom: 1px; display: flex;"> <ui:VisualElement name="TopGroup" style="flex-grow: 1; border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-top-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); margin-left: 0; margin-right: 0; margin-top: 2px; margin-bottom: 1px; display: flex;">
<YooAsset.Editor.TableView name="TopTableView" /> <YooAsset.Editor.TableView name="BundleTableView" />
</ui:VisualElement> </ui:VisualElement>
<ui:VisualElement name="BottomGroup" style="height: 200px; border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-top-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); margin-left: 0; margin-right: 0; margin-top: 1px; margin-bottom: 1px; display: flex;"> <ui:VisualElement name="BottomGroup" style="height: 400px; border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-top-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); margin-left: 0; margin-right: 0; margin-top: 1px; margin-bottom: 1px; display: flex;">
<YooAsset.Editor.TableView name="BottomTableView" /> <YooAsset.Editor.TableView name="UsingTableView" />
<YooAsset.Editor.TableView name="ReferenceTableView" />
</ui:VisualElement> </ui:VisualElement>
</ui:UXML> </ui:UXML>

View File

@@ -39,8 +39,14 @@ namespace YooAsset.Editor
public long MainBundleSize; public long MainBundleSize;
/// <summary> /// <summary>
/// 依赖的资源路径列表 /// 依赖的资源集合
/// </summary> /// </summary>
public List<string> DependAssets = new List<string>(); public List<AssetInfo> DependAssets = new List<AssetInfo>();
/// <summary>
/// 依赖的资源包集合
/// 说明:框架层收集查询结果
/// </summary>
public List<string> DependBundles = new List<string>();
} }
} }

View File

@@ -44,14 +44,21 @@ namespace YooAsset.Editor
public string[] Tags; public string[] Tags;
/// <summary> /// <summary>
/// 资源包的依赖集合 /// 依赖的资源包集合
/// 说明:引擎层构建查询结果
/// </summary> /// </summary>
public List<string> DependBundles; public List<string> DependBundles = new List<string>();
/// <summary> /// <summary>
/// 该资源包内包含的所有资源 /// 引用该资源包的资源包集合
/// 说明:谁依赖该资源包
/// </summary> /// </summary>
public List<string> AllBuiltinAssets = new List<string>(); public List<string> ReferenceBundles = new List<string>();
/// <summary>
/// 资源包内部所有资产
/// </summary>
public List<AssetInfo> BundleContents = new List<AssetInfo>();
/// <summary> /// <summary>
/// 获取资源分类标签的字符串 /// 获取资源分类标签的字符串

View File

@@ -67,15 +67,22 @@ namespace YooAsset.Editor
public string IgnoreRuleName; public string IgnoreRuleName;
// 构建参数 // 构建参数
public bool LegacyDependency;
public bool ClearBuildCacheFiles; public bool ClearBuildCacheFiles;
public bool UseAssetDependencyDB; public bool UseAssetDependencyDB;
public bool EnableSharePackRule; public bool EnableSharePackRule;
public bool SingleReferencedPackAlone;
public string EncryptionClassName; public string EncryptionClassName;
public EFileNameStyle FileNameStyle; public EFileNameStyle FileNameStyle;
// 引擎参数
public ECompressOption CompressOption; public ECompressOption CompressOption;
public bool DisableWriteTypeTree; public bool DisableWriteTypeTree;
public bool IgnoreTypeTreeChanges; public bool IgnoreTypeTreeChanges;
public bool WriteLinkXML = true;
public string CacheServerHost;
public int CacheServerPort;
public string BuiltinShadersBundleName;
public string MonoScriptsBundleName;
// 构建结果 // 构建结果
public int AssetFileTotalCount; public int AssetFileTotalCount;

View File

@@ -72,6 +72,7 @@ namespace YooAsset.Editor
columnStyle.Stretchable = true; columnStyle.Stretchable = true;
columnStyle.Searchable = true; columnStyle.Searchable = true;
columnStyle.Sortable = true; columnStyle.Sortable = true;
columnStyle.Counter = true;
var column = new TableColumn("AssetPath", "Asset Path", columnStyle); var column = new TableColumn("AssetPath", "Asset Path", columnStyle);
column.MakeCell = () => column.MakeCell = () =>
{ {
@@ -116,6 +117,7 @@ namespace YooAsset.Editor
columnStyle.Stretchable = true; columnStyle.Stretchable = true;
columnStyle.Searchable = true; columnStyle.Searchable = true;
columnStyle.Sortable = true; columnStyle.Sortable = true;
columnStyle.Counter = true;
var column = new TableColumn("DependBundles", "Depend Bundles", columnStyle); var column = new TableColumn("DependBundles", "Depend Bundles", columnStyle);
column.MakeCell = () => column.MakeCell = () =>
{ {

View File

@@ -72,6 +72,7 @@ namespace YooAsset.Editor
columnStyle.Stretchable = true; columnStyle.Stretchable = true;
columnStyle.Searchable = true; columnStyle.Searchable = true;
columnStyle.Sortable = true; columnStyle.Sortable = true;
columnStyle.Counter = true;
var column = new TableColumn("BundleName", "Bundle Name", columnStyle); var column = new TableColumn("BundleName", "Bundle Name", columnStyle);
column.MakeCell = () => column.MakeCell = () =>
{ {
@@ -181,6 +182,7 @@ namespace YooAsset.Editor
columnStyle.Stretchable = true; columnStyle.Stretchable = true;
columnStyle.Searchable = true; columnStyle.Searchable = true;
columnStyle.Sortable = true; columnStyle.Sortable = true;
columnStyle.Counter = true;
var column = new TableColumn("IncludeAssets", "Include Assets", columnStyle); var column = new TableColumn("IncludeAssets", "Include Assets", columnStyle);
column.MakeCell = () => column.MakeCell = () =>
{ {
@@ -320,15 +322,15 @@ namespace YooAsset.Editor
sourceDatas.Add(rowData); sourceDatas.Add(rowData);
} }
} }
foreach (string assetPath in bundleInfo.AllBuiltinAssets) foreach (var assetInfo in bundleInfo.BundleContents)
{ {
if (mainAssetDic.Contains(assetPath) == false) if (mainAssetDic.Contains(assetInfo.AssetPath) == false)
{ {
var rowData = new IncludeTableData(); var rowData = new IncludeTableData();
rowData.AssetInfo = null; rowData.AssetInfo = null;
rowData.AddAssetPathCell("IncludeAssets", assetPath); rowData.AddAssetPathCell("IncludeAssets", assetInfo.AssetPath);
rowData.AddStringValueCell("AssetSource", "BuiltinAsset"); rowData.AddStringValueCell("AssetSource", "BuiltinAsset");
rowData.AddStringValueCell("AssetGUID", "--"); rowData.AddStringValueCell("AssetGUID", assetInfo.AssetGUID);
sourceDatas.Add(rowData); sourceDatas.Add(rowData);
} }
} }

View File

@@ -11,24 +11,9 @@ namespace YooAsset.Editor
{ {
internal class ReporterSummaryViewer internal class ReporterSummaryViewer
{ {
private class ItemWrapper
{
public string Title { private set; get; }
public string Value { private set; get; }
public ItemWrapper(string title, string value)
{
Title = title;
Value = value;
}
}
private VisualTreeAsset _visualAsset; private VisualTreeAsset _visualAsset;
private TemplateContainer _root; private TemplateContainer _root;
private ScrollView _scrollView;
private ListView _listView;
private readonly List<ItemWrapper> _items = new List<ItemWrapper>();
/// <summary> /// <summary>
/// 初始化页面 /// 初始化页面
@@ -44,9 +29,7 @@ namespace YooAsset.Editor
_root.style.flexGrow = 1f; _root.style.flexGrow = 1f;
// 概述列表 // 概述列表
_listView = _root.Q<ListView>("ListView"); _scrollView = _root.Q<ScrollView>("ScrollView");
_listView.makeItem = MakeListViewItem;
_listView.bindItem = BindListViewItem;
} }
/// <summary> /// <summary>
@@ -54,53 +37,49 @@ namespace YooAsset.Editor
/// </summary> /// </summary>
public void FillViewData(BuildReport buildReport) public void FillViewData(BuildReport buildReport)
{ {
_items.Clear(); _scrollView.Clear();
_items.Add(new ItemWrapper("YooAsset Version", buildReport.Summary.YooVersion)); BindListViewHeader("Build Infos");
_items.Add(new ItemWrapper("UnityEngine Version", buildReport.Summary.UnityVersion)); BindListViewItem("YooAsset Version", buildReport.Summary.YooVersion);
_items.Add(new ItemWrapper("Build Date", buildReport.Summary.BuildDate)); BindListViewItem("UnityEngine Version", buildReport.Summary.UnityVersion);
_items.Add(new ItemWrapper("Build Seconds", ConvertTime(buildReport.Summary.BuildSeconds))); BindListViewItem("Build Date", buildReport.Summary.BuildDate);
_items.Add(new ItemWrapper("Build Target", $"{buildReport.Summary.BuildTarget}")); BindListViewItem("Build Seconds", ConvertTime(buildReport.Summary.BuildSeconds));
_items.Add(new ItemWrapper("Build Pipeline", $"{buildReport.Summary.BuildPipeline}")); BindListViewItem("Build Target", $"{buildReport.Summary.BuildTarget}");
_items.Add(new ItemWrapper("Build Bundle Type", buildReport.Summary.BuildBundleType.ToString())); BindListViewItem("Build Pipeline", $"{buildReport.Summary.BuildPipeline}");
_items.Add(new ItemWrapper("Package Name", buildReport.Summary.BuildPackageName)); BindListViewItem("Build Bundle Type", buildReport.Summary.BuildBundleType.ToString());
_items.Add(new ItemWrapper("Package Version", buildReport.Summary.BuildPackageVersion)); BindListViewItem("Package Name", buildReport.Summary.BuildPackageName);
_items.Add(new ItemWrapper("Package Note", buildReport.Summary.BuildPackageNote)); BindListViewItem("Package Version", buildReport.Summary.BuildPackageVersion);
BindListViewItem("Package Note", buildReport.Summary.BuildPackageNote);
BindListViewItem(string.Empty, string.Empty);
_items.Add(new ItemWrapper(string.Empty, string.Empty)); BindListViewHeader("Collect Settings");
_items.Add(new ItemWrapper("Collect Settings", string.Empty)); BindListViewItem("Unique Bundle Name", $"{buildReport.Summary.UniqueBundleName}");
_items.Add(new ItemWrapper("Unique Bundle Name", $"{buildReport.Summary.UniqueBundleName}")); BindListViewItem("Enable Addressable", $"{buildReport.Summary.EnableAddressable}");
_items.Add(new ItemWrapper("Enable Addressable", $"{buildReport.Summary.EnableAddressable}")); BindListViewItem("Location To Lower", $"{buildReport.Summary.LocationToLower}");
_items.Add(new ItemWrapper("Location To Lower", $"{buildReport.Summary.LocationToLower}")); BindListViewItem("Include Asset GUID", $"{buildReport.Summary.IncludeAssetGUID}");
_items.Add(new ItemWrapper("Include Asset GUID", $"{buildReport.Summary.IncludeAssetGUID}")); BindListViewItem("Auto Collect Shaders", $"{buildReport.Summary.AutoCollectShaders}");
_items.Add(new ItemWrapper("Auto Collect Shaders", $"{buildReport.Summary.AutoCollectShaders}")); BindListViewItem("Ignore Rule Name", $"{buildReport.Summary.IgnoreRuleName}");
_items.Add(new ItemWrapper("Ignore Rule Name", $"{buildReport.Summary.IgnoreRuleName}")); BindListViewItem(string.Empty, string.Empty);
_items.Add(new ItemWrapper(string.Empty, string.Empty));
_items.Add(new ItemWrapper("Build Params", string.Empty));
_items.Add(new ItemWrapper("Legacy Dependency Mode", $"{buildReport.Summary.LegacyDependency}"));
_items.Add(new ItemWrapper("Clear Build Cache Files", $"{buildReport.Summary.ClearBuildCacheFiles}"));
_items.Add(new ItemWrapper("Use Asset Dependency DB", $"{buildReport.Summary.UseAssetDependencyDB}"));
_items.Add(new ItemWrapper("Enable Share Pack Rule", $"{buildReport.Summary.EnableSharePackRule}"));
_items.Add(new ItemWrapper("Encryption Class Name", buildReport.Summary.EncryptionClassName));
_items.Add(new ItemWrapper("FileNameStyle", $"{buildReport.Summary.FileNameStyle}"));
_items.Add(new ItemWrapper("CompressOption", $"{buildReport.Summary.CompressOption}"));
_items.Add(new ItemWrapper("DisableWriteTypeTree", $"{buildReport.Summary.DisableWriteTypeTree}"));
_items.Add(new ItemWrapper("IgnoreTypeTreeChanges", $"{buildReport.Summary.IgnoreTypeTreeChanges}"));
_items.Add(new ItemWrapper(string.Empty, string.Empty)); BindListViewHeader("Build Params");
_items.Add(new ItemWrapper("Build Results", string.Empty)); BindListViewItem("Clear Build Cache Files", $"{buildReport.Summary.ClearBuildCacheFiles}");
_items.Add(new ItemWrapper("Asset File Total Count", $"{buildReport.Summary.AssetFileTotalCount}")); BindListViewItem("Use Asset Dependency DB", $"{buildReport.Summary.UseAssetDependencyDB}");
_items.Add(new ItemWrapper("Main Asset Total Count", $"{buildReport.Summary.MainAssetTotalCount}")); BindListViewItem("Enable Share Pack Rule", $"{buildReport.Summary.EnableSharePackRule}");
_items.Add(new ItemWrapper("All Bundle Total Count", $"{buildReport.Summary.AllBundleTotalCount}")); BindListViewItem("Single Referenced Pack Alone", $"{buildReport.Summary.SingleReferencedPackAlone}");
_items.Add(new ItemWrapper("All Bundle Total Size", ConvertSize(buildReport.Summary.AllBundleTotalSize))); BindListViewItem("Encryption Class Name", buildReport.Summary.EncryptionClassName);
_items.Add(new ItemWrapper("Encrypted Bundle Total Count", $"{buildReport.Summary.EncryptedBundleTotalCount}")); BindListViewItem("FileNameStyle", $"{buildReport.Summary.FileNameStyle}");
_items.Add(new ItemWrapper("Encrypted Bundle Total Size", ConvertSize(buildReport.Summary.EncryptedBundleTotalSize))); BindListViewItem("CompressOption", $"{buildReport.Summary.CompressOption}");
BindListViewItem("DisableWriteTypeTree", $"{buildReport.Summary.DisableWriteTypeTree}");
BindListViewItem("IgnoreTypeTreeChanges", $"{buildReport.Summary.IgnoreTypeTreeChanges}");
BindListViewItem(string.Empty, string.Empty);
_listView.Clear(); BindListViewHeader("Build Results");
_listView.ClearSelection(); BindListViewItem("Asset File Total Count", $"{buildReport.Summary.AssetFileTotalCount}");
_listView.itemsSource = _items; BindListViewItem("Main Asset Total Count", $"{buildReport.Summary.MainAssetTotalCount}");
_listView.Rebuild(); BindListViewItem("All Bundle Total Count", $"{buildReport.Summary.AllBundleTotalCount}");
BindListViewItem("All Bundle Total Size", ConvertSize(buildReport.Summary.AllBundleTotalSize));
BindListViewItem("Encrypted Bundle Total Count", $"{buildReport.Summary.EncryptedBundleTotalCount}");
BindListViewItem("Encrypted Bundle Total Size", ConvertSize(buildReport.Summary.EncryptedBundleTotalSize));
} }
/// <summary> /// <summary>
@@ -120,45 +99,60 @@ namespace YooAsset.Editor
} }
// 列表相关 // 列表相关
private void BindListViewHeader(string titile)
{
Toolbar toolbar = new Toolbar();
_scrollView.Add(toolbar);
ToolbarButton titleButton = new ToolbarButton();
titleButton.text = titile;
titleButton.style.unityTextAlign = TextAnchor.MiddleCenter;
titleButton.style.width = 200;
toolbar.Add(titleButton);
ToolbarButton valueButton = new ToolbarButton();
valueButton.style.unityTextAlign = TextAnchor.MiddleCenter;
valueButton.style.width = 150;
valueButton.style.flexShrink = 1;
valueButton.style.flexGrow = 1;
valueButton.SetEnabled(false);
toolbar.Add(valueButton);
}
private void BindListViewItem(string name, string value)
{
VisualElement element = MakeListViewItem();
_scrollView.Add(element);
// Title
var titleLabel = element.Q<Label>("TitleLabel");
titleLabel.text = name;
// Value
var valueLabel = element.Q<Label>("ValueLabel");
valueLabel.text = value;
}
private VisualElement MakeListViewItem() private VisualElement MakeListViewItem()
{ {
VisualElement element = new VisualElement(); VisualElement element = new VisualElement();
element.style.flexDirection = FlexDirection.Row; element.style.flexDirection = FlexDirection.Row;
{ var titleLabel = new Label();
var label = new Label(); titleLabel.name = "TitleLabel";
label.name = "Label1"; titleLabel.style.unityTextAlign = TextAnchor.MiddleLeft;
label.style.unityTextAlign = TextAnchor.MiddleLeft; titleLabel.style.marginLeft = 3f;
label.style.marginLeft = 3f; titleLabel.style.width = 200;
//label.style.flexGrow = 1f; element.Add(titleLabel);
label.style.width = 200;
element.Add(label);
}
{ var valueLabel = new Label();
var label = new Label(); valueLabel.name = "ValueLabel";
label.name = "Label2"; valueLabel.style.unityTextAlign = TextAnchor.MiddleLeft;
label.style.unityTextAlign = TextAnchor.MiddleLeft; valueLabel.style.marginLeft = 3f;
label.style.marginLeft = 3f; valueLabel.style.flexGrow = 1f;
label.style.flexGrow = 1f; valueLabel.style.width = 150;
label.style.width = 150; element.Add(valueLabel);
element.Add(label);
}
return element; return element;
} }
private void BindListViewItem(VisualElement element, int index)
{
var itemWrapper = _items[index];
// Title
var label1 = element.Q<Label>("Label1");
label1.text = itemWrapper.Title;
// Value
var label2 = element.Q<Label>("Label2");
label2.text = itemWrapper.Value;
}
private string ConvertTime(int time) private string ConvertTime(int time)
{ {

View File

@@ -1,9 +1,5 @@
<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="True"> <ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements" editor-extension-mode="True">
<ui:VisualElement name="TopGroup" style="flex-grow: 1; border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-top-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); margin-left: 0; margin-right: 0; margin-top: 2px; margin-bottom: 1px; display: flex;"> <ui:VisualElement name="TopGroup" style="flex-grow: 1; border-left-width: 1px; border-right-width: 1px; border-top-width: 1px; border-bottom-width: 1px; border-left-color: rgb(0, 0, 0); border-right-color: rgb(0, 0, 0); border-top-color: rgb(0, 0, 0); border-bottom-color: rgb(0, 0, 0); margin-left: 0; margin-right: 0; margin-top: 2px; margin-bottom: 1px; display: flex;">
<uie:Toolbar name="TopBar" style="height: 25px; margin-left: 1px; margin-right: 1px;"> <ui:ScrollView name="ScrollView" horizontal-scroller-visibility="Hidden" />
<uie:ToolbarButton text="Info" display-tooltip-when-elided="true" name="TopBar1" style="width: 200px; -unity-text-align: middle-left; flex-grow: 0;" />
<uie:ToolbarButton text="Param" display-tooltip-when-elided="true" name="TopBar2" style="width: 150px; -unity-text-align: middle-left; flex-grow: 1;" />
</uie:Toolbar>
<ui:ListView focusable="true" name="ListView" item-height="18" virtualization-method="DynamicHeight" style="flex-grow: 1;" />
</ui:VisualElement> </ui:VisualElement>
</ui:UXML> </ui:UXML>

View File

@@ -5,7 +5,7 @@ using System.Collections.Generic;
namespace YooAsset.Editor namespace YooAsset.Editor
{ {
[Serializable] [Serializable]
public class AssetInfo public class AssetInfo : IComparable<AssetInfo>
{ {
private string _fileExtension = null; private string _fileExtension = null;
@@ -37,6 +37,7 @@ namespace YooAsset.Editor
} }
} }
public AssetInfo(string assetPath) public AssetInfo(string assetPath)
{ {
AssetPath = assetPath; AssetPath = assetPath;
@@ -60,5 +61,10 @@ namespace YooAsset.Editor
else else
return false; return false;
} }
public int CompareTo(AssetInfo other)
{
return this.AssetPath.CompareTo(other.AssetPath);
}
} }
} }

View File

@@ -129,6 +129,21 @@ namespace YooAsset.Editor
} }
#endregion #endregion
#region PackageManager
public static string GetPackageManagerYooVersion()
{
#if UNITY_2019_4_OR_NEWER
UnityEditor.PackageManager.PackageInfo packageInfo = UnityEditor.PackageManager.PackageInfo.FindForAssembly(typeof(YooAssets).Assembly);
if (packageInfo != null)
return packageInfo.version;
else
return string.Empty;
#else
return string.Empty;
#endif
}
#endregion
#region EditorUtility #region EditorUtility
/// <summary> /// <summary>
/// 搜集资源 /// 搜集资源
@@ -559,7 +574,7 @@ namespace YooAsset.Editor
{ {
return path.Replace('\\', '/').Replace("\\", "/"); //替换为Linux路径格式 return path.Replace('\\', '/').Replace("\\", "/"); //替换为Linux路径格式
} }
/// <summary> /// <summary>
/// 移除路径里的后缀名 /// 移除路径里的后缀名
/// </summary> /// </summary>

View File

@@ -41,6 +41,11 @@ namespace YooAsset.Editor
/// </summary> /// </summary>
public bool Sortable = false; public bool Sortable = false;
/// <summary>
/// 统计数量
/// </summary>
public bool Counter = false;
public ColumnStyle(Length width) public ColumnStyle(Length width)
{ {
if (width.value > MaxValue) if (width.value > MaxValue)

View File

@@ -27,7 +27,7 @@ namespace YooAsset.Editor
private List<ITableData> _sortingDatas; private List<ITableData> _sortingDatas;
// 排序相关 // 排序相关
private string _sortingHeaderElement = string.Empty; private string _sortingHeader;
private bool _descendingSort = true; private bool _descendingSort = true;
/// <summary> /// <summary>
@@ -89,7 +89,7 @@ namespace YooAsset.Editor
// 定义标题栏 // 定义标题栏
_toolbar = new Toolbar(); _toolbar = new Toolbar();
// 定义列表视图 // 定义列表视图
_listView = new ListView(); _listView = new ListView();
_listView.style.flexShrink = 1f; _listView.style.flexShrink = 1f;
@@ -191,6 +191,38 @@ namespace YooAsset.Editor
_listView.ClearSelection(); _listView.ClearSelection();
_listView.itemsSource = itemsSource.ToList(); _listView.itemsSource = itemsSource.ToList();
_listView.Rebuild(); _listView.Rebuild();
// 刷新标题栏
RefreshToobar();
}
private void RefreshToobar()
{
// 设置为原始标题
foreach (var column in _columns)
{
var toobarButton = _toolbar.Q<ToolbarButton>(column.ElementName);
toobarButton.text = column.HeaderTitle;
}
// 设置元素数量
foreach (var column in _columns)
{
if (column.ColumnStyle.Counter)
{
var toobarButton = GetHeaderElement(column.ElementName) as ToolbarButton;
toobarButton.text = $"{toobarButton.text} ({itemsSource.Count()})";
}
}
// 设置升降符号
if (string.IsNullOrEmpty(_sortingHeader) == false)
{
var _toobarButton = _toolbar.Q<ToolbarButton>(_sortingHeader);
if (_descendingSort)
_toobarButton.text = $"{_toobarButton.text} ↓";
else
_toobarButton.text = $"{_toobarButton.text} ↑";
}
} }
/// <summary> /// <summary>
@@ -237,9 +269,9 @@ namespace YooAsset.Editor
if (clickedColumn.ColumnStyle.Sortable == false) if (clickedColumn.ColumnStyle.Sortable == false)
return; return;
if (_sortingHeaderElement != clickedColumn.ElementName) if (_sortingHeader != clickedColumn.ElementName)
{ {
_sortingHeaderElement = clickedColumn.ElementName; _sortingHeader = clickedColumn.ElementName;
_descendingSort = false; _descendingSort = false;
} }
else else
@@ -247,17 +279,6 @@ namespace YooAsset.Editor
_descendingSort = !_descendingSort; _descendingSort = !_descendingSort;
} }
// 升降符号
foreach (var column in _columns)
{
var button = _toolbar.Q<ToolbarButton>(column.ElementName);
button.text = column.HeaderTitle;
}
if (_descendingSort)
toolbarBtn.text = $"{clickedColumn.HeaderTitle} ↓";
else
toolbarBtn.text = $"{clickedColumn.HeaderTitle} ↑";
// 升降排序 // 升降排序
if (_descendingSort) if (_descendingSort)
_sortingDatas = _itemsSource.OrderByDescending(tableData => tableData.Cells[clickedColumn.ColumnIndex]).ToList(); _sortingDatas = _itemsSource.OrderByDescending(tableData => tableData.Cells[clickedColumn.ColumnIndex]).ToList();

View File

@@ -22,6 +22,11 @@ namespace YooAsset
/// </summary> /// </summary>
public EOperationStatus Status; public EOperationStatus Status;
/// <summary>
/// 谁引用了该资源包
/// </summary>
public List<string> ReferenceBundles;
public int CompareTo(DebugBundleInfo other) public int CompareTo(DebugBundleInfo other)
{ {
return Compare(this, other); return Compare(this, other);

View File

@@ -17,5 +17,44 @@ namespace YooAsset
/// 调试数据列表 /// 调试数据列表
/// </summary> /// </summary>
public List<DebugProviderInfo> ProviderInfos = new List<DebugProviderInfo>(1000); public List<DebugProviderInfo> ProviderInfos = new List<DebugProviderInfo>(1000);
/// <summary>
/// 调试数据列表
/// </summary>
public List<DebugBundleInfo> BundleInfos = new List<DebugBundleInfo>(1000);
[NonSerialized]
public Dictionary<string, DebugBundleInfo> BundleInfoDic = new Dictionary<string, DebugBundleInfo>();
private bool _isParse = false;
/// <summary>
/// 获取调试资源包信息类
/// </summary>
public DebugBundleInfo GetBundleInfo(string bundleName)
{
// 解析数据
if (_isParse == false)
{
_isParse = true;
foreach (var bundleInfo in BundleInfos)
{
if (BundleInfoDic.ContainsKey(bundleInfo.BundleName) == false)
{
BundleInfoDic.Add(bundleInfo.BundleName, bundleInfo);
}
}
}
if (BundleInfoDic.TryGetValue(bundleName, out DebugBundleInfo value))
{
return value;
}
else
{
UnityEngine.Debug.LogError($"Can not found {nameof(DebugBundleInfo)} : {bundleName}");
return null;
}
}
} }
} }

View File

@@ -45,7 +45,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 依赖的资源包列表 /// 依赖的资源包列表
/// </summary> /// </summary>
public List<DebugBundleInfo> DependBundleInfos; public List<string> DependBundles;
public int CompareTo(DebugProviderInfo other) public int CompareTo(DebugProviderInfo other)
{ {

View File

@@ -22,7 +22,6 @@ namespace YooAsset
/// </summary> /// </summary>
public List<DebugPackageData> PackageDatas = new List<DebugPackageData>(10); public List<DebugPackageData> PackageDatas = new List<DebugPackageData>(10);
/// <summary> /// <summary>
/// 序列化 /// 序列化
/// </summary> /// </summary>

View File

@@ -16,7 +16,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 快速启动模式 /// 快速启动模式
/// </summary> /// </summary>
public static bool QuickStartMode = false; public static bool QuickStartMode = true;
/// <summary> /// <summary>
/// 异步操作的最小时间片段 /// 异步操作的最小时间片段

View File

@@ -156,10 +156,10 @@ namespace YooAsset
if (RefCount > 0) if (RefCount > 0)
return false; return false;
#region YOOASSET_LEGACY_DEPENDENCY // YOOASSET_LEGACY_DEPENDENCY
// 检查引用链上的资源包是否已经全部销毁 // 检查引用链上的资源包是否已经全部销毁
// 注意:互相引用的资源包无法卸载! // 注意:互相引用的资源包无法卸载!
if (LoadBundleInfo.Bundle.ReferenceBundleIDs.Length > 0) if (LoadBundleInfo.Bundle.ReferenceBundleIDs.Count > 0)
{ {
foreach (var bundleID in LoadBundleInfo.Bundle.ReferenceBundleIDs) foreach (var bundleID in LoadBundleInfo.Bundle.ReferenceBundleIDs)
{ {
@@ -167,7 +167,6 @@ namespace YooAsset
return false; return false;
} }
} }
#endregion
return true; return true;
} }

View File

@@ -14,11 +14,13 @@ namespace YooAsset
} }
private readonly ResourceManager _resManager; private readonly ResourceManager _resManager;
private readonly int _loopCount;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
internal UnloadUnusedAssetsOperation(ResourceManager resourceManager) internal UnloadUnusedAssetsOperation(ResourceManager resourceManager, int loopCount)
{ {
_resManager = resourceManager; _resManager = resourceManager;
_loopCount = loopCount;
} }
internal override void InternalOnStart() internal override void InternalOnStart()
{ {
@@ -31,29 +33,9 @@ namespace YooAsset
if (_steps == ESteps.UnloadUnused) if (_steps == ESteps.UnloadUnused)
{ {
var removeList = new List<LoadBundleFileOperation>(_resManager.LoaderDic.Count); for (int i = 0; i < _loopCount; i++)
// 注意:优先销毁资源提供者
foreach (var loader in _resManager.LoaderDic.Values)
{ {
loader.TryDestroyProviders(); LoopUnloadUnused();
}
// 获取销毁列表
foreach (var loader in _resManager.LoaderDic.Values)
{
if (loader.CanDestroyLoader())
{
removeList.Add(loader);
}
}
// 销毁文件加载器
foreach (var loader in removeList)
{
string bundleName = loader.LoadBundleInfo.Bundle.BundleName;
loader.DestroyLoader();
_resManager.LoaderDic.Remove(bundleName);
} }
_steps = ESteps.Done; _steps = ESteps.Done;
@@ -71,5 +53,36 @@ namespace YooAsset
} }
} }
} }
/// <summary>
/// 说明:资源包之间会有深层的依赖链表,需要多次迭代才可以在单帧内卸载!
/// </summary>
private void LoopUnloadUnused()
{
var removeList = new List<LoadBundleFileOperation>(_resManager.LoaderDic.Count);
// 注意:优先销毁资源提供者
foreach (var loader in _resManager.LoaderDic.Values)
{
loader.TryDestroyProviders();
}
// 获取销毁列表
foreach (var loader in _resManager.LoaderDic.Values)
{
if (loader.CanDestroyLoader())
{
removeList.Add(loader);
}
}
// 销毁文件加载器
foreach (var loader in removeList)
{
string bundleName = loader.LoadBundleInfo.Bundle.BundleName;
loader.DestroyLoader();
_resManager.LoaderDic.Remove(bundleName);
}
}
} }
} }

View File

@@ -286,7 +286,7 @@ namespace YooAsset
return status; return status;
} }
#region #region
/// <summary> /// <summary>
/// 出生的场景 /// 出生的场景
/// </summary> /// </summary>
@@ -341,16 +341,15 @@ namespace YooAsset
/// <summary> /// <summary>
/// 获取资源包的调试信息列表 /// 获取资源包的调试信息列表
/// </summary> /// </summary>
internal void GetBundleDebugInfos(List<DebugBundleInfo> output) internal List<string> GetDebugDependBundles()
{ {
List<string> result = new List<string>(_bundleLoaders.Count);
foreach (var bundleLoader in _bundleLoaders) foreach (var bundleLoader in _bundleLoaders)
{ {
var bundleInfo = new DebugBundleInfo(); var packageBundle = bundleLoader.LoadBundleInfo.Bundle;
bundleInfo.BundleName = bundleLoader.LoadBundleInfo.Bundle.BundleName; result.Add(packageBundle.BundleName);
bundleInfo.RefCount = bundleLoader.RefCount;
bundleInfo.Status = bundleLoader.Status;
output.Add(bundleInfo);
} }
return result;
} }
#endregion #endregion
} }

View File

@@ -360,7 +360,15 @@ namespace YooAsset
} }
#region #region
internal List<DebugProviderInfo> GetDebugReportInfos() internal DebugPackageData GetDebugPackageData()
{
DebugPackageData data = new DebugPackageData();
data.PackageName = PackageName;
data.ProviderInfos = GetDebugProviderInfos();
data.BundleInfos = GetDebugBundleInfos();
return data;
}
internal List<DebugProviderInfo> GetDebugProviderInfos()
{ {
List<DebugProviderInfo> result = new List<DebugProviderInfo>(ProviderDic.Count); List<DebugProviderInfo> result = new List<DebugProviderInfo>(ProviderDic.Count);
foreach (var provider in ProviderDic.Values) foreach (var provider in ProviderDic.Values)
@@ -372,12 +380,38 @@ namespace YooAsset
providerInfo.LoadingTime = provider.LoadingTime; providerInfo.LoadingTime = provider.LoadingTime;
providerInfo.RefCount = provider.RefCount; providerInfo.RefCount = provider.RefCount;
providerInfo.Status = provider.Status.ToString(); providerInfo.Status = provider.Status.ToString();
providerInfo.DependBundleInfos = new List<DebugBundleInfo>(); providerInfo.DependBundles = provider.GetDebugDependBundles();
provider.GetBundleDebugInfos(providerInfo.DependBundleInfos);
result.Add(providerInfo); result.Add(providerInfo);
} }
return result; return result;
} }
internal List<DebugBundleInfo> GetDebugBundleInfos()
{
List<DebugBundleInfo> result = new List<DebugBundleInfo>(LoaderDic.Values.Count);
foreach (var bundleLoader in LoaderDic.Values)
{
var packageBundle = bundleLoader.LoadBundleInfo.Bundle;
var bundleInfo = new DebugBundleInfo();
bundleInfo.BundleName = packageBundle.BundleName;
bundleInfo.RefCount = bundleLoader.RefCount;
bundleInfo.Status = bundleLoader.Status;
bundleInfo.ReferenceBundles = FilterReferenceBundles(packageBundle);
result.Add(bundleInfo);
}
return result;
}
internal List<string> FilterReferenceBundles(PackageBundle packageBundle)
{
// 注意:引用的资源包不一定在内存中,所以需要过滤
var referenceBundles = packageBundle.GetDebugReferenceBundles();
List<string> result = new List<string>(referenceBundles.Count);
foreach (var bundleName in referenceBundles)
{
if (LoaderDic.ContainsKey(bundleName))
result.Add(bundleName);
}
return result;
}
#endregion #endregion
} }
} }

View File

@@ -1,7 +1,7 @@
 
namespace YooAsset namespace YooAsset
{ {
internal enum EBuildBundleType public enum EBuildBundleType
{ {
/// <summary> /// <summary>
/// 未知类型 /// 未知类型

View File

@@ -35,7 +35,6 @@ namespace YooAsset
buffer.WriteUTF8(manifest.FileVersion); buffer.WriteUTF8(manifest.FileVersion);
// 写入文件头信息 // 写入文件头信息
buffer.WriteBool(manifest.LegacyDependency);
buffer.WriteBool(manifest.EnableAddressable); buffer.WriteBool(manifest.EnableAddressable);
buffer.WriteBool(manifest.LocationToLower); buffer.WriteBool(manifest.LocationToLower);
buffer.WriteBool(manifest.IncludeAssetGUID); buffer.WriteBool(manifest.IncludeAssetGUID);
@@ -71,8 +70,7 @@ namespace YooAsset
buffer.WriteInt64(packageBundle.FileSize); buffer.WriteInt64(packageBundle.FileSize);
buffer.WriteBool(packageBundle.Encrypted); buffer.WriteBool(packageBundle.Encrypted);
buffer.WriteUTF8Array(packageBundle.Tags); buffer.WriteUTF8Array(packageBundle.Tags);
buffer.WriteInt32Array(packageBundle.DependIDs); buffer.WriteInt32Array(packageBundle.DependBundleIDs);
buffer.WriteInt32Array(packageBundle.ReferenceBundleIDs);
} }
// 写入文件流 // 写入文件流
@@ -111,7 +109,6 @@ namespace YooAsset
{ {
// 读取文件头信息 // 读取文件头信息
manifest.FileVersion = fileVersion; manifest.FileVersion = fileVersion;
manifest.LegacyDependency = buffer.ReadBool();
manifest.EnableAddressable = buffer.ReadBool(); manifest.EnableAddressable = buffer.ReadBool();
manifest.LocationToLower = buffer.ReadBool(); manifest.LocationToLower = buffer.ReadBool();
manifest.IncludeAssetGUID = buffer.ReadBool(); manifest.IncludeAssetGUID = buffer.ReadBool();
@@ -154,8 +151,7 @@ namespace YooAsset
packageBundle.FileSize = buffer.ReadInt64(); packageBundle.FileSize = buffer.ReadInt64();
packageBundle.Encrypted = buffer.ReadBool(); packageBundle.Encrypted = buffer.ReadBool();
packageBundle.Tags = buffer.ReadUTF8Array(); packageBundle.Tags = buffer.ReadUTF8Array();
packageBundle.DependIDs = buffer.ReadInt32Array(); packageBundle.DependBundleIDs = buffer.ReadInt32Array();
packageBundle.ReferenceBundleIDs = buffer.ReadInt32Array();
FillBundleCollection(manifest, packageBundle); FillBundleCollection(manifest, packageBundle);
} }
} }
@@ -183,6 +179,17 @@ namespace YooAsset
throw new Exception($"Invalid bundle id : {bundleID} Asset path : {packageAsset.AssetPath}"); throw new Exception($"Invalid bundle id : {bundleID} Asset path : {packageAsset.AssetPath}");
} }
} }
// 填充资源包引用关系
for (int index = 0; index < manifest.BundleList.Count; index++)
{
var sourceBundle = manifest.BundleList[index];
foreach (int dependIndex in sourceBundle.DependBundleIDs)
{
var dependBundle = manifest.BundleList[dependIndex];
dependBundle.AddReferenceBundleID(index);
}
}
} }
public static void CreateAssetCollection(PackageManifest manifest, int assetCount) public static void CreateAssetCollection(PackageManifest manifest, int assetCount)

View File

@@ -78,7 +78,6 @@ namespace YooAsset
// 读取文件头信息 // 读取文件头信息
Manifest = new PackageManifest(); Manifest = new PackageManifest();
Manifest.FileVersion = fileVersion; Manifest.FileVersion = fileVersion;
Manifest.LegacyDependency = _buffer.ReadBool();
Manifest.EnableAddressable = _buffer.ReadBool(); Manifest.EnableAddressable = _buffer.ReadBool();
Manifest.LocationToLower = _buffer.ReadBool(); Manifest.LocationToLower = _buffer.ReadBool();
Manifest.IncludeAssetGUID = _buffer.ReadBool(); Manifest.IncludeAssetGUID = _buffer.ReadBool();
@@ -147,8 +146,7 @@ namespace YooAsset
packageBundle.FileSize = _buffer.ReadInt64(); packageBundle.FileSize = _buffer.ReadInt64();
packageBundle.Encrypted = _buffer.ReadBool(); packageBundle.Encrypted = _buffer.ReadBool();
packageBundle.Tags = _buffer.ReadUTF8Array(); packageBundle.Tags = _buffer.ReadUTF8Array();
packageBundle.DependIDs = _buffer.ReadInt32Array(); packageBundle.DependBundleIDs = _buffer.ReadInt32Array();
packageBundle.ReferenceBundleIDs = _buffer.ReadInt32Array();
ManifestTools.FillBundleCollection(Manifest, packageBundle); ManifestTools.FillBundleCollection(Manifest, packageBundle);
_packageBundleCount--; _packageBundleCount--;

View File

@@ -31,12 +31,11 @@ namespace YooAsset
/// </summary> /// </summary>
public int BundleID; public int BundleID;
#region YOOASSET_LEGACY_DEPENDENCY
/// <summary> /// <summary>
/// 依赖的资源包列表 /// 依赖的资源包ID集合
/// 说明:框架层收集查询结果
/// </summary> /// </summary>
public int[] DependBundleIDs; public int[] DependBundleIDs;
#endregion
/// <summary> /// <summary>
/// 临时数据对象(仅编辑器有效) /// 临时数据对象(仅编辑器有效)

View File

@@ -44,16 +44,9 @@ namespace YooAsset
/// <summary> /// <summary>
/// 依赖的资源包ID集合 /// 依赖的资源包ID集合
/// 注意:引擎层构建查询结果
/// </summary> /// </summary>
public int[] DependIDs; public int[] DependBundleIDs;
#region YOOASSET_LEGACY_DEPENDENCY
/// <summary>
/// 引用该资源包的资源包列表
/// 说明:谁引用了该资源包
/// </summary>
public int[] ReferenceBundleIDs;
#endregion
/// <summary> /// <summary>
/// 资源包GUID /// 资源包GUID
@@ -66,7 +59,6 @@ namespace YooAsset
/// <summary> /// <summary>
/// 资源包类型 /// 资源包类型
/// </summary> /// </summary>
private int _bundleType;
public int BundleType public int BundleType
{ {
get get
@@ -74,11 +66,11 @@ namespace YooAsset
return _bundleType; return _bundleType;
} }
} }
private int _bundleType;
/// <summary> /// <summary>
/// 文件名称 /// 文件名称
/// </summary> /// </summary>
private string _fileName;
public string FileName public string FileName
{ {
get get
@@ -88,11 +80,11 @@ namespace YooAsset
return _fileName; return _fileName;
} }
} }
private string _fileName;
/// <summary> /// <summary>
/// 文件后缀名 /// 文件后缀名
/// </summary> /// </summary>
private string _fileExtension;
public string FileExtension public string FileExtension
{ {
get get
@@ -102,6 +94,7 @@ namespace YooAsset
return _fileExtension; return _fileExtension;
} }
} }
private string _fileExtension;
/// <summary> /// <summary>
/// 包含的主资源集合 /// 包含的主资源集合
@@ -110,10 +103,12 @@ namespace YooAsset
public readonly List<PackageAsset> IncludeMainAssets = new List<PackageAsset>(10); public readonly List<PackageAsset> IncludeMainAssets = new List<PackageAsset>(10);
/// <summary> /// <summary>
/// 临时数据对象(仅编辑器有效) /// 引用该资源包的资源包列表
/// 说明:谁引用了该资源包
/// </summary> /// </summary>
[NonSerialized] [NonSerialized]
public object TempDataInEditor; public readonly List<int> ReferenceBundleIDs = new List<int>(10);
private readonly HashSet<int> _referenceBundleIDs = new HashSet<int>();
public PackageBundle() public PackageBundle()
@@ -125,11 +120,25 @@ namespace YooAsset
/// </summary> /// </summary>
public void InitBundle(PackageManifest manifest) public void InitBundle(PackageManifest manifest)
{ {
_mainfest = manifest;
_bundleType = manifest.BuildBundleType; _bundleType = manifest.BuildBundleType;
_fileExtension = ManifestTools.GetRemoteBundleFileExtension(BundleName); _fileExtension = ManifestTools.GetRemoteBundleFileExtension(BundleName);
_fileName = ManifestTools.GetRemoteBundleFileName(manifest.OutputNameStyle, BundleName, _fileExtension, FileHash); _fileName = ManifestTools.GetRemoteBundleFileName(manifest.OutputNameStyle, BundleName, _fileExtension, FileHash);
} }
/// <summary>
/// 添加引用该资源包的资源包ID
/// 说明:谁引用了该资源包
/// </summary>
public void AddReferenceBundleID(int bundleID)
{
if (_referenceBundleIDs.Contains(bundleID) == false)
{
_referenceBundleIDs.Add(bundleID);
ReferenceBundleIDs.Add(bundleID);
}
}
/// <summary> /// <summary>
/// 是否包含Tag /// 是否包含Tag
/// </summary> /// </summary>
@@ -169,5 +178,23 @@ namespace YooAsset
return false; return false;
} }
#region
private PackageManifest _mainfest;
private List<string> _debugReferenceBundles;
public List<string> GetDebugReferenceBundles()
{
if (_debugReferenceBundles == null)
{
_debugReferenceBundles = new List<string>(ReferenceBundleIDs.Count);
foreach (int bundleID in ReferenceBundleIDs)
{
var packageBundle = _mainfest.BundleList[bundleID];
_debugReferenceBundles.Add(packageBundle.BundleName);
}
}
return _debugReferenceBundles;
}
#endregion
} }
} }

View File

@@ -17,11 +17,6 @@ namespace YooAsset
/// </summary> /// </summary>
public string FileVersion; public string FileVersion;
/// <summary>
/// 旧版依赖模式
/// </summary>
public bool LegacyDependency;
/// <summary> /// <summary>
/// 启用可寻址资源定位 /// 启用可寻址资源定位
/// </summary> /// </summary>
@@ -191,35 +186,20 @@ namespace YooAsset
/// </summary> /// </summary>
public PackageBundle[] GetAllDependencies(string assetPath) public PackageBundle[] GetAllDependencies(string assetPath)
{ {
// YOOASSET_LEGACY_DEPENDENCY if (TryGetPackageAsset(assetPath, out PackageAsset packageAsset))
if (LegacyDependency)
{ {
if (TryGetPackageAsset(assetPath, out PackageAsset packageAsset)) List<PackageBundle> result = new List<PackageBundle>(packageAsset.DependBundleIDs.Length);
{ foreach (var dependID in packageAsset.DependBundleIDs)
List<PackageBundle> result = new List<PackageBundle>(packageAsset.DependBundleIDs.Length);
foreach (var dependID in packageAsset.DependBundleIDs)
{
var dependBundle = GetMainPackageBundle(dependID);
result.Add(dependBundle);
}
return result.ToArray();
}
else
{
throw new Exception("Should never get here !");
}
}
else
{
var packageBundle = GetMainPackageBundle(assetPath);
List<PackageBundle> result = new List<PackageBundle>(packageBundle.DependIDs.Length);
foreach (var dependID in packageBundle.DependIDs)
{ {
var dependBundle = GetMainPackageBundle(dependID); var dependBundle = GetMainPackageBundle(dependID);
result.Add(dependBundle); result.Add(dependBundle);
} }
return result.ToArray(); return result.ToArray();
} }
else
{
throw new Exception("Should never get here !");
}
} }
/// <summary> /// <summary>

View File

@@ -339,10 +339,11 @@ namespace YooAsset
/// 回收不再使用的资源 /// 回收不再使用的资源
/// 说明:卸载引用计数为零的资源 /// 说明:卸载引用计数为零的资源
/// </summary> /// </summary>
public UnloadUnusedAssetsOperation UnloadUnusedAssetsAsync() /// <param name="loopCount">循环迭代次数</param>
public UnloadUnusedAssetsOperation UnloadUnusedAssetsAsync(int loopCount = 10)
{ {
DebugCheckInitialize(); DebugCheckInitialize();
var operation = new UnloadUnusedAssetsOperation(_resourceManager); var operation = new UnloadUnusedAssetsOperation(_resourceManager, loopCount);
OperationSystem.StartOperation(PackageName, operation); OperationSystem.StartOperation(PackageName, operation);
return operation; return operation;
} }
@@ -1146,10 +1147,7 @@ namespace YooAsset
#region #region
internal DebugPackageData GetDebugPackageData() internal DebugPackageData GetDebugPackageData()
{ {
DebugPackageData data = new DebugPackageData(); return _resourceManager.GetDebugPackageData();
data.PackageName = PackageName;
data.ProviderInfos = _resourceManager.GetDebugReportInfos();
return data;
} }
#endregion #endregion
} }

View File

@@ -29,7 +29,7 @@ namespace YooAsset
/// <summary> /// <summary>
/// 清单文件格式版本 /// 清单文件格式版本
/// </summary> /// </summary>
public const string ManifestFileVersion = "2.3.0"; public const string ManifestFileVersion = "2.3.1";
/// <summary> /// <summary>

View File

@@ -19,8 +19,7 @@ internal class SceneBattle : MonoBehaviour
_windowHandle.InstantiateSync(CanvasDesktop.transform); _windowHandle.InstantiateSync(CanvasDesktop.transform);
// 加载背景音乐 // 加载背景音乐
var package = YooAssets.GetPackage("DefaultPackage"); _musicHandle = YooAssets.LoadAssetAsync<AudioClip>("music_background");
_musicHandle = package.LoadAssetAsync<AudioClip>("music_background");
yield return _musicHandle; yield return _musicHandle;
// 播放背景音乐 // 播放背景音乐
@@ -29,6 +28,11 @@ internal class SceneBattle : MonoBehaviour
audioSource.clip = _musicHandle.AssetObject as AudioClip; audioSource.clip = _musicHandle.AssetObject as AudioClip;
audioSource.Play(); audioSource.Play();
// 切换场景的时候释放资源
var package = YooAssets.GetPackage("DefaultPackage");
var operation = package.UnloadUnusedAssetsAsync();
yield return operation;
_battleRoom = new BattleRoom(); _battleRoom = new BattleRoom();
_battleRoom.IntRoom(); _battleRoom.IntRoom();
} }

View File

@@ -9,11 +9,16 @@ public class SceneHome : MonoBehaviour
private AssetHandle _windowHandle; private AssetHandle _windowHandle;
private IEnumerator Start() private IEnumerator Start()
{ {
// 加载主页面 // 加载主页面
_windowHandle = YooAssets.LoadAssetAsync<GameObject>("UIHome"); _windowHandle = YooAssets.LoadAssetAsync<GameObject>("UIHome");
yield return _windowHandle; yield return _windowHandle;
_windowHandle.InstantiateSync(CanvasDesktop.transform); _windowHandle.InstantiateSync(CanvasDesktop.transform);
// 切换场景的时候释放资源
var package = YooAssets.GetPackage("DefaultPackage");
var operation = package.UnloadUnusedAssetsAsync();
yield return operation;
} }
private void OnDestroy() private void OnDestroy()
@@ -24,13 +29,5 @@ public class SceneHome : MonoBehaviour
_windowHandle.Release(); _windowHandle.Release();
_windowHandle = null; _windowHandle = null;
} }
// 切换场景的时候释放资源
if (YooAssets.Initialized)
{
var package = YooAssets.GetPackage("DefaultPackage");
var operation = package.UnloadUnusedAssetsAsync();
operation.WaitForAsyncComplete();
}
} }
} }

View File

@@ -26,7 +26,7 @@ MonoBehaviour:
Groups: Groups:
- GroupName: battle - GroupName: battle
GroupDesc: "\u6218\u6597" GroupDesc: "\u6218\u6597"
AssetTags: AssetTags: battle
ActiveRuleName: EnableGroup ActiveRuleName: EnableGroup
Collectors: Collectors:
- CollectPath: Assets/Samples/Space Shooter/GameRes/Effect - CollectPath: Assets/Samples/Space Shooter/GameRes/Effect
@@ -92,7 +92,7 @@ MonoBehaviour:
UserData: UserData:
- GroupName: scene - GroupName: scene
GroupDesc: "\u573A\u666F" GroupDesc: "\u573A\u666F"
AssetTags: AssetTags: scene
ActiveRuleName: EnableGroup ActiveRuleName: EnableGroup
Collectors: Collectors:
- CollectPath: Assets/Samples/Space Shooter/GameRes/Scene - CollectPath: Assets/Samples/Space Shooter/GameRes/Scene
@@ -113,7 +113,7 @@ MonoBehaviour:
UserData: UserData:
- GroupName: ugui - GroupName: ugui
GroupDesc: "\u9762\u677F" GroupDesc: "\u9762\u677F"
AssetTags: AssetTags: ui
ActiveRuleName: EnableGroup ActiveRuleName: EnableGroup
Collectors: Collectors:
- CollectPath: Assets/Samples/Space Shooter/GameRes/UIPanel - CollectPath: Assets/Samples/Space Shooter/GameRes/UIPanel