diff --git a/Assets/YooAsset/Runtime/PatchSystem/Operations/InitializationOperation.cs b/Assets/YooAsset/Runtime/PatchSystem/Operations/InitializationOperation.cs
index 2413e69..a7123f1 100644
--- a/Assets/YooAsset/Runtime/PatchSystem/Operations/InitializationOperation.cs
+++ b/Assets/YooAsset/Runtime/PatchSystem/Operations/InitializationOperation.cs
@@ -21,42 +21,53 @@ namespace YooAsset
{
None,
Builder,
+ Load,
Done,
}
private readonly EditorSimulateModeImpl _impl;
+ private string _simulatePatchManifestPath;
private ESteps _steps = ESteps.None;
- internal EditorSimulateModeInitializationOperation(EditorSimulateModeImpl impl)
+ internal EditorSimulateModeInitializationOperation(EditorSimulateModeImpl impl, string simulatePatchManifestPath)
{
_impl = impl;
+ _simulatePatchManifestPath = simulatePatchManifestPath;
}
internal override void Start()
{
- _steps = ESteps.Builder;
+ if (string.IsNullOrEmpty(_simulatePatchManifestPath))
+ _steps = ESteps.Builder;
+ else
+ _steps = ESteps.Load;
}
internal override void Update()
{
if (_steps == ESteps.Builder)
{
- string manifestFilePath = EditorSimulateModeHelper.SimulateBuild();
- if (string.IsNullOrEmpty(manifestFilePath))
+ _simulatePatchManifestPath = EditorSimulateModeHelper.SimulateBuild();
+ if (string.IsNullOrEmpty(_simulatePatchManifestPath))
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
Error = "Simulate build failed, see the detail info on the console window.";
return;
}
- if (File.Exists(manifestFilePath) == false)
+ _steps = ESteps.Load;
+ }
+
+ if (_steps == ESteps.Load)
+ {
+ if (File.Exists(_simulatePatchManifestPath) == false)
{
_steps = ESteps.Done;
Status = EOperationStatus.Failed;
- Error = $"Manifest file not found : {manifestFilePath}";
+ Error = $"Manifest file not found : {_simulatePatchManifestPath}";
return;
}
- YooLogger.Log($"Load manifest file : {manifestFilePath}");
- string jsonContent = FileUtility.ReadFile(manifestFilePath);
+ YooLogger.Log($"Load manifest file : {_simulatePatchManifestPath}");
+ string jsonContent = FileUtility.ReadFile(_simulatePatchManifestPath);
var simulatePatchManifest = PatchManifest.Deserialize(jsonContent);
_impl.SetSimulatePatchManifest(simulatePatchManifest);
_steps = ESteps.Done;
diff --git a/Assets/YooAsset/Runtime/PatchSystem/PlayMode/EditorSimulateModeImpl.cs b/Assets/YooAsset/Runtime/PatchSystem/PlayMode/EditorSimulateModeImpl.cs
index 0059576..964e729 100644
--- a/Assets/YooAsset/Runtime/PatchSystem/PlayMode/EditorSimulateModeImpl.cs
+++ b/Assets/YooAsset/Runtime/PatchSystem/PlayMode/EditorSimulateModeImpl.cs
@@ -12,10 +12,10 @@ namespace YooAsset
///
/// 异步初始化
///
- public InitializationOperation InitializeAsync(bool locationToLower)
+ public InitializationOperation InitializeAsync(bool locationToLower, string simulatePatchManifestPath)
{
_locationToLower = locationToLower;
- var operation = new EditorSimulateModeInitializationOperation(this);
+ var operation = new EditorSimulateModeInitializationOperation(this, simulatePatchManifestPath);
OperationSystem.ProcessOperaiton(operation);
return operation;
}
diff --git a/Assets/YooAsset/Runtime/YooAssets.cs b/Assets/YooAsset/Runtime/YooAssets.cs
index 3eab286..8737f89 100644
--- a/Assets/YooAsset/Runtime/YooAssets.cs
+++ b/Assets/YooAsset/Runtime/YooAssets.cs
@@ -66,6 +66,11 @@ namespace YooAsset
///
public class EditorSimulateModeParameters : CreateParameters
{
+ ///
+ /// 用于模拟运行的资源清单路径
+ /// 注意:如果路径为空,会自动重新构建补丁清单。
+ ///
+ public string SimulatePatchManifestPath;
}
///
@@ -187,7 +192,10 @@ namespace YooAsset
_editorSimulateModeImpl = new EditorSimulateModeImpl();
_bundleServices = _editorSimulateModeImpl;
AssetSystem.Initialize(true, parameters.AssetLoadingMaxNumber, parameters.DecryptionServices, _bundleServices);
- initializeOperation = _editorSimulateModeImpl.InitializeAsync(parameters.LocationToLower);
+ var editorSimulateModeParameters = parameters as EditorSimulateModeParameters;
+ initializeOperation = _editorSimulateModeImpl.InitializeAsync(
+ editorSimulateModeParameters.LocationToLower,
+ editorSimulateModeParameters.SimulatePatchManifestPath);
}
else if (_playMode == EPlayMode.OfflinePlayMode)
{