AlicizaX/Client/Packages/com.alicizax.unity.scene/Runtime/Scene/SceneComponent.cs
2025-02-06 17:59:35 +08:00

103 lines
3.9 KiB
C#

using System;
using AlicizaX.Runtime;
using UnityEngine;
using UnityEngine.SceneManagement;
using YooAsset;
namespace AlicizaX.Scene.Runtime
{
/// <summary>
/// 场景管理模块。
/// </summary>
[DisallowMultipleComponent]
[AddComponentMenu("Game Framework/Scene")]
public sealed class SceneComponent : GameFrameworkComponent
{
private ISceneManager _sceneManager;
protected override void Awake()
{
ImplementationComponentType = Utility.Assembly.GetType(componentType);
InterfaceComponentType = typeof(ISceneManager);
base.Awake();
}
/// <summary>
/// 当前主场景名称。
/// </summary>
public string CurrentMainSceneName => _sceneManager.CurrentMainSceneName;
/// <summary>
/// 加载场景。
/// </summary>
/// <param name="location">场景的定位地址</param>
/// <param name="sceneMode">场景加载模式</param>
/// <param name="suspendLoad">加载完毕时是否主动挂起</param>
/// <param name="priority">优先级</param>
/// <param name="callBack">加载回调。</param>
/// <param name="gcCollect">加载主场景是否回收垃圾。</param>
/// <param name="progressCallBack">加载进度回调。</param>
public SceneHandle LoadScene(string location, LoadSceneMode sceneMode = LoadSceneMode.Single, bool suspendLoad = false, int priority = 100,
Action<SceneHandle> callBack = null, bool gcCollect = true, Action<float> progressCallBack = null)
{
return _sceneManager.LoadScene(location, sceneMode, suspendLoad, priority, callBack, gcCollect, progressCallBack);
}
/// <summary>
/// 加载子场景。
/// </summary>
/// <param name="location">场景的定位地址</param>
/// <param name="suspendLoad">加载完毕时是否主动挂起</param>
/// <param name="priority">优先级</param>
/// <param name="callBack">加载回调。</param>
/// <param name="gcCollect">加载主场景是否回收垃圾。</param>
/// <param name="progressCallBack">加载进度回调。</param>
public SceneHandle LoadSubScene(string location, bool suspendLoad = false, int priority = 100,
Action<SceneHandle> callBack = null, bool gcCollect = true, Action<float> progressCallBack = null)
{
return _sceneManager.LoadScene(location, LoadSceneMode.Additive, suspendLoad, priority, callBack, gcCollect, progressCallBack);
}
/// <summary>
/// 激活场景(当同时存在多个场景时用于切换激活场景)。
/// </summary>
/// <param name="location">场景资源定位地址。</param>
/// <returns>是否操作成功。</returns>
public bool ActivateScene(string location)
{
return _sceneManager.ActivateScene(location);
}
/// <summary>
/// 解除场景加载挂起操作。
/// </summary>
/// <param name="location">场景资源定位地址。</param>
/// <returns>是否操作成功。</returns>
public bool UnSuspend(string location)
{
return _sceneManager.UnSuspend(location);
}
/// <summary>
/// 异步卸载子场景。
/// </summary>
/// <param name="location">场景资源定位地址。</param>
/// <returns>场景卸载异步操作类。</returns>
public UnloadSceneOperation UnloadAsync(string location)
{
return _sceneManager.UnloadAsync(location);
}
/// <summary>
/// 是否包含场景。
/// </summary>
/// <param name="location">场景资源定位地址。</param>
/// <returns>是否包含场景。</returns>
public bool IsContainScene(string location)
{
return _sceneManager.IsContainScene(location);
}
}
}