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

@@ -0,0 +1,44 @@
using UnityEngine;
using BaseGames.Core.Events;
using BaseGames.Feedback;
namespace BaseGames.UI
{
/// <summary>
/// 场景切换黑屏控制器Persistent 场景)。
/// 监听 EVT_FadeOutRequest / EVT_FadeInRequest调用对应 SceneFeedback.Play()。
/// 实际视觉效果(黑幕、淡入淡出动画等)完全由 SceneFeedback 内部的 MMF_Player 配置决定。
///
/// 挂载位置Persistent 场景 → [UI] → SYS_SceneFade
///
/// 配置步骤:
/// 1. 创建两个带 MMF_Player 的 SceneFeedback淡出 / 淡入),在 MMF_Player 中配置所需效果
/// 2. 将淡出 SceneFeedback 拖入 _fadeOut淡入 SceneFeedback 拖入 _fadeIn
/// 3. 将 EVT_FadeOutRequest / EVT_FadeInRequest 拖入对应频道槽
/// 4. MMF_Player 总时长应 ≤ SceneService._sceneFadeDuration默认 0.4 s
/// </summary>
[AddComponentMenu("BaseGames/UI/Scene Fade Controller")]
public class SceneFadeController : MonoBehaviour
{
[Header("Feedback")]
[SerializeField] private SceneFeedback _fadeOut;
[SerializeField] private SceneFeedback _fadeIn;
[Header("事件频道")]
[SerializeField] private VoidEventChannelSO _onFadeOutRequest;
[SerializeField] private VoidEventChannelSO _onFadeInRequest;
private readonly CompositeDisposable _subs = new();
private void OnEnable()
{
_onFadeOutRequest?.Subscribe(OnFadeOut).AddTo(_subs);
_onFadeInRequest?.Subscribe(OnFadeIn).AddTo(_subs);
}
private void OnDisable() => _subs.Clear();
private void OnFadeOut() => _fadeOut?.Play();
private void OnFadeIn() => _fadeIn?.Play();
}
}