多轮审查评估

This commit is contained in:
2026-05-13 09:19:54 +08:00
parent 458f344e83
commit 1b37297585
57 changed files with 3019 additions and 218 deletions

View File

@@ -9,37 +9,21 @@ using BaseGames.Core.Events;
namespace BaseGames.Core
{
/// <summary>
/// Addressables 场景加载器。
/// 监听 EVT_SceneLoadRequestAdditive 加载指定场景,完成后发布 EVT_SceneLoaded
/// 完整实现由 SceneService 包装调用
/// Addressables 场景加载器(纯工具组件,由 SceneService 驱动)
/// 采用"先加载新、再卸载旧"策略,保证加载失败时旧场景仍可用
/// 加载完成后发布 EVT_SceneLoaded 事件
/// 不直接订阅 SceneLoadRequestEventChannelSO事件分发由 SceneService 负责。
/// </summary>
[DefaultExecutionOrder(-950)]
public class SceneLoader : MonoBehaviour
{
[Header("Event Channels - Listen")]
[SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest;
[Header("Event Channels - Raise")]
[SerializeField] private StringEventChannelSO _onSceneLoaded;
private string _currentRoomScene;
private AsyncOperationHandle<SceneInstance> _currentHandle;
private readonly CompositeDisposable _subs = new();
private void OnEnable()
{
_onSceneLoadRequest?.Subscribe(HandleRequest).AddTo(_subs);
}
private void OnDisable()
{
_subs.Clear();
}
private void HandleRequest(SceneLoadRequest request)
=> StartCoroutine(LoadSceneCoroutine(request));
private IEnumerator LoadSceneCoroutine(SceneLoadRequest request)
public IEnumerator LoadSceneCoroutine(SceneLoadRequest request)
{
// 先加载新场景Additive成功后再卸载旧场景
// 顺序保证:若加载失败,旧场景仍保持可用,不会出现无场景的空状态