using UnityEngine; using BaseGames.Core.Events; using BaseGames.Feedback; namespace BaseGames.UI { /// /// 场景切换黑屏控制器(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) /// [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(); } }