Files
Cielonos/Assets/Scripts/MainGame/GameRun/Map/MapManager.cs
SoulliesOfficial 47125f95f4 地图初步
2026-04-30 07:06:38 -04:00

90 lines
3.0 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;
using System.Collections;
using System.Collections.Generic;
using Cielonos.Core.UI;
using Cielonos.MainGame.Map;
using DG.Tweening;
using SLSUtilities.General;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace Cielonos.MainGame
{
public partial class MapManager : Singleton<MapManager>
{
public MapBaseCollection baseCollection;
public ZoneData currentZoneData;
public ZoneManager currentZoneManager;
public int zoneIndex;
public List<ZoneData> zoneDataList;
public void Start()
{
zoneIndex = 0;
StartCoroutine(SwitchRoomRoutine(zoneDataList[zoneIndex++]));
}
public void GoToNextZone()
{
if (zoneIndex >= zoneDataList.Count)
{
Debug.Log("No more zones to load.");
return;
}
ScreenFader.Instance.FadeToBlack(onComplete : () => StartCoroutine(SwitchRoomRoutine(zoneDataList[zoneIndex++]))).Play();
}
}
public partial class MapManager
{
public static MapBaseCollection BaseCollection => Instance.baseCollection;
}
public partial class MapManager
{
public IEnumerator SwitchRoomRoutine(ZoneData nextZoneData) {
// 1. 发送转场开始事件 (UI显示遮挡特效触发)
//EventManager.Trigger("OnTeleportStart");
// 2. 异步卸载旧场景
if (currentZoneData != null) {
yield return SceneManager.UnloadSceneAsync(currentZoneData.sceneName);
}
currentZoneData = nextZoneData;
// 3. 异步加载新场景
string nextSceneName = nextZoneData.sceneName;
AsyncOperation op = SceneManager.LoadSceneAsync(nextSceneName, LoadSceneMode.Additive);
op.allowSceneActivation = false; // 先不激活等加载到90%
while (op.progress < 0.9f) {
yield return null;
}
op.allowSceneActivation = true; // 允许激活
yield return op; // 等待激活完成
// 4. 设置为活跃场景 (非常重要!)
Scene nextScene = SceneManager.GetSceneByName(nextSceneName);
SceneManager.SetActiveScene(nextScene);
// 5. 将玩家放到出生点
//Player.Instance.TeleportTo(FindObjectOfType<SpawnPoint>().transform.position);
yield return new WaitForEndOfFrame();
BattleManager.AttackAreaSm.Reset();
BattleManager.EnemySm.Reset();
MainGameManager.Player.transform.position = Vector3.zero;
ZoneManager.instance.SetupZone(currentZoneData);
// 6. 发送转场结束事件 (特效消失UI关闭)
//EventManager.Trigger("OnTeleportEnd");
yield return new WaitForSeconds(0.5f);
ScreenFader.Instance.FadeToClear().Play();
}
}
}