diff --git a/Assets/YooAsset/Runtime/AssetSystem/AssetSystem.cs b/Assets/YooAsset/Runtime/AssetSystem/AssetSystem.cs
index defe8ba..bbbdfff 100644
--- a/Assets/YooAsset/Runtime/AssetSystem/AssetSystem.cs
+++ b/Assets/YooAsset/Runtime/AssetSystem/AssetSystem.cs
@@ -147,7 +147,7 @@ namespace YooAsset
///
/// 加载场景
///
- public SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode, int priority)
+ public SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode, bool allowSceneActivation ,int priority)
{
if (assetInfo.IsInvalid)
{
@@ -168,9 +168,9 @@ namespace YooAsset
ProviderBase provider;
{
if (_simulationOnEditor)
- provider = new DatabaseSceneProvider(this, providerGUID, assetInfo, sceneMode, priority);
+ provider = new DatabaseSceneProvider(this, providerGUID, assetInfo, sceneMode,allowSceneActivation, priority);
else
- provider = new BundledSceneProvider(this, providerGUID, assetInfo, sceneMode, priority);
+ provider = new BundledSceneProvider(this, providerGUID, assetInfo, sceneMode,allowSceneActivation, priority);
provider.InitSpawnDebugInfo();
_providerList.Add(provider);
_providerDic.Add(providerGUID, provider);
diff --git a/Assets/YooAsset/Runtime/AssetSystem/Handles/SceneOperationHandle.cs b/Assets/YooAsset/Runtime/AssetSystem/Handles/SceneOperationHandle.cs
index b170a08..051a6dc 100644
--- a/Assets/YooAsset/Runtime/AssetSystem/Handles/SceneOperationHandle.cs
+++ b/Assets/YooAsset/Runtime/AssetSystem/Handles/SceneOperationHandle.cs
@@ -6,9 +6,10 @@ namespace YooAsset
{
private System.Action _callback;
internal string PackageName { set; get; }
-
+ private ProviderBase _providerBase;
internal SceneOperationHandle(ProviderBase provider) : base(provider)
{
+ _providerBase = provider;
}
internal override void InvokeCallback()
{
@@ -58,9 +59,23 @@ namespace YooAsset
if (IsValidWithWarning == false)
return false;
- if (SceneObject.IsValid() && SceneObject.isLoaded)
+ if (SceneObject.IsValid())
{
- return SceneManager.SetActiveScene(SceneObject);
+ var isChangeState = false;
+#if UNITY_EDITOR
+ if (_providerBase is DatabaseSceneProvider dsp)
+ {
+ dsp.AsyncOp.allowSceneActivation = true;
+ isChangeState = true;
+ }
+#endif
+ if (_providerBase is BundledSceneProvider bsp)
+ {
+ bsp.AsyncOp.allowSceneActivation = true;
+ isChangeState = true;
+ }
+
+ return isChangeState;
}
else
{
diff --git a/Assets/YooAsset/Runtime/AssetSystem/Provider/BundledSceneProvider.cs b/Assets/YooAsset/Runtime/AssetSystem/Provider/BundledSceneProvider.cs
index 85ce68b..ce0acce 100644
--- a/Assets/YooAsset/Runtime/AssetSystem/Provider/BundledSceneProvider.cs
+++ b/Assets/YooAsset/Runtime/AssetSystem/Provider/BundledSceneProvider.cs
@@ -11,13 +11,15 @@ namespace YooAsset
public readonly LoadSceneMode SceneMode;
private readonly string _sceneName;
private readonly int _priority;
- private AsyncOperation _asyncOp;
+ private readonly bool _allowSceneActivation;
+ public AsyncOperation AsyncOp { private set; get; }
- public BundledSceneProvider(AssetSystemImpl impl, string providerGUID, AssetInfo assetInfo, LoadSceneMode sceneMode, int priority) : base(impl, providerGUID, assetInfo)
+ public BundledSceneProvider(AssetSystemImpl impl, string providerGUID, AssetInfo assetInfo, LoadSceneMode sceneMode, bool allowSceneActivation, int priority) : base(impl, providerGUID, assetInfo)
{
SceneMode = sceneMode;
_sceneName = Path.GetFileNameWithoutExtension(assetInfo.AssetPath);
_priority = priority;
+ _allowSceneActivation = allowSceneActivation;
}
public override void Update()
{
@@ -62,11 +64,11 @@ namespace YooAsset
if (Status == EStatus.Loading)
{
// 注意:如果场景不存在则返回NULL
- _asyncOp = SceneManager.LoadSceneAsync(MainAssetInfo.AssetPath, SceneMode);
- if (_asyncOp != null)
+ AsyncOp = SceneManager.LoadSceneAsync(MainAssetInfo.AssetPath, SceneMode);
+ if (AsyncOp != null)
{
- _asyncOp.allowSceneActivation = true;
- _asyncOp.priority = _priority;
+ AsyncOp.allowSceneActivation = _allowSceneActivation;
+ AsyncOp.priority = _priority;
SceneObject = SceneManager.GetSceneAt(SceneManager.sceneCount - 1);
Status = EStatus.Checking;
}
@@ -82,8 +84,8 @@ namespace YooAsset
// 3. 检测加载结果
if (Status == EStatus.Checking)
{
- Progress = _asyncOp.progress;
- if (_asyncOp.isDone)
+ Progress = AsyncOp.progress;
+ if (AsyncOp.isDone)
{
Status = SceneObject.IsValid() ? EStatus.Succeed : EStatus.Failed;
if (Status == EStatus.Failed)
diff --git a/Assets/YooAsset/Runtime/AssetSystem/Provider/DatabaseSceneProvider.cs b/Assets/YooAsset/Runtime/AssetSystem/Provider/DatabaseSceneProvider.cs
index 23e2cab..3a5cb69 100644
--- a/Assets/YooAsset/Runtime/AssetSystem/Provider/DatabaseSceneProvider.cs
+++ b/Assets/YooAsset/Runtime/AssetSystem/Provider/DatabaseSceneProvider.cs
@@ -7,12 +7,14 @@ namespace YooAsset
{
public readonly LoadSceneMode SceneMode;
private readonly int _priority;
- private AsyncOperation _asyncOp;
+ private readonly bool _allowSceneActivation;
+ public AsyncOperation AsyncOp { private set; get; }
- public DatabaseSceneProvider(AssetSystemImpl impl, string providerGUID, AssetInfo assetInfo, LoadSceneMode sceneMode, int priority) : base(impl, providerGUID, assetInfo)
+ public DatabaseSceneProvider(AssetSystemImpl impl, string providerGUID, AssetInfo assetInfo, LoadSceneMode sceneMode, bool allowSceneActivation, int priority) : base(impl, providerGUID, assetInfo)
{
SceneMode = sceneMode;
_priority = priority;
+ _allowSceneActivation = allowSceneActivation;
}
public override void Update()
{
@@ -52,11 +54,11 @@ namespace YooAsset
{
LoadSceneParameters loadSceneParameters = new LoadSceneParameters();
loadSceneParameters.loadSceneMode = SceneMode;
- _asyncOp = UnityEditor.SceneManagement.EditorSceneManager.LoadSceneAsyncInPlayMode(MainAssetInfo.AssetPath, loadSceneParameters);
- if (_asyncOp != null)
+ AsyncOp = UnityEditor.SceneManagement.EditorSceneManager.LoadSceneAsyncInPlayMode(MainAssetInfo.AssetPath, loadSceneParameters);
+ if (AsyncOp != null)
{
- _asyncOp.allowSceneActivation = true;
- _asyncOp.priority = _priority;
+ AsyncOp.allowSceneActivation = _allowSceneActivation;
+ AsyncOp.priority = _priority;
SceneObject = SceneManager.GetSceneAt(SceneManager.sceneCount - 1);
Status = EStatus.Checking;
}
@@ -72,8 +74,8 @@ namespace YooAsset
// 3. 检测加载结果
if (Status == EStatus.Checking)
{
- Progress = _asyncOp.progress;
- if (_asyncOp.isDone)
+ Progress = AsyncOp.progress;
+ if (AsyncOp.isDone)
{
Status = SceneObject.IsValid() ? EStatus.Succeed : EStatus.Failed;
if (Status == EStatus.Failed)
diff --git a/Assets/YooAsset/Runtime/PackageSystem/ResourcePackage.cs b/Assets/YooAsset/Runtime/PackageSystem/ResourcePackage.cs
index ebc843f..d83ae9e 100644
--- a/Assets/YooAsset/Runtime/PackageSystem/ResourcePackage.cs
+++ b/Assets/YooAsset/Runtime/PackageSystem/ResourcePackage.cs
@@ -455,12 +455,13 @@ namespace YooAsset
///
/// 场景的定位地址
/// 场景加载模式
+ /// 场景加载后自动激活
/// 优先级
- public SceneOperationHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, int priority = 100)
+ public SceneOperationHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool allowSceneActivation = true, int priority = 100)
{
DebugCheckInitialize();
AssetInfo assetInfo = ConvertLocationToAssetInfo(location, null);
- var handle = _assetSystemImpl.LoadSceneAsync(assetInfo, sceneMode, priority);
+ var handle = _assetSystemImpl.LoadSceneAsync(assetInfo, sceneMode,allowSceneActivation, priority);
return handle;
}
@@ -469,11 +470,12 @@ namespace YooAsset
///
/// 场景的资源信息
/// 场景加载模式
+ /// 场景加载后自动激活
/// 优先级
- public SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, int priority = 100)
+ public SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, bool allowSceneActivation = true, int priority = 100)
{
DebugCheckInitialize();
- var handle = _assetSystemImpl.LoadSceneAsync(assetInfo, sceneMode, priority);
+ var handle = _assetSystemImpl.LoadSceneAsync(assetInfo, sceneMode,allowSceneActivation, priority);
return handle;
}
#endregion
diff --git a/Assets/YooAsset/Runtime/YooAssetsExtension.cs b/Assets/YooAsset/Runtime/YooAssetsExtension.cs
index 3cb0941..5215050 100644
--- a/Assets/YooAsset/Runtime/YooAssetsExtension.cs
+++ b/Assets/YooAsset/Runtime/YooAssetsExtension.cs
@@ -128,11 +128,12 @@ namespace YooAsset
///
/// 场景的定位地址
/// 场景加载模式
+ /// 场景加载后自动激活
/// 优先级
- public static SceneOperationHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, int priority = 100)
+ public static SceneOperationHandle LoadSceneAsync(string location, LoadSceneMode sceneMode = LoadSceneMode.Single,bool allowSceneActivation = true, int priority = 100)
{
DebugCheckDefaultPackageValid();
- return _defaultPackage.LoadSceneAsync(location, sceneMode, priority);
+ return _defaultPackage.LoadSceneAsync(location, sceneMode, allowSceneActivation, priority);
}
///
@@ -140,11 +141,12 @@ namespace YooAsset
///
/// 场景的资源信息
/// 场景加载模式
+ /// 场景加载后自动激活
/// 优先级
- public static SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, int priority = 100)
+ public static SceneOperationHandle LoadSceneAsync(AssetInfo assetInfo, LoadSceneMode sceneMode = LoadSceneMode.Single, bool allowSceneActivation = true, int priority = 100)
{
DebugCheckDefaultPackageValid();
- return _defaultPackage.LoadSceneAsync(assetInfo, sceneMode, priority);
+ return _defaultPackage.LoadSceneAsync(assetInfo, sceneMode, allowSceneActivation, priority);
}
#endregion