88 lines
3.1 KiB
C#
88 lines
3.1 KiB
C#
using System.Collections;
|
|
using UnityEngine;
|
|
using BigSpace.XRCore.Base;
|
|
using UnityEngine.SceneManagement;
|
|
using BigSpace.XRCore.Scene;
|
|
using System;
|
|
using BigSpace.XRCore.Event;
|
|
using BigSpace.Logic;
|
|
|
|
public class SceneMgr : MonoSingleton<SceneMgr>
|
|
{
|
|
private Coroutine _currentCoroutine; // 当前正在进行的场景切换协程
|
|
private ISceneDataProvider _sceneDataProvider; // 场景数据提供者
|
|
private string _sceneName;
|
|
public int nowSceneId = 0; //当前正式的场景(不包括中间过度场景)
|
|
public bool isCanMove = true;//是否可以用手柄走动
|
|
public bool isTrigger = false;
|
|
/// <summary>
|
|
/// 初始化场景管理器
|
|
/// </summary>
|
|
/// <param name="sceneDataProvider">场景数据提供接口</param>
|
|
public void Initialize(ISceneDataProvider sceneDataProvider)
|
|
{
|
|
_sceneDataProvider = sceneDataProvider;
|
|
}
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
SceneManager.sceneLoaded += OnSceneLoaded;
|
|
}
|
|
|
|
|
|
private void OnSceneLoaded(Scene arg0, LoadSceneMode arg1)
|
|
{
|
|
if (_sceneName == arg0.name)
|
|
{
|
|
//Debug.Log("======================清了内存");
|
|
Resources.UnloadUnusedAssets();
|
|
GC.Collect();
|
|
}
|
|
}
|
|
|
|
public void LoadScene(int sceneId)
|
|
{
|
|
if (_currentCoroutine != null)
|
|
{
|
|
Debug.LogWarning("A scene transition is already in progress.");
|
|
return;
|
|
}
|
|
// 获取场景数据
|
|
var loadingData = _sceneDataProvider.GetLoadingSceneData(sceneId);
|
|
if (_sceneName != null && _sceneName == loadingData.SceneName) //同一个场景就不跳转
|
|
return;
|
|
|
|
_sceneName = loadingData.SceneName;
|
|
Debug.Log("开始跳转场景"+ _sceneName);
|
|
GlobalEventMgr.Dispatch(GameEvent.EventSetHandMove, 1);
|
|
_currentCoroutine = PersistenceCoroutineMgr.Instance.StartCoroutine(HandleSceneTransition(loadingData));
|
|
}
|
|
|
|
public IEnumerator HandleSceneTransition(SceneData loadingData)
|
|
{
|
|
// 淡出
|
|
GlobalEventMgr.Dispatch(GameEvent.EventChangeScence);
|
|
ChangSceneSphereMgr.Instance.ShowChangeSecne(true);
|
|
yield return new WaitForSeconds(GameDataManage.Instance.outFadeTime);
|
|
//Debug.Log("ok淡出===========================" + loadingData.id + "||" + loadingData.LoadingSceneName + "||" + loadingData.SceneName);
|
|
if (!string.IsNullOrEmpty(loadingData.LoadingSceneName))
|
|
{
|
|
yield return SceneManager.LoadSceneAsync(loadingData.LoadingSceneName);
|
|
|
|
//旧UI相关
|
|
//if (loadingData.SceneName != "Waiting" && loadingData.SceneName != "Scene_07") //关于等待出场景文字
|
|
//{
|
|
// //Debug.Log("跳谁:" + loadingData.id + "||" + loadingData.SceneName);
|
|
// GlobalEventMgr.Dispatch(GameEvent.EventShowUI, loadingData.id % 10000);
|
|
|
|
// yield return new WaitForSeconds(4f);
|
|
//}
|
|
}
|
|
|
|
//Debug.Log("开始跳目标场景.................."+ loadingData.SceneName);
|
|
yield return SceneManager.LoadSceneAsync(loadingData.SceneName);
|
|
_currentCoroutine = null;
|
|
}
|
|
}
|