mirror of
https://github.com/tuyoogame/YooAsset.git
synced 2026-05-22 08:20:18 +00:00
Compare commits
21 Commits
1.4.5-prev
...
1.4.6-prev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0bc521903 | ||
|
|
071a84d9ef | ||
|
|
aa40b5336e | ||
|
|
157402bb39 | ||
|
|
5a98a68c27 | ||
|
|
f6bc52fd59 | ||
|
|
d1f2712e5f | ||
|
|
8958317f61 | ||
|
|
fdf27cbc1a | ||
|
|
26ffb829d0 | ||
|
|
521e3e2587 | ||
|
|
17c6158478 | ||
|
|
fa0dc48993 | ||
|
|
826bdaab5c | ||
|
|
7d21da76fb | ||
|
|
70465a49d7 | ||
|
|
2c650f2bdf | ||
|
|
cfbf6e23ec | ||
|
|
a64d485278 | ||
|
|
fbba2ddec9 | ||
|
|
6488e96127 |
@@ -2,6 +2,42 @@
|
|||||||
|
|
||||||
All notable changes to this package will be documented in this file.
|
All notable changes to this package will be documented in this file.
|
||||||
|
|
||||||
|
## [1.4.6-preview] - 2023-02-22
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- EVerifyLevel新增Middle级别。
|
||||||
|
|
||||||
|
```c#
|
||||||
|
public enum EVerifyLevel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 验证文件存在
|
||||||
|
/// </summary>
|
||||||
|
Low,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 验证文件大小
|
||||||
|
/// </summary>
|
||||||
|
Middle,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 验证文件大小和CRC
|
||||||
|
/// </summary>
|
||||||
|
High,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
- 补丁清单的资源包列表新增引用链。
|
||||||
|
|
||||||
|
(解决复杂依赖关系下,错误卸载资源包的问题)
|
||||||
|
|
||||||
|
- 缓存系统支持后缀格式存储。
|
||||||
|
|
||||||
|
(解决原生文件没有后缀格式的问题)
|
||||||
|
|
||||||
|
- 收集界面增加用户自定义数据栏。
|
||||||
|
|
||||||
## [1.4.5-preview] - 2023-02-17
|
## [1.4.5-preview] - 2023-02-17
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ namespace YooAsset.Editor
|
|||||||
new TaskPrepare(), //前期准备工作
|
new TaskPrepare(), //前期准备工作
|
||||||
new TaskGetBuildMap(), //获取构建列表
|
new TaskGetBuildMap(), //获取构建列表
|
||||||
new TaskBuilding(), //开始执行构建
|
new TaskBuilding(), //开始执行构建
|
||||||
|
new TaskCopyRawFile(), //拷贝原生文件
|
||||||
new TaskVerifyBuildResult(), //验证构建结果
|
new TaskVerifyBuildResult(), //验证构建结果
|
||||||
new TaskEncryption(), //加密资源文件
|
new TaskEncryption(), //加密资源文件
|
||||||
new TaskUpdateBuildInfo(), //更新构建信息
|
new TaskUpdateBuildInfo(), //更新构建信息
|
||||||
@@ -70,6 +71,7 @@ namespace YooAsset.Editor
|
|||||||
new TaskPrepare(), //前期准备工作
|
new TaskPrepare(), //前期准备工作
|
||||||
new TaskGetBuildMap(), //获取构建列表
|
new TaskGetBuildMap(), //获取构建列表
|
||||||
new TaskBuilding_SBP(), //开始执行构建
|
new TaskBuilding_SBP(), //开始执行构建
|
||||||
|
new TaskCopyRawFile(), //拷贝原生文件
|
||||||
new TaskVerifyBuildResult_SBP(), //验证构建结果
|
new TaskVerifyBuildResult_SBP(), //验证构建结果
|
||||||
new TaskEncryption(), //加密资源文件
|
new TaskEncryption(), //加密资源文件
|
||||||
new TaskUpdateBuildInfo(), //更新构建信息
|
new TaskUpdateBuildInfo(), //更新构建信息
|
||||||
|
|||||||
@@ -45,32 +45,6 @@ namespace YooAsset.Editor
|
|||||||
BuildResultContext buildResultContext = new BuildResultContext();
|
BuildResultContext buildResultContext = new BuildResultContext();
|
||||||
buildResultContext.UnityManifest = buildResults;
|
buildResultContext.UnityManifest = buildResults;
|
||||||
context.SetContextObject(buildResultContext);
|
context.SetContextObject(buildResultContext);
|
||||||
|
|
||||||
// 拷贝原生文件
|
|
||||||
if (buildMode == EBuildMode.ForceRebuild || buildMode == EBuildMode.IncrementalBuild)
|
|
||||||
{
|
|
||||||
CopyRawBundle(buildMapContext, buildParametersContext);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 拷贝原生文件
|
|
||||||
/// </summary>
|
|
||||||
private void CopyRawBundle(BuildMapContext buildMapContext, BuildParametersContext buildParametersContext)
|
|
||||||
{
|
|
||||||
string pipelineOutputDirectory = buildParametersContext.GetPipelineOutputDirectory();
|
|
||||||
foreach (var bundleInfo in buildMapContext.BundleInfos)
|
|
||||||
{
|
|
||||||
if (bundleInfo.IsRawFile)
|
|
||||||
{
|
|
||||||
string dest = $"{pipelineOutputDirectory}/{bundleInfo.BundleName}";
|
|
||||||
foreach (var buildAsset in bundleInfo.BuildinAssets)
|
|
||||||
{
|
|
||||||
if (buildAsset.IsRawAsset)
|
|
||||||
EditorTools.CopyFile(buildAsset.AssetPath, dest, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -44,32 +44,6 @@ namespace YooAsset.Editor
|
|||||||
BuildResultContext buildResultContext = new BuildResultContext();
|
BuildResultContext buildResultContext = new BuildResultContext();
|
||||||
buildResultContext.Results = buildResults;
|
buildResultContext.Results = buildResults;
|
||||||
context.SetContextObject(buildResultContext);
|
context.SetContextObject(buildResultContext);
|
||||||
|
|
||||||
// 拷贝原生文件
|
|
||||||
if (buildMode == EBuildMode.ForceRebuild || buildMode == EBuildMode.IncrementalBuild)
|
|
||||||
{
|
|
||||||
CopyRawBundle(buildMapContext, buildParametersContext);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 拷贝原生文件
|
|
||||||
/// </summary>
|
|
||||||
private void CopyRawBundle(BuildMapContext buildMapContext, BuildParametersContext buildParametersContext)
|
|
||||||
{
|
|
||||||
string pipelineOutputDirectory = buildParametersContext.GetPipelineOutputDirectory();
|
|
||||||
foreach (var bundleInfo in buildMapContext.BundleInfos)
|
|
||||||
{
|
|
||||||
if (bundleInfo.IsRawFile)
|
|
||||||
{
|
|
||||||
string dest = $"{pipelineOutputDirectory}/{bundleInfo.BundleName}";
|
|
||||||
foreach (var buildAsset in bundleInfo.BuildinAssets)
|
|
||||||
{
|
|
||||||
if (buildAsset.IsRawAsset)
|
|
||||||
EditorTools.CopyFile(buildAsset.AssetPath, dest, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace YooAsset.Editor
|
||||||
|
{
|
||||||
|
[TaskAttribute("拷贝原生文件")]
|
||||||
|
public class TaskCopyRawFile : IBuildTask
|
||||||
|
{
|
||||||
|
void IBuildTask.Run(BuildContext context)
|
||||||
|
{
|
||||||
|
var buildParametersContext = context.GetContextObject<BuildParametersContext>();
|
||||||
|
var buildParameters = context.GetContextObject<BuildParametersContext>();
|
||||||
|
var buildMapContext = context.GetContextObject<BuildMapContext>();
|
||||||
|
|
||||||
|
var buildMode = buildParameters.Parameters.BuildMode;
|
||||||
|
if (buildMode == EBuildMode.ForceRebuild || buildMode == EBuildMode.IncrementalBuild)
|
||||||
|
{
|
||||||
|
CopyRawBundle(buildMapContext, buildParametersContext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 拷贝原生文件
|
||||||
|
/// </summary>
|
||||||
|
private void CopyRawBundle(BuildMapContext buildMapContext, BuildParametersContext buildParametersContext)
|
||||||
|
{
|
||||||
|
string pipelineOutputDirectory = buildParametersContext.GetPipelineOutputDirectory();
|
||||||
|
foreach (var bundleInfo in buildMapContext.BundleInfos)
|
||||||
|
{
|
||||||
|
if (bundleInfo.IsRawFile)
|
||||||
|
{
|
||||||
|
string dest = $"{pipelineOutputDirectory}/{bundleInfo.BundleName}";
|
||||||
|
foreach (var buildAsset in bundleInfo.BuildinAssets)
|
||||||
|
{
|
||||||
|
if (buildAsset.IsRawAsset)
|
||||||
|
EditorTools.CopyFile(buildAsset.AssetPath, dest, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3625d4b8b5b79324ebf7ec19a87677e7
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
||||||
@@ -47,7 +47,27 @@ namespace YooAsset.Editor
|
|||||||
if (buildParameters.BuildMode == EBuildMode.IncrementalBuild)
|
if (buildParameters.BuildMode == EBuildMode.IncrementalBuild)
|
||||||
{
|
{
|
||||||
var buildResultContext = context.GetContextObject<TaskBuilding_SBP.BuildResultContext>();
|
var buildResultContext = context.GetContextObject<TaskBuilding_SBP.BuildResultContext>();
|
||||||
UpdateBuiltInBundleReference(patchManifest, buildResultContext.Results, buildMapContext.ShadersBundleName);
|
UpdateBuiltInBundleReference(patchManifest, buildResultContext, buildMapContext.ShadersBundleName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新资源包之间的引用关系
|
||||||
|
if (buildParameters.BuildPipeline == EBuildPipeline.ScriptableBuildPipeline)
|
||||||
|
{
|
||||||
|
if (buildParameters.BuildMode == EBuildMode.IncrementalBuild)
|
||||||
|
{
|
||||||
|
var buildResultContext = context.GetContextObject<TaskBuilding_SBP.BuildResultContext>();
|
||||||
|
UpdateScriptPipelineReference(patchManifest, buildResultContext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新资源包之间的引用关系
|
||||||
|
if (buildParameters.BuildPipeline == EBuildPipeline.BuiltinBuildPipeline)
|
||||||
|
{
|
||||||
|
if (buildParameters.BuildMode != EBuildMode.SimulateBuild)
|
||||||
|
{
|
||||||
|
var buildResultContext = context.GetContextObject<TaskBuilding.BuildResultContext>();
|
||||||
|
UpdateBuiltinPipelineReference(patchManifest, buildResultContext, buildMapContext);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,11 +184,11 @@ namespace YooAsset.Editor
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 更新Unity内置资源包的引用关系
|
/// 更新Unity内置资源包的引用关系
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void UpdateBuiltInBundleReference(PatchManifest patchManifest, IBundleBuildResults buildResults, string shadersBunldeName)
|
private void UpdateBuiltInBundleReference(PatchManifest patchManifest, TaskBuilding_SBP.BuildResultContext buildResultContext, string shadersBunldeName)
|
||||||
{
|
{
|
||||||
// 获取所有依赖着色器资源包的资源包列表
|
// 获取所有依赖着色器资源包的资源包列表
|
||||||
List<string> shaderBundleReferenceList = new List<string>();
|
List<string> shaderBundleReferenceList = new List<string>();
|
||||||
foreach (var valuePair in buildResults.BundleInfos)
|
foreach (var valuePair in buildResultContext.Results.BundleInfos)
|
||||||
{
|
{
|
||||||
if (valuePair.Value.Dependencies.Any(t => t == shadersBunldeName))
|
if (valuePair.Value.Dependencies.Any(t => t == shadersBunldeName))
|
||||||
shaderBundleReferenceList.Add(valuePair.Key);
|
shaderBundleReferenceList.Add(valuePair.Key);
|
||||||
@@ -210,5 +230,79 @@ namespace YooAsset.Editor
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新资源包之间的引用关系
|
||||||
|
/// </summary>
|
||||||
|
private void UpdateScriptPipelineReference(PatchManifest patchManifest, TaskBuilding_SBP.BuildResultContext buildResultContext)
|
||||||
|
{
|
||||||
|
foreach (var patchBundle in patchManifest.BundleList)
|
||||||
|
{
|
||||||
|
patchBundle.ReferenceIDs = GetScriptPipelineRefrenceIDs(patchManifest, patchBundle, buildResultContext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private int[] GetScriptPipelineRefrenceIDs(PatchManifest patchManifest, PatchBundle patchBundle, TaskBuilding_SBP.BuildResultContext buildResultContext)
|
||||||
|
{
|
||||||
|
if (buildResultContext.Results.BundleInfos.TryGetValue(patchBundle.BundleName, out var details) == false)
|
||||||
|
{
|
||||||
|
throw new Exception("Should never get here !");
|
||||||
|
}
|
||||||
|
|
||||||
|
List<string> referenceList = new List<string>();
|
||||||
|
foreach (var keyValuePair in buildResultContext.Results.BundleInfos)
|
||||||
|
{
|
||||||
|
string bundleName = keyValuePair.Key;
|
||||||
|
if (bundleName == patchBundle.BundleName)
|
||||||
|
continue;
|
||||||
|
if (keyValuePair.Value.Dependencies.Contains(patchBundle.BundleName))
|
||||||
|
{
|
||||||
|
referenceList.Add(bundleName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<int> result = new List<int>();
|
||||||
|
foreach (var bundleName in referenceList)
|
||||||
|
{
|
||||||
|
int bundleID = GetAssetBundleID(bundleName, patchManifest);
|
||||||
|
if (result.Contains(bundleID) == false)
|
||||||
|
result.Add(bundleID);
|
||||||
|
}
|
||||||
|
return result.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新资源包之间的引用关系
|
||||||
|
/// </summary>
|
||||||
|
private void UpdateBuiltinPipelineReference(PatchManifest patchManifest, TaskBuilding.BuildResultContext buildResultContext, BuildMapContext buildMapContext)
|
||||||
|
{
|
||||||
|
foreach (var patchBundle in patchManifest.BundleList)
|
||||||
|
{
|
||||||
|
patchBundle.ReferenceIDs = GetBuiltinPipelineRefrenceIDs(patchManifest, patchBundle, buildResultContext, buildMapContext);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private int[] GetBuiltinPipelineRefrenceIDs(PatchManifest patchManifest, PatchBundle patchBundle, TaskBuilding.BuildResultContext buildResultContext, BuildMapContext buildMapContext)
|
||||||
|
{
|
||||||
|
List<string> referenceList = new List<string>();
|
||||||
|
foreach (var bundleInfo in buildMapContext.BundleInfos)
|
||||||
|
{
|
||||||
|
string bundleName = bundleInfo.BundleName;
|
||||||
|
if (bundleName == patchBundle.BundleName)
|
||||||
|
continue;
|
||||||
|
string[] dependencies = buildResultContext.UnityManifest.GetAllDependencies(bundleName);
|
||||||
|
if (dependencies.Contains(patchBundle.BundleName))
|
||||||
|
{
|
||||||
|
referenceList.Add(bundleName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<int> result = new List<int>();
|
||||||
|
foreach (var bundleName in referenceList)
|
||||||
|
{
|
||||||
|
int bundleID = GetAssetBundleID(bundleName, patchManifest);
|
||||||
|
if (result.Contains(bundleID) == false)
|
||||||
|
result.Add(bundleID);
|
||||||
|
}
|
||||||
|
return result.ToArray();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -45,6 +45,11 @@ namespace YooAsset.Editor
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string AssetTags = string.Empty;
|
public string AssetTags = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 用户自定义数据
|
||||||
|
/// </summary>
|
||||||
|
public string UserData = string.Empty;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 收集器是否有效
|
/// 收集器是否有效
|
||||||
@@ -305,7 +310,7 @@ namespace YooAsset.Editor
|
|||||||
return string.Empty;
|
return string.Empty;
|
||||||
|
|
||||||
IAddressRule addressRuleInstance = AssetBundleCollectorSettingData.GetAddressRuleInstance(AddressRuleName);
|
IAddressRule addressRuleInstance = AssetBundleCollectorSettingData.GetAddressRuleInstance(AddressRuleName);
|
||||||
string adressValue = addressRuleInstance.GetAssetAddress(new AddressRuleData(assetPath, CollectPath, group.GroupName));
|
string adressValue = addressRuleInstance.GetAssetAddress(new AddressRuleData(assetPath, CollectPath, group.GroupName, UserData));
|
||||||
return adressValue;
|
return adressValue;
|
||||||
}
|
}
|
||||||
private string GetBundleName(CollectCommand command, AssetBundleCollectorGroup group, string assetPath)
|
private string GetBundleName(CollectCommand command, AssetBundleCollectorGroup group, string assetPath)
|
||||||
@@ -321,7 +326,7 @@ namespace YooAsset.Editor
|
|||||||
{
|
{
|
||||||
// 获取其它资源打包规则结果
|
// 获取其它资源打包规则结果
|
||||||
IPackRule packRuleInstance = AssetBundleCollectorSettingData.GetPackRuleInstance(PackRuleName);
|
IPackRule packRuleInstance = AssetBundleCollectorSettingData.GetPackRuleInstance(PackRuleName);
|
||||||
PackRuleResult packRuleResult = packRuleInstance.GetPackRuleResult(new PackRuleData(assetPath, CollectPath, group.GroupName));
|
PackRuleResult packRuleResult = packRuleInstance.GetPackRuleResult(new PackRuleData(assetPath, CollectPath, group.GroupName, UserData));
|
||||||
return packRuleResult.GetMainBundleName(command.PackageName, command.UniqueBundleName);
|
return packRuleResult.GetMainBundleName(command.PackageName, command.UniqueBundleName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace YooAsset.Editor
|
|||||||
{
|
{
|
||||||
public class AssetBundleCollectorConfig
|
public class AssetBundleCollectorConfig
|
||||||
{
|
{
|
||||||
public const string ConfigVersion = "2.2";
|
public const string ConfigVersion = "2.3";
|
||||||
|
|
||||||
public const string XmlVersion = "Version";
|
public const string XmlVersion = "Version";
|
||||||
public const string XmlCommon = "Common";
|
public const string XmlCommon = "Common";
|
||||||
@@ -34,6 +34,7 @@ namespace YooAsset.Editor
|
|||||||
public const string XmlAddressRule = "AddressRule";
|
public const string XmlAddressRule = "AddressRule";
|
||||||
public const string XmlPackRule = "PackRule";
|
public const string XmlPackRule = "PackRule";
|
||||||
public const string XmlFilterRule = "FilterRule";
|
public const string XmlFilterRule = "FilterRule";
|
||||||
|
public const string XmlUserData = "UserData";
|
||||||
public const string XmlAssetTags = "AssetTags";
|
public const string XmlAssetTags = "AssetTags";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -137,6 +138,8 @@ namespace YooAsset.Editor
|
|||||||
throw new Exception($"Not found attribute {XmlPackRule} in {XmlCollector}");
|
throw new Exception($"Not found attribute {XmlPackRule} in {XmlCollector}");
|
||||||
if (collectorElement.HasAttribute(XmlFilterRule) == false)
|
if (collectorElement.HasAttribute(XmlFilterRule) == false)
|
||||||
throw new Exception($"Not found attribute {XmlFilterRule} in {XmlCollector}");
|
throw new Exception($"Not found attribute {XmlFilterRule} in {XmlCollector}");
|
||||||
|
if (collectorElement.HasAttribute(XmlUserData) == false)
|
||||||
|
throw new Exception($"Not found attribute {XmlUserData} in {XmlCollector}");
|
||||||
if (collectorElement.HasAttribute(XmlAssetTags) == false)
|
if (collectorElement.HasAttribute(XmlAssetTags) == false)
|
||||||
throw new Exception($"Not found attribute {XmlAssetTags} in {XmlCollector}");
|
throw new Exception($"Not found attribute {XmlAssetTags} in {XmlCollector}");
|
||||||
|
|
||||||
@@ -147,6 +150,7 @@ namespace YooAsset.Editor
|
|||||||
collector.AddressRuleName = collectorElement.GetAttribute(XmlAddressRule);
|
collector.AddressRuleName = collectorElement.GetAttribute(XmlAddressRule);
|
||||||
collector.PackRuleName = collectorElement.GetAttribute(XmlPackRule);
|
collector.PackRuleName = collectorElement.GetAttribute(XmlPackRule);
|
||||||
collector.FilterRuleName = collectorElement.GetAttribute(XmlFilterRule);
|
collector.FilterRuleName = collectorElement.GetAttribute(XmlFilterRule);
|
||||||
|
collector.UserData = collectorElement.GetAttribute(XmlUserData);
|
||||||
collector.AssetTags = collectorElement.GetAttribute(XmlAssetTags);
|
collector.AssetTags = collectorElement.GetAttribute(XmlAssetTags);
|
||||||
group.Collectors.Add(collector);
|
group.Collectors.Add(collector);
|
||||||
}
|
}
|
||||||
@@ -219,6 +223,7 @@ namespace YooAsset.Editor
|
|||||||
collectorElement.SetAttribute(XmlAddressRule, collector.AddressRuleName);
|
collectorElement.SetAttribute(XmlAddressRule, collector.AddressRuleName);
|
||||||
collectorElement.SetAttribute(XmlPackRule, collector.PackRuleName);
|
collectorElement.SetAttribute(XmlPackRule, collector.PackRuleName);
|
||||||
collectorElement.SetAttribute(XmlFilterRule, collector.FilterRuleName);
|
collectorElement.SetAttribute(XmlFilterRule, collector.FilterRuleName);
|
||||||
|
collectorElement.SetAttribute(XmlUserData, collector.UserData);
|
||||||
collectorElement.SetAttribute(XmlAssetTags, collector.AssetTags);
|
collectorElement.SetAttribute(XmlAssetTags, collector.AssetTags);
|
||||||
groupElement.AppendChild(collectorElement);
|
groupElement.AppendChild(collectorElement);
|
||||||
}
|
}
|
||||||
@@ -320,6 +325,28 @@ namespace YooAsset.Editor
|
|||||||
return UpdateXmlConfig(xmlDoc);
|
return UpdateXmlConfig(xmlDoc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2.2 -> 2.3
|
||||||
|
if (configVersion == "2.2")
|
||||||
|
{
|
||||||
|
// 获取所有分组元素
|
||||||
|
var groupNodeList = root.GetElementsByTagName(XmlGroup);
|
||||||
|
foreach (var groupNode in groupNodeList)
|
||||||
|
{
|
||||||
|
XmlElement groupElement = groupNode as XmlElement;
|
||||||
|
var collectorNodeList = groupElement.GetElementsByTagName(XmlCollector);
|
||||||
|
foreach (var collectorNode in collectorNodeList)
|
||||||
|
{
|
||||||
|
XmlElement collectorElement = collectorNode as XmlElement;
|
||||||
|
if (collectorElement.HasAttribute(XmlUserData) == false)
|
||||||
|
collectorElement.SetAttribute(XmlUserData, string.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新版本
|
||||||
|
root.SetAttribute(XmlVersion, "2.3");
|
||||||
|
return UpdateXmlConfig(xmlDoc);
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ namespace YooAsset.Editor
|
|||||||
List<Type> types = new List<Type>(100)
|
List<Type> types = new List<Type>(100)
|
||||||
{
|
{
|
||||||
typeof(AddressByFileName),
|
typeof(AddressByFileName),
|
||||||
typeof(AddressByCollectorAndFileName),
|
typeof(AddressByFolderAndFileName),
|
||||||
typeof(AddressByGroupAndFileName)
|
typeof(AddressByGroupAndFileName)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -594,14 +594,14 @@ namespace YooAsset.Editor
|
|||||||
var popupField = new PopupField<RuleDisplayName>(_addressRuleList, 0);
|
var popupField = new PopupField<RuleDisplayName>(_addressRuleList, 0);
|
||||||
popupField.name = "PopupField1";
|
popupField.name = "PopupField1";
|
||||||
popupField.style.unityTextAlign = TextAnchor.MiddleLeft;
|
popupField.style.unityTextAlign = TextAnchor.MiddleLeft;
|
||||||
popupField.style.width = 200;
|
popupField.style.width = 220;
|
||||||
elementBottom.Add(popupField);
|
elementBottom.Add(popupField);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
var popupField = new PopupField<RuleDisplayName>(_packRuleList, 0);
|
var popupField = new PopupField<RuleDisplayName>(_packRuleList, 0);
|
||||||
popupField.name = "PopupField2";
|
popupField.name = "PopupField2";
|
||||||
popupField.style.unityTextAlign = TextAnchor.MiddleLeft;
|
popupField.style.unityTextAlign = TextAnchor.MiddleLeft;
|
||||||
popupField.style.width = 230;
|
popupField.style.width = 220;
|
||||||
elementBottom.Add(popupField);
|
elementBottom.Add(popupField);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -611,6 +611,15 @@ namespace YooAsset.Editor
|
|||||||
popupField.style.width = 150;
|
popupField.style.width = 150;
|
||||||
elementBottom.Add(popupField);
|
elementBottom.Add(popupField);
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
var textField = new TextField();
|
||||||
|
textField.name = "TextField0";
|
||||||
|
textField.label = "UserData";
|
||||||
|
textField.style.width = 200;
|
||||||
|
elementBottom.Add(textField);
|
||||||
|
var label = textField.Q<Label>();
|
||||||
|
label.style.minWidth = 63;
|
||||||
|
}
|
||||||
{
|
{
|
||||||
var textField = new TextField();
|
var textField = new TextField();
|
||||||
textField.name = "TextField1";
|
textField.name = "TextField1";
|
||||||
@@ -750,6 +759,15 @@ namespace YooAsset.Editor
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// UserData
|
||||||
|
var textFiled0 = element.Q<TextField>("TextField0");
|
||||||
|
textFiled0.SetValueWithoutNotify(collector.UserData);
|
||||||
|
textFiled0.RegisterValueChangedCallback(evt =>
|
||||||
|
{
|
||||||
|
collector.UserData = evt.newValue;
|
||||||
|
AssetBundleCollectorSettingData.ModifyCollector(selectGroup, collector);
|
||||||
|
});
|
||||||
|
|
||||||
// Tags
|
// Tags
|
||||||
var textFiled1 = element.Q<TextField>("TextField1");
|
var textFiled1 = element.Q<TextField>("TextField1");
|
||||||
textFiled1.SetValueWithoutNotify(collector.AssetTags);
|
textFiled1.SetValueWithoutNotify(collector.AssetTags);
|
||||||
@@ -796,7 +814,7 @@ namespace YooAsset.Editor
|
|||||||
if (_enableAddressableToogle.value)
|
if (_enableAddressableToogle.value)
|
||||||
{
|
{
|
||||||
IAddressRule instance = AssetBundleCollectorSettingData.GetAddressRuleInstance(collector.AddressRuleName);
|
IAddressRule instance = AssetBundleCollectorSettingData.GetAddressRuleInstance(collector.AddressRuleName);
|
||||||
AddressRuleData ruleData = new AddressRuleData(collectAssetInfo.AssetPath, collector.CollectPath, group.GroupName);
|
AddressRuleData ruleData = new AddressRuleData(collectAssetInfo.AssetPath, collector.CollectPath, group.GroupName, collector.UserData);
|
||||||
string addressValue = instance.GetAssetAddress(ruleData);
|
string addressValue = instance.GetAssetAddress(ruleData);
|
||||||
showInfo = $"[{addressValue}] {showInfo}";
|
showInfo = $"[{addressValue}] {showInfo}";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
namespace YooAsset.Editor
|
namespace YooAsset.Editor
|
||||||
{
|
{
|
||||||
[DisplayName("以文件名称为定位地址")]
|
[DisplayName("定位地址: 文件名")]
|
||||||
public class AddressByFileName : IAddressRule
|
public class AddressByFileName : IAddressRule
|
||||||
{
|
{
|
||||||
string IAddressRule.GetAssetAddress(AddressRuleData data)
|
string IAddressRule.GetAssetAddress(AddressRuleData data)
|
||||||
@@ -11,7 +11,7 @@ namespace YooAsset.Editor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[DisplayName("以分组名称+文件名称为定位地址")]
|
[DisplayName("定位地址: 分组名+文件名")]
|
||||||
public class AddressByGroupAndFileName : IAddressRule
|
public class AddressByGroupAndFileName : IAddressRule
|
||||||
{
|
{
|
||||||
string IAddressRule.GetAssetAddress(AddressRuleData data)
|
string IAddressRule.GetAssetAddress(AddressRuleData data)
|
||||||
@@ -21,8 +21,8 @@ namespace YooAsset.Editor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[DisplayName("以收集器名称+文件名称为定位地址")]
|
[DisplayName("定位地址: 文件夹名+文件名")]
|
||||||
public class AddressByCollectorAndFileName : IAddressRule
|
public class AddressByFolderAndFileName : IAddressRule
|
||||||
{
|
{
|
||||||
string IAddressRule.GetAssetAddress(AddressRuleData data)
|
string IAddressRule.GetAssetAddress(AddressRuleData data)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ namespace YooAsset.Editor
|
|||||||
/// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets_uipanel_shop_image_backgroud.bundle"
|
/// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets_uipanel_shop_image_backgroud.bundle"
|
||||||
/// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets_uipanel_shop_view_main.bundle"
|
/// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets_uipanel_shop_view_main.bundle"
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DisplayName("以文件路径作为资源包名")]
|
[DisplayName("资源包名: 文件路径")]
|
||||||
public class PackSeparately : IPackRule
|
public class PackSeparately : IPackRule
|
||||||
{
|
{
|
||||||
PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
|
PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
|
||||||
@@ -57,7 +57,7 @@ namespace YooAsset.Editor
|
|||||||
/// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets_uipanel_shop_image.bundle"
|
/// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets_uipanel_shop_image.bundle"
|
||||||
/// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets_uipanel_shop_view.bundle"
|
/// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets_uipanel_shop_view.bundle"
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DisplayName("以父类文件夹路径作为资源包名")]
|
[DisplayName("资源包名: 父类文件夹路径")]
|
||||||
public class PackDirectory : IPackRule
|
public class PackDirectory : IPackRule
|
||||||
{
|
{
|
||||||
public static PackDirectory StaticPackRule = new PackDirectory();
|
public static PackDirectory StaticPackRule = new PackDirectory();
|
||||||
@@ -82,7 +82,7 @@ namespace YooAsset.Editor
|
|||||||
/// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets_uipanel_shop.bundle"
|
/// 例如:"Assets/UIPanel/Shop/Image/backgroud.png" --> "assets_uipanel_shop.bundle"
|
||||||
/// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets_uipanel_shop.bundle"
|
/// 例如:"Assets/UIPanel/Shop/View/main.prefab" --> "assets_uipanel_shop.bundle"
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DisplayName("以收集器路径下顶级文件夹为资源包名")]
|
[DisplayName("资源包名: 收集器下顶级文件夹路径")]
|
||||||
public class PackTopDirectory : IPackRule
|
public class PackTopDirectory : IPackRule
|
||||||
{
|
{
|
||||||
PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
|
PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
|
||||||
@@ -114,7 +114,7 @@ namespace YooAsset.Editor
|
|||||||
/// 以收集器路径作为资源包名
|
/// 以收集器路径作为资源包名
|
||||||
/// 注意:收集的所有文件打进一个资源包
|
/// 注意:收集的所有文件打进一个资源包
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DisplayName("以收集器路径作为资源包名")]
|
[DisplayName("资源包名: 收集器路径")]
|
||||||
public class PackCollector : IPackRule
|
public class PackCollector : IPackRule
|
||||||
{
|
{
|
||||||
PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
|
PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
|
||||||
@@ -144,7 +144,7 @@ namespace YooAsset.Editor
|
|||||||
/// 以分组名称作为资源包名
|
/// 以分组名称作为资源包名
|
||||||
/// 注意:收集的所有文件打进一个资源包
|
/// 注意:收集的所有文件打进一个资源包
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DisplayName("以分组名称作为资源包名")]
|
[DisplayName("资源包名: 分组名称")]
|
||||||
public class PackGroup : IPackRule
|
public class PackGroup : IPackRule
|
||||||
{
|
{
|
||||||
PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
|
PackRuleResult IPackRule.GetPackRuleResult(PackRuleData data)
|
||||||
@@ -162,7 +162,6 @@ namespace YooAsset.Editor
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 打包原生文件
|
/// 打包原生文件
|
||||||
/// 注意:原生文件打包支持:图片,音频,视频,文本
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DisplayName("打包原生文件")]
|
[DisplayName("打包原生文件")]
|
||||||
public class PackRawFile : IPackRule
|
public class PackRawFile : IPackRule
|
||||||
@@ -183,7 +182,7 @@ namespace YooAsset.Editor
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 打包着色器变种集合
|
/// 打包着色器变种集合
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DisplayName("打包着色器变种集合")]
|
[DisplayName("打包着色器变种集合文件")]
|
||||||
public class PackShaderVariants : IPackRule
|
public class PackShaderVariants : IPackRule
|
||||||
{
|
{
|
||||||
public PackRuleResult GetPackRuleResult(PackRuleData data)
|
public PackRuleResult GetPackRuleResult(PackRuleData data)
|
||||||
|
|||||||
@@ -6,12 +6,14 @@ namespace YooAsset.Editor
|
|||||||
public string AssetPath;
|
public string AssetPath;
|
||||||
public string CollectPath;
|
public string CollectPath;
|
||||||
public string GroupName;
|
public string GroupName;
|
||||||
|
public string UserData;
|
||||||
|
|
||||||
public AddressRuleData(string assetPath, string collectPath, string groupName)
|
public AddressRuleData(string assetPath, string collectPath, string groupName, string userData)
|
||||||
{
|
{
|
||||||
AssetPath = assetPath;
|
AssetPath = assetPath;
|
||||||
CollectPath = collectPath;
|
CollectPath = collectPath;
|
||||||
GroupName = groupName;
|
GroupName = groupName;
|
||||||
|
UserData = userData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,18 +6,21 @@ namespace YooAsset.Editor
|
|||||||
public string AssetPath;
|
public string AssetPath;
|
||||||
public string CollectPath;
|
public string CollectPath;
|
||||||
public string GroupName;
|
public string GroupName;
|
||||||
|
public string UserData;
|
||||||
|
|
||||||
public PackRuleData(string assetPath)
|
public PackRuleData(string assetPath)
|
||||||
{
|
{
|
||||||
AssetPath = assetPath;
|
AssetPath = assetPath;
|
||||||
CollectPath = string.Empty;
|
CollectPath = string.Empty;
|
||||||
GroupName = string.Empty;
|
GroupName = string.Empty;
|
||||||
|
UserData = string.Empty;
|
||||||
}
|
}
|
||||||
public PackRuleData(string assetPath, string collectPath, string groupName)
|
public PackRuleData(string assetPath, string collectPath, string groupName, string userData)
|
||||||
{
|
{
|
||||||
AssetPath = assetPath;
|
AssetPath = assetPath;
|
||||||
CollectPath = collectPath;
|
CollectPath = collectPath;
|
||||||
GroupName = groupName;
|
GroupName = groupName;
|
||||||
|
UserData = userData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ namespace YooAsset.Editor
|
|||||||
private TemplateContainer _root;
|
private TemplateContainer _root;
|
||||||
|
|
||||||
private ListView _listView;
|
private ListView _listView;
|
||||||
private BuildReport _buildReport;
|
|
||||||
private readonly List<ItemWrapper> _items = new List<ItemWrapper>();
|
private readonly List<ItemWrapper> _items = new List<ItemWrapper>();
|
||||||
|
|
||||||
|
|
||||||
@@ -55,14 +54,12 @@ namespace YooAsset.Editor
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void FillViewData(BuildReport buildReport)
|
public void FillViewData(BuildReport buildReport)
|
||||||
{
|
{
|
||||||
_buildReport = buildReport;
|
|
||||||
|
|
||||||
_items.Clear();
|
_items.Clear();
|
||||||
|
|
||||||
_items.Add(new ItemWrapper("YooAsset版本", buildReport.Summary.YooVersion));
|
_items.Add(new ItemWrapper("YooAsset版本", buildReport.Summary.YooVersion));
|
||||||
_items.Add(new ItemWrapper("引擎版本", buildReport.Summary.UnityVersion));
|
_items.Add(new ItemWrapper("引擎版本", buildReport.Summary.UnityVersion));
|
||||||
_items.Add(new ItemWrapper("构建时间", buildReport.Summary.BuildDate));
|
_items.Add(new ItemWrapper("构建时间", buildReport.Summary.BuildDate));
|
||||||
_items.Add(new ItemWrapper("构建耗时", $"{buildReport.Summary.BuildSeconds}秒"));
|
_items.Add(new ItemWrapper("构建耗时", ConvertTime(buildReport.Summary.BuildSeconds)));
|
||||||
_items.Add(new ItemWrapper("构建平台", $"{buildReport.Summary.BuildTarget}"));
|
_items.Add(new ItemWrapper("构建平台", $"{buildReport.Summary.BuildTarget}"));
|
||||||
_items.Add(new ItemWrapper("构建管线", $"{buildReport.Summary.BuildPipeline}"));
|
_items.Add(new ItemWrapper("构建管线", $"{buildReport.Summary.BuildPipeline}"));
|
||||||
_items.Add(new ItemWrapper("构建模式", $"{buildReport.Summary.BuildMode}"));
|
_items.Add(new ItemWrapper("构建模式", $"{buildReport.Summary.BuildMode}"));
|
||||||
@@ -154,16 +151,23 @@ namespace YooAsset.Editor
|
|||||||
label2.text = itemWrapper.Value;
|
label2.text = itemWrapper.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string ConvertTime(int time)
|
||||||
|
{
|
||||||
|
if (time <= 60)
|
||||||
|
{
|
||||||
|
return $"{time}秒钟";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int minute = time / 60;
|
||||||
|
return $"{minute}分钟";
|
||||||
|
}
|
||||||
|
}
|
||||||
private string ConvertSize(long size)
|
private string ConvertSize(long size)
|
||||||
{
|
{
|
||||||
if (size == 0)
|
if (size == 0)
|
||||||
return "0";
|
return "0";
|
||||||
if (size < 1024)
|
return EditorUtility.FormatBytes(size);
|
||||||
return $"{size} Bytes";
|
|
||||||
else if (size < 1024 * 1024)
|
|
||||||
return $"{(int)(size / 1024)} KB";
|
|
||||||
else
|
|
||||||
return $"{(int)(size / (1024 * 1024))} MB";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -341,6 +341,14 @@ namespace YooAsset
|
|||||||
_providers.Remove(provider);
|
_providers.Remove(provider);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
internal bool CheckBundleCanDestroy(int bundleID)
|
||||||
|
{
|
||||||
|
string bundleName = BundleServices.GetBundleName(bundleID);
|
||||||
|
BundleLoaderBase loader = TryGetAssetBundleLoader(bundleName);
|
||||||
|
if (loader == null)
|
||||||
|
return true;
|
||||||
|
return loader.CanDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
private BundleLoaderBase CreateAssetBundleLoaderInternal(BundleInfo bundleInfo)
|
private BundleLoaderBase CreateAssetBundleLoaderInternal(BundleInfo bundleInfo)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -122,6 +122,15 @@ namespace YooAsset
|
|||||||
if (RefCount > _providers.Count)
|
if (RefCount > _providers.Count)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// 条件3:检查依赖链上的资源包
|
||||||
|
// 依赖该资源包的所有资源包可以销毁
|
||||||
|
// 注意:互相引用的资源包无法卸载!
|
||||||
|
foreach (var bundleID in MainBundleInfo.Bundle.ReferenceIDs)
|
||||||
|
{
|
||||||
|
if (Impl.CheckBundleCanDestroy(bundleID) == false)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 销毁所有Providers
|
// 销毁所有Providers
|
||||||
foreach (var provider in _providers)
|
foreach (var provider in _providers)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ namespace YooAsset
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 初始化时的验证级别
|
/// 初始化时的验证级别
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static EVerifyLevel InitVerifyLevel { set; get; } = EVerifyLevel.Low;
|
public static EVerifyLevel InitVerifyLevel { set; get; } = EVerifyLevel.Middle;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 清空所有数据
|
/// 清空所有数据
|
||||||
@@ -37,6 +37,7 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static void RecordFile(string packageName, string cacheGUID, PackageCache.RecordWrapper wrapper)
|
public static void RecordFile(string packageName, string cacheGUID, PackageCache.RecordWrapper wrapper)
|
||||||
{
|
{
|
||||||
|
//YooLogger.Log($"Record file : {packageName} = {cacheGUID}");
|
||||||
var cache = GetOrCreateCache(packageName);
|
var cache = GetOrCreateCache(packageName);
|
||||||
cache.Record(cacheGUID, wrapper);
|
cache.Record(cacheGUID, wrapper);
|
||||||
}
|
}
|
||||||
@@ -69,31 +70,41 @@ namespace YooAsset
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 验证缓存文件(子线程内操作)
|
/// 验证缓存文件(子线程内操作)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static EVerifyResult VerifyingCacheFile(VerifyElement element, EVerifyLevel verifyLevel)
|
public static EVerifyResult VerifyingCacheFile(VerifyElement element)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string infoFilePath = element.InfoFilePath;
|
if (InitVerifyLevel == EVerifyLevel.Low)
|
||||||
if (File.Exists(infoFilePath) == false)
|
{
|
||||||
return EVerifyResult.InfoFileNotExisted;
|
if (File.Exists(element.InfoFilePath) == false)
|
||||||
|
return EVerifyResult.InfoFileNotExisted;
|
||||||
|
if (File.Exists(element.DataFilePath) == false)
|
||||||
|
return EVerifyResult.DataFileNotExisted;
|
||||||
|
return EVerifyResult.Succeed;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (File.Exists(element.InfoFilePath) == false)
|
||||||
|
return EVerifyResult.InfoFileNotExisted;
|
||||||
|
|
||||||
// 解析信息文件获取验证数据
|
// 解析信息文件获取验证数据
|
||||||
CacheFileInfo.ReadInfoFromFile(infoFilePath, out element.DataFileCRC, out element.DataFileSize);
|
CacheFileInfo.ReadInfoFromFile(element.InfoFilePath, out element.DataFileCRC, out element.DataFileSize);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
return EVerifyResult.Exception;
|
return EVerifyResult.Exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
return VerifyingInternal(element.DataFilePath, element.DataFileSize, element.DataFileCRC, verifyLevel);
|
return VerifyingInternal(element.DataFilePath, element.DataFileSize, element.DataFileCRC, InitVerifyLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 验证下载文件
|
/// 验证下载文件
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static EVerifyResult VerifyingTempFile(PatchBundle patchBundle, EVerifyLevel verifyLevel)
|
public static EVerifyResult VerifyingTempFile(PatchBundle patchBundle)
|
||||||
{
|
{
|
||||||
return VerifyingInternal(patchBundle.TempDataFilePath, patchBundle.FileSize, patchBundle.FileCRC, verifyLevel);
|
return VerifyingInternal(patchBundle.TempDataFilePath, patchBundle.FileSize, patchBundle.FileCRC, EVerifyLevel.High);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -7,10 +7,15 @@ namespace YooAsset
|
|||||||
public enum EVerifyLevel
|
public enum EVerifyLevel
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 验证文件大小
|
/// 验证文件存在
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Low,
|
Low,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 验证文件大小
|
||||||
|
/// </summary>
|
||||||
|
Middle,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 验证文件大小和CRC
|
/// 验证文件大小和CRC
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -67,8 +67,23 @@ namespace YooAsset
|
|||||||
if (CacheSystem.IsCached(_packageName, cacheGUID))
|
if (CacheSystem.IsCached(_packageName, cacheGUID))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// 获取数据文件的后缀名
|
||||||
|
string dataFileExtension = string.Empty;
|
||||||
|
var fileInfos = fileFoder.GetFiles();
|
||||||
|
foreach (var fileInfo in fileInfos)
|
||||||
|
{
|
||||||
|
if (fileInfo.Extension == ".temp")
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (fileInfo.Name.StartsWith(YooAssetSettings.CacheBundleDataFileName))
|
||||||
|
{
|
||||||
|
dataFileExtension = fileInfo.Extension;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
string fileRootPath = fileFoder.FullName;
|
string fileRootPath = fileFoder.FullName;
|
||||||
string dataFilePath = $"{fileRootPath}/{ YooAssetSettings.CacheBundleDataFileName}";
|
string dataFilePath = $"{fileRootPath}/{ YooAssetSettings.CacheBundleDataFileName}{dataFileExtension}";
|
||||||
string infoFilePath = $"{fileRootPath}/{ YooAssetSettings.CacheBundleInfoFileName}";
|
string infoFilePath = $"{fileRootPath}/{ YooAssetSettings.CacheBundleInfoFileName}";
|
||||||
VerifyElement element = new VerifyElement(_packageName, cacheGUID, fileRootPath, dataFilePath, infoFilePath);
|
VerifyElement element = new VerifyElement(_packageName, cacheGUID, fileRootPath, dataFilePath, infoFilePath);
|
||||||
result.Add(element);
|
result.Add(element);
|
||||||
|
|||||||
@@ -121,7 +121,7 @@ namespace YooAsset
|
|||||||
private void VerifyInThread(object obj)
|
private void VerifyInThread(object obj)
|
||||||
{
|
{
|
||||||
VerifyElement element = (VerifyElement)obj;
|
VerifyElement element = (VerifyElement)obj;
|
||||||
element.Result = CacheSystem.VerifyingCacheFile(element, CacheSystem.InitVerifyLevel);
|
element.Result = CacheSystem.VerifyingCacheFile(element);
|
||||||
_syncContext.Post(VerifyCallback, element);
|
_syncContext.Post(VerifyCallback, element);
|
||||||
}
|
}
|
||||||
private void VerifyCallback(object obj)
|
private void VerifyCallback(object obj)
|
||||||
@@ -139,12 +139,8 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
_failedCount++;
|
_failedCount++;
|
||||||
|
|
||||||
// 删除验证失败的缓存文件
|
YooLogger.Warning($"Failed verify file and delete files : {element.FileRootPath}");
|
||||||
if (Directory.Exists(element.FileRootPath))
|
element.DeleteFiles();
|
||||||
{
|
|
||||||
YooLogger.Warning($"Failed verify file and delete files : {element.FileRootPath}");
|
|
||||||
Directory.Delete(element.FileRootPath, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -235,7 +231,7 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
private void BeginVerifyFileWithoutThread(VerifyElement element)
|
private void BeginVerifyFileWithoutThread(VerifyElement element)
|
||||||
{
|
{
|
||||||
element.Result = CacheSystem.VerifyingCacheFile(element, CacheSystem.InitVerifyLevel);
|
element.Result = CacheSystem.VerifyingCacheFile(element);
|
||||||
if (element.Result == EVerifyResult.Succeed)
|
if (element.Result == EVerifyResult.Succeed)
|
||||||
{
|
{
|
||||||
_succeedCount++;
|
_succeedCount++;
|
||||||
@@ -246,12 +242,8 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
_failedCount++;
|
_failedCount++;
|
||||||
|
|
||||||
// 删除验证失败的缓存文件
|
YooLogger.Warning($"Failed verify file and delete files : {element.FileRootPath}");
|
||||||
if (Directory.Exists(element.FileRootPath))
|
element.DeleteFiles();
|
||||||
{
|
|
||||||
YooLogger.Warning($"Failed verify file and delete files : {element.FileRootPath}");
|
|
||||||
Directory.Delete(element.FileRootPath, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
|
using System.IO;
|
||||||
|
|
||||||
namespace YooAsset
|
namespace YooAsset
|
||||||
{
|
{
|
||||||
internal class VerifyElement
|
internal class VerifyElement
|
||||||
@@ -21,5 +22,18 @@ namespace YooAsset
|
|||||||
DataFilePath = dataFilePath;
|
DataFilePath = dataFilePath;
|
||||||
InfoFilePath = infoFilePath;
|
InfoFilePath = infoFilePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void DeleteFiles()
|
||||||
|
{
|
||||||
|
if (File.Exists(DataFilePath))
|
||||||
|
{
|
||||||
|
File.Delete(DataFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (File.Exists(InfoFilePath))
|
||||||
|
{
|
||||||
|
File.Delete(InfoFilePath);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -37,7 +37,7 @@ namespace YooAsset
|
|||||||
// 检测本地临时文件
|
// 检测本地临时文件
|
||||||
if (_steps == ESteps.CheckTempFile)
|
if (_steps == ESteps.CheckTempFile)
|
||||||
{
|
{
|
||||||
var verifyResult = CacheSystem.VerifyingTempFile(_bundleInfo.Bundle, EVerifyLevel.High);
|
var verifyResult = CacheSystem.VerifyingTempFile(_bundleInfo.Bundle);
|
||||||
if (verifyResult == EVerifyResult.Succeed)
|
if (verifyResult == EVerifyResult.Succeed)
|
||||||
{
|
{
|
||||||
_steps = ESteps.CachingFile;
|
_steps = ESteps.CachingFile;
|
||||||
@@ -198,7 +198,7 @@ namespace YooAsset
|
|||||||
// 验证下载文件
|
// 验证下载文件
|
||||||
if (_steps == ESteps.VerifyingFile)
|
if (_steps == ESteps.VerifyingFile)
|
||||||
{
|
{
|
||||||
var verifyResult = CacheSystem.VerifyingTempFile(_bundleInfo.Bundle, EVerifyLevel.High);
|
var verifyResult = CacheSystem.VerifyingTempFile(_bundleInfo.Bundle);
|
||||||
if (verifyResult == EVerifyResult.Succeed)
|
if (verifyResult == EVerifyResult.Succeed)
|
||||||
{
|
{
|
||||||
_steps = ESteps.CachingFile;
|
_steps = ESteps.CachingFile;
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ namespace YooAsset
|
|||||||
patchBundle.IsRawFile = _buffer.ReadBool();
|
patchBundle.IsRawFile = _buffer.ReadBool();
|
||||||
patchBundle.LoadMethod = _buffer.ReadByte();
|
patchBundle.LoadMethod = _buffer.ReadByte();
|
||||||
patchBundle.Tags = _buffer.ReadUTF8Array();
|
patchBundle.Tags = _buffer.ReadUTF8Array();
|
||||||
|
patchBundle.ReferenceIDs = _buffer.ReadInt32Array();
|
||||||
Manifest.BundleList.Add(patchBundle);
|
Manifest.BundleList.Add(patchBundle);
|
||||||
|
|
||||||
patchBundle.ParseBundle(Manifest.PackageName, Manifest.OutputNameStyle);
|
patchBundle.ParseBundle(Manifest.PackageName, Manifest.OutputNameStyle);
|
||||||
|
|||||||
@@ -41,6 +41,11 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string[] Tags;
|
public string[] Tags;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 引用该资源包的ID列表
|
||||||
|
/// </summary>
|
||||||
|
public int[] ReferenceIDs;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 所属的包裹名称
|
/// 所属的包裹名称
|
||||||
@@ -67,7 +72,7 @@ namespace YooAsset
|
|||||||
return _cachedDataFilePath;
|
return _cachedDataFilePath;
|
||||||
|
|
||||||
string cacheRoot = PersistentHelper.GetCacheFolderPath(PackageName);
|
string cacheRoot = PersistentHelper.GetCacheFolderPath(PackageName);
|
||||||
_cachedDataFilePath = $"{cacheRoot}/{CacheGUID}/{YooAssetSettings.CacheBundleDataFileName}";
|
_cachedDataFilePath = $"{cacheRoot}/{CacheGUID}/{YooAssetSettings.CacheBundleDataFileName}{_fileExtension}";
|
||||||
return _cachedDataFilePath;
|
return _cachedDataFilePath;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -220,6 +220,22 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取资源包名称
|
||||||
|
/// </summary>
|
||||||
|
public string GetBundleName(int bundleID)
|
||||||
|
{
|
||||||
|
if (bundleID >= 0 && bundleID < BundleList.Count)
|
||||||
|
{
|
||||||
|
var patchBundle = BundleList[bundleID];
|
||||||
|
return patchBundle.BundleName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new Exception($"Invalid bundle id : {bundleID}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 尝试获取补丁资源
|
/// 尝试获取补丁资源
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ namespace YooAsset
|
|||||||
buffer.WriteBool(patchBundle.IsRawFile);
|
buffer.WriteBool(patchBundle.IsRawFile);
|
||||||
buffer.WriteByte(patchBundle.LoadMethod);
|
buffer.WriteByte(patchBundle.LoadMethod);
|
||||||
buffer.WriteUTF8Array(patchBundle.Tags);
|
buffer.WriteUTF8Array(patchBundle.Tags);
|
||||||
|
buffer.WriteInt32Array(patchBundle.ReferenceIDs);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 写入文件流
|
// 写入文件流
|
||||||
@@ -127,6 +128,7 @@ namespace YooAsset
|
|||||||
patchBundle.IsRawFile = buffer.ReadBool();
|
patchBundle.IsRawFile = buffer.ReadBool();
|
||||||
patchBundle.LoadMethod = buffer.ReadByte();
|
patchBundle.LoadMethod = buffer.ReadByte();
|
||||||
patchBundle.Tags = buffer.ReadUTF8Array();
|
patchBundle.Tags = buffer.ReadUTF8Array();
|
||||||
|
patchBundle.ReferenceIDs = buffer.ReadInt32Array();
|
||||||
manifest.BundleList.Add(patchBundle);
|
manifest.BundleList.Add(patchBundle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,6 +95,10 @@ namespace YooAsset
|
|||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
string IBundleServices.GetBundleName(int bundleID)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
bool IBundleServices.IsServicesValid()
|
bool IBundleServices.IsServicesValid()
|
||||||
{
|
{
|
||||||
return _activeManifest != null;
|
return _activeManifest != null;
|
||||||
|
|||||||
@@ -330,6 +330,10 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
return result.ToArray();
|
return result.ToArray();
|
||||||
}
|
}
|
||||||
|
string IBundleServices.GetBundleName(int bundleID)
|
||||||
|
{
|
||||||
|
return _activeManifest.GetBundleName(bundleID);
|
||||||
|
}
|
||||||
bool IBundleServices.IsServicesValid()
|
bool IBundleServices.IsServicesValid()
|
||||||
{
|
{
|
||||||
return _activeManifest != null;
|
return _activeManifest != null;
|
||||||
|
|||||||
@@ -123,6 +123,10 @@ namespace YooAsset
|
|||||||
}
|
}
|
||||||
return result.ToArray();
|
return result.ToArray();
|
||||||
}
|
}
|
||||||
|
string IBundleServices.GetBundleName(int bundleID)
|
||||||
|
{
|
||||||
|
return _activeManifest.GetBundleName(bundleID);
|
||||||
|
}
|
||||||
bool IBundleServices.IsServicesValid()
|
bool IBundleServices.IsServicesValid()
|
||||||
{
|
{
|
||||||
return _activeManifest != null;
|
return _activeManifest != null;
|
||||||
|
|||||||
@@ -13,6 +13,11 @@ namespace YooAsset
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
BundleInfo[] GetAllDependBundleInfos(AssetInfo assetPath);
|
BundleInfo[] GetAllDependBundleInfos(AssetInfo assetPath);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取资源包名称
|
||||||
|
/// </summary>
|
||||||
|
string GetBundleName(int bundleID);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 服务接口是否有效
|
/// 服务接口是否有效
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ namespace YooAsset
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 清单文件格式版本
|
/// 清单文件格式版本
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const string PatchManifestFileVersion = "1.4.0";
|
public const string PatchManifestFileVersion = "1.4.6";
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<root Version="2.2">
|
<root Version="2.3">
|
||||||
<Common AutoAddressable="True" UniqueBundleName="False" ShowPackageView="False" ShowEditorAlias="False" />
|
<Common AutoAddressable="True" UniqueBundleName="False" ShowPackageView="False" ShowEditorAlias="False" />
|
||||||
<Package PackageName="DefaultPackage" PackageDesc="">
|
<Package PackageName="DefaultPackage" PackageDesc="">
|
||||||
<Group GroupName="battle" GroupDesc="" AssetTags="">
|
<Group GroupName="battle" GroupDesc="" AssetTags="">
|
||||||
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/Effect" CollectGUID="80d76514758554baaa96a9efffe9f3ef" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackDirectory" FilterRule="CollectAll" AssetTags="" />
|
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/Effect" CollectGUID="80d76514758554baaa96a9efffe9f3ef" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackDirectory" FilterRule="CollectAll" UserData="" AssetTags="" />
|
||||||
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/Entity" CollectGUID="4d7c84745db8e884f8020a8c5356e67c" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackDirectory" FilterRule="CollectAll" AssetTags="" />
|
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/Entity" CollectGUID="4d7c84745db8e884f8020a8c5356e67c" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackDirectory" FilterRule="CollectAll" UserData="" AssetTags="" />
|
||||||
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/Audio" CollectGUID="306075fbe00b24251b6c889984a7a7d5" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackDirectory" FilterRule="CollectAll" AssetTags="" />
|
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/Audio" CollectGUID="306075fbe00b24251b6c889984a7a7d5" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackDirectory" FilterRule="CollectAll" UserData="" AssetTags="" />
|
||||||
</Group>
|
</Group>
|
||||||
<Group GroupName="shader" GroupDesc="" AssetTags="">
|
<Group GroupName="shader" GroupDesc="" AssetTags="">
|
||||||
<Collector CollectPath="Assets/Samples/Space Shooter/GameArt/ShaderVariants" CollectGUID="00781758c26692e40a9634ddeac838be" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackShaderVariants" FilterRule="CollectShaderVariants" AssetTags="" />
|
<Collector CollectPath="Assets/Samples/Space Shooter/GameArt/ShaderVariants" CollectGUID="00781758c26692e40a9634ddeac838be" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackShaderVariants" FilterRule="CollectShaderVariants" UserData="" AssetTags="" />
|
||||||
</Group>
|
</Group>
|
||||||
<Group GroupName="scene" GroupDesc="" AssetTags="">
|
<Group GroupName="scene" GroupDesc="" AssetTags="">
|
||||||
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/Scene" CollectGUID="6070eae1192f2994887f2983a177d503" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackSeparately" FilterRule="CollectAll" AssetTags="" />
|
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/Scene" CollectGUID="6070eae1192f2994887f2983a177d503" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackSeparately" FilterRule="CollectAll" UserData="" AssetTags="" />
|
||||||
</Group>
|
</Group>
|
||||||
<Group GroupName="ugui" GroupDesc="" AssetTags="">
|
<Group GroupName="ugui" GroupDesc="" AssetTags="">
|
||||||
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/UIImage" CollectGUID="30c57db62bb02a24590e7046d3a9e33a" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackDirectory" FilterRule="CollectAll" AssetTags="" />
|
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/UIImage" CollectGUID="30c57db62bb02a24590e7046d3a9e33a" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackDirectory" FilterRule="CollectAll" UserData="" AssetTags="" />
|
||||||
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/UIPanel" CollectGUID="12d33f33f3a55224c9c747d7bffa1c68" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackSeparately" FilterRule="CollectAll" AssetTags="" />
|
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/UIPanel" CollectGUID="12d33f33f3a55224c9c747d7bffa1c68" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackSeparately" FilterRule="CollectAll" UserData="" AssetTags="" />
|
||||||
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/UISprite" CollectGUID="01865ad6f7c806147b6cb37f2d83bc96" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackTopDirectory" FilterRule="CollectAll" AssetTags="" />
|
<Collector CollectPath="Assets/Samples/Space Shooter/GameRes/UISprite" CollectGUID="01865ad6f7c806147b6cb37f2d83bc96" CollectType="MainAssetCollector" AddressRule="AddressByFileName" PackRule="PackTopDirectory" FilterRule="CollectAll" UserData="" AssetTags="" />
|
||||||
</Group>
|
</Group>
|
||||||
</Package>
|
</Package>
|
||||||
</root>
|
</root>
|
||||||
@@ -32,6 +32,7 @@ MonoBehaviour:
|
|||||||
PackRuleName: PackDirectory
|
PackRuleName: PackDirectory
|
||||||
FilterRuleName: CollectAll
|
FilterRuleName: CollectAll
|
||||||
AssetTags:
|
AssetTags:
|
||||||
|
UserData:
|
||||||
- CollectPath: Assets/Samples/Space Shooter/GameRes/Entity
|
- CollectPath: Assets/Samples/Space Shooter/GameRes/Entity
|
||||||
CollectorGUID: 4d7c84745db8e884f8020a8c5356e67c
|
CollectorGUID: 4d7c84745db8e884f8020a8c5356e67c
|
||||||
CollectorType: 0
|
CollectorType: 0
|
||||||
@@ -39,6 +40,7 @@ MonoBehaviour:
|
|||||||
PackRuleName: PackDirectory
|
PackRuleName: PackDirectory
|
||||||
FilterRuleName: CollectAll
|
FilterRuleName: CollectAll
|
||||||
AssetTags:
|
AssetTags:
|
||||||
|
UserData:
|
||||||
- CollectPath: Assets/Samples/Space Shooter/GameRes/Audio
|
- CollectPath: Assets/Samples/Space Shooter/GameRes/Audio
|
||||||
CollectorGUID: 306075fbe00b24251b6c889984a7a7d5
|
CollectorGUID: 306075fbe00b24251b6c889984a7a7d5
|
||||||
CollectorType: 0
|
CollectorType: 0
|
||||||
@@ -46,6 +48,7 @@ MonoBehaviour:
|
|||||||
PackRuleName: PackDirectory
|
PackRuleName: PackDirectory
|
||||||
FilterRuleName: CollectAll
|
FilterRuleName: CollectAll
|
||||||
AssetTags:
|
AssetTags:
|
||||||
|
UserData:
|
||||||
- GroupName: shader
|
- GroupName: shader
|
||||||
GroupDesc:
|
GroupDesc:
|
||||||
AssetTags:
|
AssetTags:
|
||||||
@@ -58,6 +61,7 @@ MonoBehaviour:
|
|||||||
PackRuleName: PackShaderVariants
|
PackRuleName: PackShaderVariants
|
||||||
FilterRuleName: CollectShaderVariants
|
FilterRuleName: CollectShaderVariants
|
||||||
AssetTags:
|
AssetTags:
|
||||||
|
UserData:
|
||||||
- GroupName: scene
|
- GroupName: scene
|
||||||
GroupDesc:
|
GroupDesc:
|
||||||
AssetTags:
|
AssetTags:
|
||||||
@@ -70,6 +74,7 @@ MonoBehaviour:
|
|||||||
PackRuleName: PackSeparately
|
PackRuleName: PackSeparately
|
||||||
FilterRuleName: CollectAll
|
FilterRuleName: CollectAll
|
||||||
AssetTags:
|
AssetTags:
|
||||||
|
UserData:
|
||||||
- GroupName: ugui
|
- GroupName: ugui
|
||||||
GroupDesc:
|
GroupDesc:
|
||||||
AssetTags:
|
AssetTags:
|
||||||
@@ -82,6 +87,7 @@ MonoBehaviour:
|
|||||||
PackRuleName: PackDirectory
|
PackRuleName: PackDirectory
|
||||||
FilterRuleName: CollectAll
|
FilterRuleName: CollectAll
|
||||||
AssetTags:
|
AssetTags:
|
||||||
|
UserData:
|
||||||
- CollectPath: Assets/Samples/Space Shooter/GameRes/UIPanel
|
- CollectPath: Assets/Samples/Space Shooter/GameRes/UIPanel
|
||||||
CollectorGUID: 12d33f33f3a55224c9c747d7bffa1c68
|
CollectorGUID: 12d33f33f3a55224c9c747d7bffa1c68
|
||||||
CollectorType: 0
|
CollectorType: 0
|
||||||
@@ -89,6 +95,7 @@ MonoBehaviour:
|
|||||||
PackRuleName: PackSeparately
|
PackRuleName: PackSeparately
|
||||||
FilterRuleName: CollectAll
|
FilterRuleName: CollectAll
|
||||||
AssetTags:
|
AssetTags:
|
||||||
|
UserData:
|
||||||
- CollectPath: Assets/Samples/Space Shooter/GameRes/UISprite
|
- CollectPath: Assets/Samples/Space Shooter/GameRes/UISprite
|
||||||
CollectorGUID: 01865ad6f7c806147b6cb37f2d83bc96
|
CollectorGUID: 01865ad6f7c806147b6cb37f2d83bc96
|
||||||
CollectorType: 0
|
CollectorType: 0
|
||||||
@@ -96,3 +103,4 @@ MonoBehaviour:
|
|||||||
PackRuleName: PackTopDirectory
|
PackRuleName: PackTopDirectory
|
||||||
FilterRuleName: CollectAll
|
FilterRuleName: CollectAll
|
||||||
AssetTags:
|
AssetTags:
|
||||||
|
UserData:
|
||||||
|
|||||||
@@ -42,7 +42,8 @@ public class FileStreamEncryption : IEncryptionServices
|
|||||||
{
|
{
|
||||||
public EncryptResult Encrypt(EncryptFileInfo fileInfo)
|
public EncryptResult Encrypt(EncryptFileInfo fileInfo)
|
||||||
{
|
{
|
||||||
if (fileInfo.BundleName.Contains("gameres_music"))
|
// LoadFromStream
|
||||||
|
if (fileInfo.BundleName.Contains("_gameres_audio"))
|
||||||
{
|
{
|
||||||
var fileData = File.ReadAllBytes(fileInfo.FilePath);
|
var fileData = File.ReadAllBytes(fileInfo.FilePath);
|
||||||
for (int i = 0; i < fileData.Length; i++)
|
for (int i = 0; i < fileData.Length; i++)
|
||||||
@@ -55,7 +56,22 @@ public class FileStreamEncryption : IEncryptionServices
|
|||||||
result.EncryptedData = fileData;
|
result.EncryptedData = fileData;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
// LoadFromFileOffset
|
||||||
|
if (fileInfo.BundleName.Contains("_gameres_uiimage"))
|
||||||
|
{
|
||||||
|
var fileData = File.ReadAllBytes(fileInfo.FilePath);
|
||||||
|
int offset = 32;
|
||||||
|
var temper = new byte[fileData.Length + offset];
|
||||||
|
Buffer.BlockCopy(fileData, 0, temper, offset, fileData.Length);
|
||||||
|
|
||||||
|
EncryptResult result = new EncryptResult();
|
||||||
|
result.LoadMethod = EBundleLoadMethod.LoadFromFileOffset;
|
||||||
|
result.EncryptedData = temper;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Normal
|
||||||
{
|
{
|
||||||
EncryptResult result = new EncryptResult();
|
EncryptResult result = new EncryptResult();
|
||||||
result.LoadMethod = EBundleLoadMethod.Normal;
|
result.LoadMethod = EBundleLoadMethod.Normal;
|
||||||
|
|||||||
@@ -13,27 +13,51 @@ internal class AndroidPost : UnityEditor.Android.IPostGenerateGradleAndroidProje
|
|||||||
path = path.Replace("\\", "/");
|
path = path.Replace("\\", "/");
|
||||||
string untityActivityFilePath = $"{path}/src/main/java/com/unity3d/player/UnityPlayerActivity.java";
|
string untityActivityFilePath = $"{path}/src/main/java/com/unity3d/player/UnityPlayerActivity.java";
|
||||||
var readContent = System.IO.File.ReadAllLines(untityActivityFilePath);
|
var readContent = System.IO.File.ReadAllLines(untityActivityFilePath);
|
||||||
string postContent = " //auto-gen-function\n" +
|
string postContent =
|
||||||
" public boolean CheckAssetExist(String filePath){\n" +
|
" //auto-gen-function \n" +
|
||||||
" android.content.res.AssetManager assetManager = getAssets();\n" +
|
" public boolean CheckAssetExist(String filePath) \n" +
|
||||||
" java.io.InputStream inputStream = null;\n" +
|
" { \n" +
|
||||||
" try {\n" +
|
" android.content.res.AssetManager assetManager = getAssets(); \n" +
|
||||||
" inputStream = assetManager.open(filePath);\n" +
|
" try \n" +
|
||||||
" if(null != inputStream)return true;\n" +
|
" { \n" +
|
||||||
" }catch(java.io.IOException e) {\n" +
|
" java.io.InputStream inputStream = assetManager.open(filePath); \n" +
|
||||||
" e.printStackTrace();\n" +
|
" if (null != inputStream) \n" +
|
||||||
" }finally{\n" +
|
" { \n" +
|
||||||
" try {\n" +
|
" inputStream.close(); \n" +
|
||||||
" inputStream.close();\n" +
|
" return true; \n" +
|
||||||
" } catch (java.io.IOException e) {\n" +
|
" } \n" +
|
||||||
" e.printStackTrace();\n" +
|
" } \n" +
|
||||||
" }\n" +
|
" catch(java.io.IOException e) \n" +
|
||||||
" }\n" +
|
" { \n" +
|
||||||
" return false;\n" +
|
" e.printStackTrace(); \n" +
|
||||||
" }\n" +
|
" } \n" +
|
||||||
|
" return false; \n" +
|
||||||
|
" } \n" +
|
||||||
"}";
|
"}";
|
||||||
if (!readContent[readContent.Length - 18].Contains("CheckAssetExist"))
|
if (!readContent[readContent.Length - 18].Contains("CheckAssetExist"))
|
||||||
readContent[readContent.Length - 1] = postContent;
|
readContent[readContent.Length - 1] = postContent;
|
||||||
System.IO.File.WriteAllLines(untityActivityFilePath, readContent);
|
System.IO.File.WriteAllLines(untityActivityFilePath, readContent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
//auto-gen-function
|
||||||
|
public boolean CheckAssetExist(String filePath)
|
||||||
|
{
|
||||||
|
android.content.res.AssetManager assetManager = getAssets();
|
||||||
|
try
|
||||||
|
{
|
||||||
|
java.io.InputStream inputStream = assetManager.open(filePath);
|
||||||
|
if(null != inputStream)
|
||||||
|
{
|
||||||
|
inputStream.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(java.io.IOException e)
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
*/
|
||||||
@@ -1,10 +1,13 @@
|
|||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
// 作者:Stark
|
// 作者:Stark
|
||||||
//-------------------------------------
|
//-------------------------------------
|
||||||
|
using System.Collections.Generic;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
|
||||||
public sealed class StreamingAssetsHelper
|
public sealed class StreamingAssetsHelper
|
||||||
{
|
{
|
||||||
|
private static readonly Dictionary<string, bool> _cacheData = new Dictionary<string, bool>(1000);
|
||||||
|
|
||||||
#if UNITY_ANDROID && !UNITY_EDITOR
|
#if UNITY_ANDROID && !UNITY_EDITOR
|
||||||
private static AndroidJavaClass _unityPlayerClass;
|
private static AndroidJavaClass _unityPlayerClass;
|
||||||
public static AndroidJavaClass UnityPlayerClass
|
public static AndroidJavaClass UnityPlayerClass
|
||||||
@@ -33,12 +36,22 @@ public sealed class StreamingAssetsHelper
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static bool FileExists(string filePath)
|
public static bool FileExists(string filePath)
|
||||||
{
|
{
|
||||||
return CurrentActivity.Call<bool>("CheckAssetExist", filePath);
|
if (_cacheData.TryGetValue(filePath, out bool result) == false)
|
||||||
|
{
|
||||||
|
result = CurrentActivity.Call<bool>("CheckAssetExist", filePath);
|
||||||
|
_cacheData.Add(filePath, result);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
public static bool FileExists(string filePath)
|
public static bool FileExists(string filePath)
|
||||||
{
|
{
|
||||||
return System.IO.File.Exists(System.IO.Path.Combine(Application.streamingAssetsPath, filePath));
|
if (_cacheData.TryGetValue(filePath, out bool result) == false)
|
||||||
|
{
|
||||||
|
result = System.IO.File.Exists(System.IO.Path.Combine(Application.streamingAssetsPath, filePath));
|
||||||
|
_cacheData.Add(filePath, result);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "com.tuyoogame.yooasset",
|
"name": "com.tuyoogame.yooasset",
|
||||||
"displayName": "YooAsset",
|
"displayName": "YooAsset",
|
||||||
"version": "1.4.5-preview",
|
"version": "1.4.6-preview",
|
||||||
"unity": "2019.4",
|
"unity": "2019.4",
|
||||||
"description": "unity3d resources management system.",
|
"description": "unity3d resources management system.",
|
||||||
"author": {
|
"author": {
|
||||||
|
|||||||
@@ -20,3 +20,6 @@ CDN
|
|||||||
└─v2.0
|
└─v2.0
|
||||||
````
|
````
|
||||||
|
|
||||||
|
**游戏版本说明**
|
||||||
|
|
||||||
|
v1.0 代表的是游戏版本,不是资源版本。在没有更换安装包的前提下,不需要递增这个游戏版本。每次生成的补丁包只需要覆盖掉当前游戏版本目录下即可。
|
||||||
|
|||||||
Reference in New Issue
Block a user