Compare commits

...

9 Commits
2.1.0 ... 2.1.1

Author SHA1 Message Date
hevinci
6f13c021b9 Update CHANGELOG.md 2024-01-17 12:11:25 +08:00
hevinci
5f30c92d44 Update package.json 2024-01-17 12:11:17 +08:00
hevinci
3e6c55d981 style : code comment 2024-01-10 15:04:29 +08:00
hevinci
de36f984d7 style : change macro name 2024-01-03 16:44:48 +08:00
hevinci
95328fe1a6 feat : wechat game cache query 2024-01-03 16:24:02 +08:00
hevinci
1fb78185ff feat : support share pack rule
支持共享资源打包规则
2024-01-03 15:13:28 +08:00
hevinci
58f9aea979 fix #223 2024-01-02 11:46:29 +08:00
hevinci
4d4bb1e34f fix #223 2024-01-02 11:06:50 +08:00
hevinci
6e1978ec10 fix #224 2024-01-02 10:35:41 +08:00
18 changed files with 173 additions and 21 deletions

View File

@@ -2,6 +2,29 @@
All notable changes to this package will be documented in this file.
## [2.1.1] - 2024-01-17
### Fixed
- (#224) 修复了编辑器模式打包时 SimulateBuild 报错的问题。
- (#223) 修复了资源构建界面读取配置导致的报错问题。
### Added
- 支持共享资源打包规则,可以定制化独立的构建规则。
```c#
public class BuildParameters
{
/// <summary>
/// 是否启用共享资源打包
/// </summary>
public bool EnableSharePackRule = false;
}
```
- 微信小游戏平台,资源下载器支持底层缓存查询。
## [2.1.0] - 2023-12-27
升级了 Scriptable build pipeline (SBP) 的版本,来解决图集引用的精灵图片冗余问题。

View File

@@ -70,13 +70,14 @@ namespace YooAsset.Editor
}
/// <summary>
/// 设置为统一的着色器包名
/// 设置资源包名
/// </summary>
public void SetShaderBundleName(string packageName, bool uniqueBundleName)
public void SetBundleName(string bundleName)
{
// 获取着色器打包规则结果
PackRuleResult shaderPackRuleResult = DefaultPackRule.CreateShadersPackRuleResult();
BundleName = shaderPackRuleResult.GetBundleName(packageName, uniqueBundleName);
if (HasBundleName())
throw new System.Exception("Should never get here !");
BundleName = bundleName;
}
/// <summary>

View File

@@ -142,7 +142,7 @@ namespace YooAsset.Editor
/// </summary>
public UnityEditor.AssetBundleBuild CreatePipelineBuild()
{
// 注意:我们不支持AssetBundle的变种机制
// 注意:我们不支持AssetBundle的变种机制
AssetBundleBuild build = new AssetBundleBuild();
build.assetBundleName = BundleName;
build.assetBundleVariant = string.Empty;

View File

@@ -47,6 +47,11 @@ namespace YooAsset.Editor
public string PackageVersion;
/// <summary>
/// 是否启用共享资源打包
/// </summary>
public bool EnableSharePackRule = false;
/// <summary>
/// 验证构建结果
/// </summary>

View File

@@ -31,16 +31,18 @@ namespace YooAsset.Editor
buildReport.Summary.BuildMode = buildParameters.BuildMode;
buildReport.Summary.BuildPackageName = buildParameters.PackageName;
buildReport.Summary.BuildPackageVersion = buildParameters.PackageVersion;
// 收集器配置
buildReport.Summary.UniqueBundleName = buildMapContext.Command.UniqueBundleName;
buildReport.Summary.EnableAddressable = buildMapContext.Command.EnableAddressable;
buildReport.Summary.LocationToLower = buildMapContext.Command.LocationToLower;
buildReport.Summary.IncludeAssetGUID = buildMapContext.Command.IncludeAssetGUID;
buildReport.Summary.IgnoreDefaultType = buildMapContext.Command.IgnoreDefaultType;
buildReport.Summary.AutoCollectShaders = buildMapContext.Command.AutoCollectShaders;
buildReport.Summary.EncryptionClassName = buildParameters.EncryptionServices == null ?
"null" : buildParameters.EncryptionServices.GetType().FullName;
// 构建参数
buildReport.Summary.EnableSharePackRule = buildParameters.EnableSharePackRule;
buildReport.Summary.EncryptionClassName = buildParameters.EncryptionServices == null ? "null" : buildParameters.EncryptionServices.GetType().FullName;
if (buildParameters.BuildPipeline == nameof(BuiltinBuildPipeline))
{
var builtinBuildParameters = buildParameters as BuiltinBuildParameters;

View File

@@ -86,23 +86,45 @@ namespace YooAsset.Editor
// 6. 自动收集所有依赖的着色器
if (collectResult.Command.AutoCollectShaders)
{
// 获取着色器打包规则结果
PackRuleResult shaderPackRuleResult = DefaultPackRule.CreateShadersPackRuleResult();
string shaderBundleName = shaderPackRuleResult.GetBundleName(collectResult.Command.PackageName, collectResult.Command.UniqueBundleName);
foreach (var buildAssetInfo in allBuildAssetInfos.Values)
{
if (buildAssetInfo.CollectorType == ECollectorType.None)
{
if (buildAssetInfo.AssetInfo.IsShaderAsset())
{
buildAssetInfo.SetShaderBundleName(collectResult.Command.PackageName, collectResult.Command.UniqueBundleName);
buildAssetInfo.SetBundleName(shaderBundleName);
}
}
}
}
// 7. 记录关键信息
// 7. 计算共享资源的包名
if (buildParameters.EnableSharePackRule)
{
PreProcessPackShareBundle(buildParameters, collectResult.Command, allBuildAssetInfos);
foreach (var buildAssetInfo in allBuildAssetInfos.Values)
{
if (buildAssetInfo.HasBundleName() == false)
{
PackRuleResult packRuleResult = GetShareBundleName(buildAssetInfo);
if (packRuleResult.IsValid())
{
string shareBundleName = packRuleResult.GetShareBundleName(collectResult.Command.PackageName, collectResult.Command.UniqueBundleName);
buildAssetInfo.SetBundleName(shareBundleName);
}
}
}
PostProcessPackShareBundle();
}
// 8. 记录关键信息
context.AssetFileCount = allBuildAssetInfos.Count;
context.Command = collectResult.Command;
// 8. 移除不参与构建的资源
// 9. 移除不参与构建的资源
List<BuildAssetInfo> removeBuildList = new List<BuildAssetInfo>();
foreach (var buildAssetInfo in allBuildAssetInfos.Values)
{
@@ -114,7 +136,7 @@ namespace YooAsset.Editor
allBuildAssetInfos.Remove(removeValue.AssetInfo.AssetPath);
}
// 9. 构建资源列表
// 10. 构建资源列表
var allPackAssets = allBuildAssetInfos.Values.ToList();
if (allPackAssets.Count == 0)
{
@@ -177,5 +199,31 @@ namespace YooAsset.Editor
allCollectAssets.Remove(removeValue);
}
}
#region
/// <summary>
/// 共享资源打包前置处理
/// </summary>
protected virtual void PreProcessPackShareBundle(BuildParameters buildParameters, CollectCommand command, Dictionary<string, BuildAssetInfo> allBuildAssetInfos)
{
}
/// <summary>
/// 共享资源打包后置处理
/// </summary>
protected virtual void PostProcessPackShareBundle()
{
}
/// <summary>
/// 获取共享资源包名称
/// </summary>
protected virtual PackRuleResult GetShareBundleName(BuildAssetInfo buildAssetInfo)
{
string bundleName = Path.GetDirectoryName(buildAssetInfo.AssetInfo.AssetPath);
PackRuleResult result = new PackRuleResult(bundleName, DefaultPackRule.AssetBundleFileExtension);
return result;
}
#endregion
}
}

View File

@@ -16,6 +16,13 @@ namespace YooAsset.Editor
// 检测基础构建参数
buildParametersContext.CheckBuildParameters();
// 检测不被支持的参数
if (buildParameters.EnableSharePackRule)
{
string message = BuildLogger.GetErrorMessage(ErrorCode.BuildPipelineNotSupportSharePackRule, $"{nameof(EBuildPipeline.RawFileBuildPipeline)} not support share pack rule !");
throw new Exception(message);
}
// 检测不被支持的构建模式
if (buildParameters.BuildMode == EBuildMode.DryRunBuild)
{

View File

@@ -14,6 +14,7 @@ namespace YooAsset.Editor
PackageOutputDirectoryExists = 115,
RecommendScriptBuildPipeline = 130,
BuildPipelineNotSupportBuildMode = 140,
BuildPipelineNotSupportSharePackRule = 141,
// TaskGetBuildMap
RemoveInvalidTags = 200,

View File

@@ -65,6 +65,8 @@ namespace YooAsset.Editor
var buildMode = AssetBundleBuilderSetting.GetPackageBuildMode(PackageName, BuildPipeline);
var buildModeList = GetSupportBuildModes();
int defaultIndex = buildModeList.FindIndex(x => x.Equals(buildMode));
if (defaultIndex < 0)
defaultIndex = (int)(EBuildMode)buildModeList[0];
_buildModeField = new PopupField<Enum>(buildModeList, defaultIndex);
_buildModeField.label = "Build Mode";
_buildModeField.style.width = StyleWidth;
@@ -83,6 +85,8 @@ namespace YooAsset.Editor
{
var encyptionClassName = AssetBundleBuilderSetting.GetPackageEncyptionClassName(PackageName, BuildPipeline);
int defaultIndex = encryptionClassTypes.FindIndex(x => x.FullName.Equals(encyptionClassName));
if (defaultIndex < 0)
defaultIndex = 0;
_encryptionField = new PopupField<Type>(encryptionClassTypes, defaultIndex);
_encryptionField.label = "Encryption";
_encryptionField.style.width = StyleWidth;

View File

@@ -36,6 +36,7 @@ namespace YooAsset.Editor
buildParameters.BuildMode = buildMode;
buildParameters.PackageName = PackageName;
buildParameters.PackageVersion = GetPackageVersion();
buildParameters.EnableSharePackRule = true;
buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle;
buildParameters.BuildinFileCopyOption = buildinFileCopyOption;

View File

@@ -36,6 +36,7 @@ namespace YooAsset.Editor
buildParameters.BuildMode = buildMode;
buildParameters.PackageName = PackageName;
buildParameters.PackageVersion = GetPackageVersion();
buildParameters.EnableSharePackRule = true;
buildParameters.VerifyBuildingResult = true;
buildParameters.FileNameStyle = fileNameStyle;
buildParameters.BuildinFileCopyOption = buildinFileCopyOption;

View File

@@ -28,6 +28,14 @@ namespace YooAsset.Editor
_bundleExtension = bundleExtension;
}
/// <summary>
/// 结果是否有效
/// </summary>
public bool IsValid()
{
return string.IsNullOrEmpty(_bundleName) == false && string.IsNullOrEmpty(_bundleExtension) == false;
}
/// <summary>
/// 获取资源包全名称
/// </summary>
@@ -41,6 +49,20 @@ namespace YooAsset.Editor
fullName = $"{bundleName}.{_bundleExtension}";
return fullName.ToLower();
}
/// <summary>
/// 获取共享资源包全名称
/// </summary>
public string GetShareBundleName(string packageName, bool uniqueBundleName)
{
string fullName;
string bundleName = EditorTools.GetRegularPath(_bundleName).Replace('/', '_').Replace('.', '_').ToLower();
if (uniqueBundleName)
fullName = $"{packageName}_share_{bundleName}.{_bundleExtension}";
else
fullName = $"share_{bundleName}.{_bundleExtension}";
return fullName.ToLower();
}
}
/// <summary>

View File

@@ -62,6 +62,7 @@ namespace YooAsset.Editor
public bool AutoCollectShaders;
// 构建参数
public bool EnableSharePackRule;
public string EncryptionClassName;
public EFileNameStyle FileNameStyle;
public ECompressOption CompressOption;

View File

@@ -67,7 +67,7 @@ namespace YooAsset.Editor
_items.Add(new ItemWrapper("Package Version", buildReport.Summary.BuildPackageVersion));
_items.Add(new ItemWrapper(string.Empty, string.Empty));
_items.Add(new ItemWrapper("Settings", string.Empty));
_items.Add(new ItemWrapper("Collect Settings", string.Empty));
_items.Add(new ItemWrapper("Unique Bundle Name", $"{buildReport.Summary.UniqueBundleName}"));
_items.Add(new ItemWrapper("Enable Addressable", $"{buildReport.Summary.EnableAddressable}"));
_items.Add(new ItemWrapper("Location To Lower", $"{buildReport.Summary.LocationToLower}"));
@@ -77,6 +77,7 @@ namespace YooAsset.Editor
_items.Add(new ItemWrapper(string.Empty, string.Empty));
_items.Add(new ItemWrapper("Build Params", string.Empty));
_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}"));

View File

@@ -44,10 +44,15 @@ namespace YooAsset
{
public static class EditorSimulateModeHelper
{
/// <summary>
/// 编辑器下模拟构建清单
/// </summary>
public static string SimulateBuild(string buildPipelineName, string packageName) { throw new System.Exception("Only support in unity editor !"); }
public static string SimulateBuild(string buildPipelineName, string packageName)
{
throw new System.Exception("Only support in unity editor !");
}
public static string SimulateBuild(EDefaultBuildPipeline buildPipeline, string packageName)
{
throw new System.Exception("Only support in unity editor !");
}
}
}
#endif

View File

@@ -65,6 +65,23 @@ namespace YooAsset
}
// 查询相关
#if UNITY_WECHAT_GAME
private WeChatWASM.WXFileSystemManager _wxFileSystemMgr;
private bool IsCachedPackageBundle(PackageBundle packageBundle)
{
if (_wxFileSystemMgr == null)
_wxFileSystemMgr = WeChatWASM.WX.GetFileSystemManager();
string filePath = WeChatWASM.WX.env.USER_DATA_PATH + packageBundle.FileName;
string result = _wxFileSystemMgr.AccessSync(filePath);
return result.Equals("access:ok");
}
#else
private bool IsCachedPackageBundle(PackageBundle packageBundle)
{
return false;
}
#endif
private bool IsBuildinPackageBundle(PackageBundle packageBundle)
{
return _buildinQueryServices.Query(PackageName, packageBundle.FileName, packageBundle.FileCRC);
@@ -116,6 +133,10 @@ namespace YooAsset
List<PackageBundle> downloadList = new List<PackageBundle>(1000);
foreach (var packageBundle in manifest.BundleList)
{
// 忽略缓存文件
if (IsCachedPackageBundle(packageBundle))
continue;
// 忽略APP资源
if (IsBuildinPackageBundle(packageBundle))
continue;
@@ -137,6 +158,10 @@ namespace YooAsset
List<PackageBundle> downloadList = new List<PackageBundle>(1000);
foreach (var packageBundle in manifest.BundleList)
{
// 忽略缓存文件
if (IsCachedPackageBundle(packageBundle))
continue;
// 忽略APP资源
if (IsBuildinPackageBundle(packageBundle))
continue;
@@ -194,6 +219,10 @@ namespace YooAsset
List<PackageBundle> downloadList = new List<PackageBundle>(1000);
foreach (var packageBundle in checkList)
{
// 忽略缓存文件
if (IsCachedPackageBundle(packageBundle))
continue;
// 忽略APP资源
if (IsBuildinPackageBundle(packageBundle))
continue;

View File

@@ -1,15 +1,16 @@
using System;
using System;
using System.IO;
using System.Text;
using YooAsset;
/// <summary>
/// <EFBFBD>ļ<EFBFBD>ƫ<EFBFBD>Ƽ<EFBFBD><EFBFBD>ܷ<EFBFBD>ʽ
/// 文件偏移加密方式
/// </summary>
public class FileOffsetEncryption : IEncryptionServices
{
public EncryptResult Encrypt(EncryptFileInfo fileInfo)
{
// 注意:只对音频资源包加密
if (fileInfo.BundleName.Contains("_gameres_audio"))
{
int offset = 32;
@@ -32,7 +33,7 @@ public class FileOffsetEncryption : IEncryptionServices
}
/// <summary>
/// <EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܷ<EFBFBD>ʽ
/// 文件流加密方式
/// </summary>
public class FileStreamEncryption : IEncryptionServices
{

View File

@@ -1,7 +1,7 @@
{
"name": "com.tuyoogame.yooasset",
"displayName": "YooAsset",
"version": "2.1.0",
"version": "2.1.1",
"unity": "2019.4",
"description": "unity3d resources management system.",
"author": {