From 9001be21ace55709a6b481eb907a125e60f08f4c Mon Sep 17 00:00:00 2001 From: Dada Hsueh Date: Thu, 1 Aug 2024 10:31:10 +0800 Subject: [PATCH] feat : add load scene parameter LocalPhysicsMode --- .../Provider/BundledSceneProvider.cs | 12 +++++------ .../Provider/DatabaseSceneProvider.cs | 13 ++++++------ .../ResourceManager/ResourceManager.cs | 6 +++--- .../ResourcePackage/ResourcePackage.cs | 20 +++++++++---------- Assets/YooAsset/Runtime/YooAssetsExtension.cs | 16 +++++++-------- 5 files changed, 33 insertions(+), 34 deletions(-) diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSceneProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSceneProvider.cs index fcf7097..4d08889 100644 --- a/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSceneProvider.cs +++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/BundledSceneProvider.cs @@ -8,13 +8,14 @@ namespace YooAsset { internal sealed class BundledSceneProvider : ProviderOperation { - public readonly LoadSceneMode SceneMode; + public LoadSceneMode SceneMode => LoadSceneParams.loadSceneMode; + public readonly LoadSceneParameters LoadSceneParams; private AsyncOperation _asyncOperation; private bool _suspendLoadMode; - public BundledSceneProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo, LoadSceneMode sceneMode, bool suspendLoad) : base(manager, providerGUID, assetInfo) + public BundledSceneProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo, LoadSceneMode sceneMode, bool suspendLoad, LocalPhysicsMode physicsMode = default) : base(manager, providerGUID, assetInfo) { - SceneMode = sceneMode; + LoadSceneParams = new LoadSceneParameters(sceneMode, physicsMode); SceneName = Path.GetFileNameWithoutExtension(assetInfo.AssetPath); _suspendLoadMode = suspendLoad; } @@ -61,15 +62,14 @@ namespace YooAsset if (IsWaitForAsyncComplete) { // 注意:场景同步加载方法不会立即加载场景,而是在下一帧加载。 - LoadSceneParameters parameters = new LoadSceneParameters(SceneMode); - SceneObject = SceneManager.LoadScene(MainAssetInfo.AssetPath, parameters); + SceneObject = SceneManager.LoadScene(MainAssetInfo.AssetPath, LoadSceneParams); _steps = ESteps.Checking; } else { // 注意:如果场景不存在异步加载方法返回NULL // 注意:即使是异步加载也要在当帧获取到场景对象 - _asyncOperation = SceneManager.LoadSceneAsync(MainAssetInfo.AssetPath, SceneMode); + _asyncOperation = SceneManager.LoadSceneAsync(MainAssetInfo.AssetPath, LoadSceneParams); if (_asyncOperation != null) { _asyncOperation.allowSceneActivation = !_suspendLoadMode; diff --git a/Assets/YooAsset/Runtime/ResourceManager/Provider/DatabaseSceneProvider.cs b/Assets/YooAsset/Runtime/ResourceManager/Provider/DatabaseSceneProvider.cs index 50de189..c3e2960 100644 --- a/Assets/YooAsset/Runtime/ResourceManager/Provider/DatabaseSceneProvider.cs +++ b/Assets/YooAsset/Runtime/ResourceManager/Provider/DatabaseSceneProvider.cs @@ -8,13 +8,14 @@ namespace YooAsset { internal sealed class DatabaseSceneProvider : ProviderOperation { - public readonly LoadSceneMode SceneMode; + public LoadSceneMode SceneMode => LoadSceneParams.loadSceneMode; + public readonly LoadSceneParameters LoadSceneParams; private bool _suspendLoadMode; private AsyncOperation _asyncOperation; - public DatabaseSceneProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo, LoadSceneMode sceneMode, bool suspendLoad) : base(manager, providerGUID, assetInfo) + public DatabaseSceneProvider(ResourceManager manager, string providerGUID, AssetInfo assetInfo, LoadSceneMode sceneMode, bool suspendLoad, LocalPhysicsMode physicsMode = default) : base(manager, providerGUID, assetInfo) { - SceneMode = sceneMode; + LoadSceneParams = new LoadSceneParameters(sceneMode, physicsMode); SceneName = Path.GetFileNameWithoutExtension(assetInfo.AssetPath); _suspendLoadMode = suspendLoad; } @@ -53,14 +54,12 @@ namespace YooAsset { if (IsWaitForAsyncComplete) { - LoadSceneParameters loadSceneParameters = new LoadSceneParameters(SceneMode); - SceneObject = UnityEditor.SceneManagement.EditorSceneManager.LoadSceneInPlayMode(MainAssetInfo.AssetPath, loadSceneParameters); + SceneObject = UnityEditor.SceneManagement.EditorSceneManager.LoadSceneInPlayMode(MainAssetInfo.AssetPath, LoadSceneParams); _steps = ESteps.Checking; } else { - LoadSceneParameters loadSceneParameters = new LoadSceneParameters(SceneMode); - _asyncOperation = UnityEditor.SceneManagement.EditorSceneManager.LoadSceneAsyncInPlayMode(MainAssetInfo.AssetPath, loadSceneParameters); + _asyncOperation = UnityEditor.SceneManagement.EditorSceneManager.LoadSceneAsyncInPlayMode(MainAssetInfo.AssetPath, LoadSceneParams); if (_asyncOperation != null) { _asyncOperation.allowSceneActivation = !_suspendLoadMode; diff --git a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs index 5307db8..bcd1493 100644 --- a/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs +++ b/Assets/YooAsset/Runtime/ResourceManager/ResourceManager.cs @@ -86,7 +86,7 @@ namespace YooAsset /// 注意:返回的场景句柄是唯一的,每个场景句柄对应自己的场景提供者对象。 /// 注意:业务逻辑层应该避免同时加载一个子场景。 /// - public SceneHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode, bool suspendLoad, uint priority) + public SceneHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode, bool suspendLoad, uint priority, LocalPhysicsMode physicsMode = default) { if (assetInfo.IsInvalid) { @@ -107,9 +107,9 @@ namespace YooAsset ProviderOperation provider; { if (_simulationOnEditor) - provider = new DatabaseSceneProvider(this, providerGUID, assetInfo, sceneMode, suspendLoad); + provider = new DatabaseSceneProvider(this, providerGUID, assetInfo, sceneMode, suspendLoad, physicsMode); else - provider = new BundledSceneProvider(this, providerGUID, assetInfo, sceneMode, suspendLoad); + provider = new BundledSceneProvider(this, providerGUID, assetInfo, sceneMode, suspendLoad, physicsMode); provider.InitSpawnDebugInfo(); _providerDic.Add(providerGUID, provider); OperationSystem.StartOperation(PackageName, provider); diff --git a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs index 5348564..72f052f 100644 --- a/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs +++ b/Assets/YooAsset/Runtime/ResourcePackage/ResourcePackage.cs @@ -486,11 +486,11 @@ namespace YooAsset /// /// 场景的定位地址 /// 场景加载模式 - public SceneHandle LoadSceneSync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single) + public SceneHandle LoadSceneSync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, LocalPhysicsMode physicsMode = default) { DebugCheckInitialize(); AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null); - return LoadSceneInternal(assetInfo, true, sceneMode, false, 0); + return LoadSceneInternal(assetInfo, true, sceneMode, false, 0, physicsMode); } /// @@ -498,10 +498,10 @@ namespace YooAsset /// /// 场景的资源信息 /// 场景加载模式 - public SceneHandle LoadSceneSync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single) + public SceneHandle LoadSceneSync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, LocalPhysicsMode physicsMode = default) { DebugCheckInitialize(); - return LoadSceneInternal(assetInfo, true, sceneMode, false, 0); + return LoadSceneInternal(assetInfo, true, sceneMode, false, 0, physicsMode); } /// @@ -511,11 +511,11 @@ namespace YooAsset /// 场景加载模式 /// 场景加载到90%自动挂起 /// 加载的优先级 - public SceneHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, uint priority = 0) + public SceneHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, uint priority = 0, LocalPhysicsMode physicsMode = default) { DebugCheckInitialize(); AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null); - return LoadSceneInternal(assetInfo, false, sceneMode, suspendLoad, priority); + return LoadSceneInternal(assetInfo, false, sceneMode, suspendLoad, priority, physicsMode); } /// @@ -525,16 +525,16 @@ namespace YooAsset /// 场景加载模式 /// 场景加载到90%自动挂起 /// 加载的优先级 - public SceneHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, uint priority = 0) + public SceneHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, uint priority = 0, LocalPhysicsMode physicsMode = default) { DebugCheckInitialize(); - return LoadSceneInternal(assetInfo, false, sceneMode, suspendLoad, priority); + return LoadSceneInternal(assetInfo, false, sceneMode, suspendLoad, priority, physicsMode); } - private SceneHandle LoadSceneInternal(AssetInfo assetInfo, bool waitForAsyncComplete, LoadSceneMode sceneMode, bool suspendLoad, uint priority) + private SceneHandle LoadSceneInternal(AssetInfo assetInfo, bool waitForAsyncComplete, LoadSceneMode sceneMode, bool suspendLoad, uint priority, LocalPhysicsMode physicsMode = default) { DebugCheckAssetLoadType(assetInfo.AssetType); - var handle = _resourceManager.LoadSceneAsync(assetInfo, sceneMode, suspendLoad, priority); + var handle = _resourceManager.LoadSceneAsync(assetInfo, sceneMode, suspendLoad, priority, physicsMode); if (waitForAsyncComplete) handle.WaitForAsyncComplete(); return handle; diff --git a/Assets/YooAsset/Runtime/YooAssetsExtension.cs b/Assets/YooAsset/Runtime/YooAssetsExtension.cs index edaf7cf..533df04 100644 --- a/Assets/YooAsset/Runtime/YooAssetsExtension.cs +++ b/Assets/YooAsset/Runtime/YooAssetsExtension.cs @@ -161,10 +161,10 @@ namespace YooAsset /// /// 场景的定位地址 /// 场景加载模式 - public static SceneHandle LoadSceneSync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single) + public static SceneHandle LoadSceneSync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, LocalPhysicsMode physicsMode = default) { DebugCheckDefaultPackageValid(); - return _defaultPackage.LoadSceneSync(location, sceneMode); + return _defaultPackage.LoadSceneSync(location, sceneMode, physicsMode); } /// @@ -172,10 +172,10 @@ namespace YooAsset /// /// 场景的资源信息 /// 场景加载模式 - public static SceneHandle LoadSceneSync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single) + public static SceneHandle LoadSceneSync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, LocalPhysicsMode physicsMode = default) { DebugCheckDefaultPackageValid(); - return _defaultPackage.LoadSceneSync(assetInfo, sceneMode); + return _defaultPackage.LoadSceneSync(assetInfo, sceneMode, physicsMode); } /// @@ -185,10 +185,10 @@ namespace YooAsset /// 场景加载模式 /// 场景加载到90%自动挂起 /// 优先级 - public static SceneHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, uint priority = 100) + public static SceneHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, uint priority = 100, LocalPhysicsMode physicsMode = default) { DebugCheckDefaultPackageValid(); - return _defaultPackage.LoadSceneAsync(location, sceneMode, suspendLoad, priority); + return _defaultPackage.LoadSceneAsync(location, sceneMode, suspendLoad, priority, physicsMode); } /// @@ -198,10 +198,10 @@ namespace YooAsset /// 场景加载模式 /// 场景加载到90%自动挂起 /// 优先级 - public static SceneHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, uint priority = 100) + public static SceneHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, uint priority = 100, LocalPhysicsMode physicsMode = default) { DebugCheckDefaultPackageValid(); - return _defaultPackage.LoadSceneAsync(assetInfo, sceneMode, suspendLoad, priority); + return _defaultPackage.LoadSceneAsync(assetInfo, sceneMode, suspendLoad, priority, physicsMode); } #endregion