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; } public UniTask LoadSceneAsync(string sceneName,CancellationToken cancellationToken, LoadSceneMode loadSceneMode = LoadSceneMode.Additive, bool activateOnLoad = true); /// /// 开始加载场景的回调 /// event Action OnLoadScene; /// /// 加载场景进度的回调 /// event Action OnSceneLoadProgress; /// /// 场景加载完成的回调 /// event Action OnSceneLoaded; } /// /// 场景服务代理实现,主要用于快速继承 /// public abstract class SceneServiceImplement:ISceneService { 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 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; } } }