using System; using System.Collections; using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.SceneManagement; namespace BITKit.SceneManagement { /// /// 场景服务,负责场景的加载和卸载 /// public interface ISceneService { /// /// 在场景加载完成后,是否初始化主场景 /// bool InitializeMainSceneOnLoad { get; } /// /// 加载场景 /// /// 场景名称,通常为AddressablePath /// 取消令牌 /// 加载模式 /// 加载完成后激活 /// public UniTask LoadSceneAsync(string sceneName,CancellationToken cancellationToken, LoadSceneMode loadSceneMode = LoadSceneMode.Additive, bool activateOnLoad = true); public UniTask UnloadSceneAsync(string sceneName,CancellationToken cancellationToken); /// /// 开始加载场景的回调 /// event Action OnLoadScene; /// /// 加载场景进度的回调 /// event Action OnSceneLoadProgress; /// /// 场景加载完成的回调 /// event Action OnSceneLoaded; /// /// 当开始卸载场景时 /// event Action OnUnloadScene; /// /// 当场景卸载完成时 /// event Action OnSceneUnloaded; } /// /// 场景服务代理实现,主要用于快速继承 /// public abstract class SceneServiceImplement:ISceneService { private ISceneService _sceneServiceImplementation1 => _sceneServiceImplementation; protected abstract ISceneService _sceneServiceImplementation { get; } public bool InitializeMainSceneOnLoad => _sceneServiceImplementation.InitializeMainSceneOnLoad; public UniTask LoadSceneAsync(string sceneName,CancellationToken cancellationToken, LoadSceneMode loadSceneMode = LoadSceneMode.Additive, bool activateOnLoad = true) { return _sceneServiceImplementation.LoadSceneAsync(sceneName,cancellationToken, loadSceneMode, activateOnLoad); } public UniTask UnloadSceneAsync(string sceneName, CancellationToken cancellationToken) { return _sceneServiceImplementation1.UnloadSceneAsync(sceneName, cancellationToken); } public event Action OnLoadScene { add => _sceneServiceImplementation.OnLoadScene += value; remove => _sceneServiceImplementation.OnLoadScene -= value; } public event Action OnSceneLoadProgress { add => _sceneServiceImplementation.OnSceneLoadProgress += value; remove => _sceneServiceImplementation.OnSceneLoadProgress -= value; } public event Action OnSceneLoaded { add => _sceneServiceImplementation.OnSceneLoaded += value; remove => _sceneServiceImplementation.OnSceneLoaded -= value; } public event Action OnUnloadScene { add => _sceneServiceImplementation1.OnUnloadScene += value; remove => _sceneServiceImplementation1.OnUnloadScene -= value; } public event Action OnSceneUnloaded { add => _sceneServiceImplementation1.OnSceneUnloaded += value; remove => _sceneServiceImplementation1.OnSceneUnloaded -= value; } } }