diff --git a/GFramework.Game.Abstractions/scene/ISceneRoot.cs b/GFramework.Game.Abstractions/scene/ISceneRoot.cs
index 22673b1..2cfd1d8 100644
--- a/GFramework.Game.Abstractions/scene/ISceneRoot.cs
+++ b/GFramework.Game.Abstractions/scene/ISceneRoot.cs
@@ -14,74 +14,22 @@
namespace GFramework.Game.Abstractions.scene;
///
-/// 场景根接口,定义了场景管理系统的核心功能。
-/// 负责管理场景的生命周期、场景栈操作以及场景间的切换控制。
+/// 场景根接口,定义了场景树容器的基本操作。
+/// 职责单一:管理场景节点的添加和移除。
///
public interface ISceneRoot
{
///
- /// 获取当前活动的场景行为对象。
- /// 返回null表示当前没有活动场景。
+ /// 向场景树添加场景节点。
+ /// 此方法仅负责将场景添加到场景树中,不涉及场景的加载逻辑。
///
- ISceneBehavior? Current { get; }
+ /// 要添加的场景行为实例。
+ void AddScene(ISceneBehavior scene);
///
- /// 获取所有已加载场景的行为对象列表。
- /// 列表采用栈式结构,索引0为栈底场景,最后一个元素为当前活动场景。
+ /// 从场景树移除场景节点。
+ /// 此方法仅负责从场景树中移除场景,不涉及场景的卸载逻辑。
///
- IReadOnlyList Stack { get; }
-
- ///
- /// 获取场景系统是否正在进行切换操作。
- /// true表示正在执行场景加载、卸载或切换,false表示系统空闲。
- ///
- bool IsTransitioning { get; }
-
- ///
- /// 异步替换当前场景,清空整个场景栈并加载新场景。
- /// 此操作会卸载所有现有场景,然后加载指定的新场景。
- ///
- /// 要加载的场景唯一标识符。
- /// 可选的场景进入参数,用于传递初始化数据。
- /// 表示替换操作完成的ValueTask。
- ValueTask ReplaceAsync(string key, ISceneEnterParam? param = null);
-
- ///
- /// 异步压入新场景到场景栈顶部。
- /// 当前场景会被暂停,新场景成为活动场景。
- ///
- /// 要加载的场景唯一标识符。
- /// 可选的场景进入参数,用于传递初始化数据。
- /// 表示压入操作完成的ValueTask。
- ValueTask PushAsync(string key, ISceneEnterParam? param = null);
-
- ///
- /// 异步弹出当前场景并恢复下一个场景。
- /// 当前场景会被卸载,栈中的下一个场景变为活动场景。
- ///
- /// 表示弹出操作完成的ValueTask。
- ValueTask PopAsync();
-
- ///
- /// 异步清空所有已加载的场景。
- /// 卸载场景栈中的所有场景,使系统回到无场景状态。
- ///
- /// 表示清空操作完成的ValueTask。
- ValueTask ClearAsync();
-
- ///
- /// 异步加载指定场景并返回场景行为实例。
- /// 此方法仅加载场景资源但不激活场景,通常用于预加载或后台加载场景。
- ///
- /// 要加载的场景唯一标识符。
- /// 表示加载操作完成的ValueTask,包含加载成功的场景行为对象。
- ValueTask LoadAsync(string sceneKey);
-
- ///
- /// 异步卸载指定的场景行为实例。
- /// 释放场景占用的资源并从系统中移除该场景实例。
- ///
- /// 要卸载的场景行为实例。
- /// 表示卸载操作完成的ValueTask。
- ValueTask UnloadAsync(ISceneBehavior scene);
+ /// 要移除的场景行为实例。
+ void RemoveScene(ISceneBehavior scene);
}
\ No newline at end of file
diff --git a/GFramework.Game/scene/SceneRouterBase.cs b/GFramework.Game/scene/SceneRouterBase.cs
index 04052a2..a557845 100644
--- a/GFramework.Game/scene/SceneRouterBase.cs
+++ b/GFramework.Game/scene/SceneRouterBase.cs
@@ -222,7 +222,7 @@ public abstract class SceneRouterBase
///
/// 内部推送场景实现方法。
- /// 执行守卫检查、场景加载、暂停当前场景、压入栈等操作。
+ /// 执行守卫检查、场景创建、添加到场景树、加载资源、暂停当前场景、压入栈等操作。
///
/// 场景键名。
/// 场景进入参数。
@@ -244,8 +244,11 @@ public abstract class SceneRouterBase
return;
}
- // 通过 Root 加载场景(Root.LoadAsync 返回 ISceneBehavior)
- var scene = await Root!.LoadAsync(sceneKey);
+ // 通过 Factory 创建场景实例
+ var scene = _factory.Create(sceneKey);
+
+ // 添加到场景树
+ Root!.AddScene(scene);
// 加载资源
await scene.OnLoadAsync(param);
@@ -297,7 +300,7 @@ public abstract class SceneRouterBase
///
/// 内部弹出场景实现方法。
- /// 执行守卫检查、退出场景、卸载资源、恢复下一个场景等操作。
+ /// 执行守卫检查、退出场景、卸载资源、从场景树移除、恢复下一个场景等操作。
///
/// 异步任务。
private async ValueTask PopInternalAsync()
@@ -322,8 +325,8 @@ public abstract class SceneRouterBase
// 卸载资源
await top.OnUnloadAsync();
- // 从场景树卸载
- await Root!.UnloadAsync(top);
+ // 从场景树移除
+ Root!.RemoveScene(top);
// 恢复下一个场景
if (_stack.Count > 0)