Files
zeling_v2/Assets/_Game/Scripts/UI/SceneFadeController.cs
Joywayer 613f2a4d13 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.
2026-06-03 08:08:27 +08:00

45 lines
1.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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();
}
}