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) {