feat: Enhance scene transition management and HUD scaffolding

- Added RequestTransition method to ISceneService for direct scene transition requests without needing Inspector SO references.
- Updated DoorTransition and RoomTransition to utilize the new RequestTransition method via ServiceLocator.
- Introduced SceneFadeController to manage scene fade effects during transitions, with event channel integration for fade requests.
- Created HUDScaffoldWizard to automate HUD Canvas setup, including various UI elements and event channel bindings.
- Updated assembly definitions to include necessary dependencies for new UI components.
- Added Streaming assets for budget configuration to optimize scene loading and memory management.
This commit is contained in:
2026-06-03 08:08:27 +08:00
parent d27ae9407d
commit 613f2a4d13
15 changed files with 1285 additions and 64 deletions

View File

@@ -1,3 +1,4 @@
using BaseGames.Core;
using BaseGames.Core.Events;
using UnityEngine;
@@ -38,9 +39,6 @@ namespace BaseGames.World
[SerializeField] private bool _requiresKeyItem; // 是否需要持有指定钥匙物品
[SerializeField] private string _requiredItemId; // 钥匙物品 ID_requiresKeyItem = true 时生效)
[Header("事件频道")]
[SerializeField] private SceneLoadRequestEventChannelSO _onSceneLoadRequest;
[Header("世界状态")]
[SerializeField] private WorldStateRegistry _worldState;
@@ -66,14 +64,23 @@ namespace BaseGames.World
{
if (_requiresKeyItem && !HasItem(_requiredItemId)) return;
_onSceneLoadRequest?.Raise(new SceneLoadRequest
var request = new SceneLoadRequest
{
SceneName = _targetSceneAddress,
EntryTransitionId = _targetTransitionId,
TransitionType = _transitionType,
ShowLoadingScreen = _transitionType == TransitionType.Scene,
IsRespawn = false,
});
};
var sceneService = ServiceLocator.GetOrDefault<ISceneService>();
if (sceneService != null)
{
sceneService.RequestTransition(request);
return;
}
Debug.LogWarning("[RoomTransition] 无法发送过渡请求ISceneService 未在 ServiceLocator 中注册。", this);
}
/// <summary>检查玩家是否持有指定物品(通过 WorldStateRegistry.IsCollected 检查)。</summary>