This commit is contained in:
Даниил Заикин
2026-06-17 20:44:53 +03:00
parent 9d153773c2
commit b133e7c656
1880 changed files with 244545 additions and 0 deletions
@@ -0,0 +1,83 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
using UnityEngine.SceneManagement;
#if UNITY_EDITOR
using UnityEditor;
using UnityEditor.SceneManagement;
#endif
namespace QFSW.QC.Utilities
{
public static class SceneUtilities
{
public static IEnumerable<Scene> GetScenesInBuild()
{
int sceneCount = SceneManager.sceneCountInBuildSettings;
for (int i = 0; i < sceneCount; i++)
{
yield return SceneManager.GetSceneByBuildIndex(i);
}
}
public static IEnumerable<Scene> GetLoadedScenes()
{
int sceneCount = SceneManager.sceneCount;
for (int i = 0; i < sceneCount; i++)
{
yield return SceneManager.GetSceneAt(i);
}
}
public static IEnumerable<Scene> GetAllScenes()
{
return GetScenesInBuild();
}
public static IEnumerable<string> GetAllScenePaths()
{
int sceneCount = SceneManager.sceneCountInBuildSettings;
for (int i = 0; i < sceneCount; i++)
{
yield return SceneUtility.GetScenePathByBuildIndex(i);
}
}
public static IEnumerable<string> GetAllSceneNames()
{
return GetAllScenePaths().Select(Path.GetFileNameWithoutExtension);
}
public static AsyncOperation LoadSceneAsync(string sceneName, LoadSceneMode mode)
{
#if UNITY_EDITOR
string scenePath = sceneName;
Scene scene = SceneManager.GetSceneByName(sceneName);
if (scene.IsValid())
{
scenePath = scene.path;
}
else if (!Path.HasExtension(sceneName))
{
scenePath = GetAllScenePaths()
.FirstOrDefault(x => Path.GetFileNameWithoutExtension(x) == sceneName);
}
if (!File.Exists(scenePath))
{
throw new InvalidOperationException(
$"Cannot load scene '{sceneName}' as it is not present in the build settings or the AssetDatabase");
}
LoadSceneParameters parameters = new LoadSceneParameters {loadSceneMode = mode};
return EditorSceneManager.LoadSceneAsyncInPlayMode(scenePath, parameters);
#else
return SceneManager.LoadSceneAsync(sceneName, mode);
#endif
}
}
}