Files
PrinceOfGlory/Assets/Scripts/XRCore/Scene/SceneMgr.cs
Sora丶kong 2f0862b382 修复报错
2026-03-03 11:32:30 +08:00

89 lines
3.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}