89 lines
3.4 KiB
C#
89 lines
3.4 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; // <20><>ǰ<EFBFBD><C7B0><EFBFBD>ڽ<EFBFBD><DABD>еij<D0B5><C4B3><EFBFBD><EFBFBD>л<EFBFBD>Э<EFBFBD><D0AD>
|
||
private ISceneDataProvider _sceneDataProvider; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṩ<EFBFBD><E1B9A9>
|
||
private string _sceneName;
|
||
public int nowSceneId = 0; //<2F><>ǰ<EFBFBD><C7B0>ʽ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>(<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>м<EFBFBD><D0BC><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD>)
|
||
public bool isCanMove = true;//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1>߶<EFBFBD>
|
||
public bool isTrigger = false;
|
||
public bool handisactive = false;
|
||
/// <summary>
|
||
/// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
/// </summary>
|
||
/// <param name="sceneDataProvider"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṩ<EFBFBD>ӿ<EFBFBD></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("======================<3D><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>");
|
||
Resources.UnloadUnusedAssets();
|
||
GC.Collect();
|
||
}
|
||
}
|
||
|
||
public void LoadScene(int sceneId)
|
||
{
|
||
if (_currentCoroutine != null)
|
||
{
|
||
Debug.LogWarning("A scene transition is already in progress.");
|
||
return;
|
||
}
|
||
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
var loadingData = _sceneDataProvider.GetLoadingSceneData(sceneId);
|
||
if (_sceneName != null && _sceneName == loadingData.SceneName) //ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>ת
|
||
return;
|
||
|
||
_sceneName = loadingData.SceneName;
|
||
isTrigger = false;
|
||
Debug.Log("<22><>ʼ<EFBFBD><CABC>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>"+ _sceneName);
|
||
GlobalEventMgr.Dispatch(GameEvent.EventSetHandMove, 1);
|
||
_currentCoroutine = PersistenceCoroutineMgr.Instance.StartCoroutine(HandleSceneTransition(loadingData));
|
||
}
|
||
|
||
public IEnumerator HandleSceneTransition(SceneData loadingData)
|
||
{
|
||
// <20><><EFBFBD><EFBFBD>
|
||
GlobalEventMgr.Dispatch(GameEvent.EventChangeScence);
|
||
ChangSceneSphereMgr.Instance.ShowChangeSecne(true);
|
||
yield return new WaitForSeconds(GameDataManage.Instance.outFadeTime);
|
||
//Debug.Log("ok<6F><6B><EFBFBD><EFBFBD>===========================" + loadingData.id + "||" + loadingData.LoadingSceneName + "||" + loadingData.SceneName);
|
||
if (!string.IsNullOrEmpty(loadingData.LoadingSceneName))
|
||
{
|
||
yield return SceneManager.LoadSceneAsync(loadingData.LoadingSceneName);
|
||
|
||
//<2F><>UI<55><49><EFBFBD>
|
||
//if (loadingData.SceneName != "Waiting" && loadingData.SceneName != "Scene_07") //<2F><><EFBFBD>ڵȴ<DAB5><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
//{
|
||
// //Debug.Log("<22><>˭:" + loadingData.id + "||" + loadingData.SceneName);
|
||
// GlobalEventMgr.Dispatch(GameEvent.EventShowUI, loadingData.id % 10000);
|
||
|
||
// yield return new WaitForSeconds(4f);
|
||
//}
|
||
}
|
||
|
||
//Debug.Log("<22><>ʼ<EFBFBD><CABC>Ŀ<EFBFBD>곡<EFBFBD><EAB3A1>.................."+ loadingData.SceneName);
|
||
yield return SceneManager.LoadSceneAsync(loadingData.SceneName);
|
||
_currentCoroutine = null;
|
||
}
|
||
}
|