/
crypt
/
NumbersPlay
Обзор
Документация
Войти
/
crypt
/
NumbersPlay
Код
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Assets/PluginYourGames/Scripts/InfoYG/Editor/ExampleScenes.cs
164 строки
6 KB
Crypt
start
16 ноя 2025, 14:28
16 ноя 2025, 14:28
1482007
Код
Авторство
О чём код?
using System.Collections.Generic; using System.IO; using System.Linq; using UnityEditor; using UnityEngine; namespace YG.EditorScr { public static class ExampleScenes { public static string[] sceneNames = new string[0]; private const string FILE_NAME_SCENES_LIST = "DemoSceneNames"; private static string FILE_PATH_SCENES_LIST { get { return $"{InfoYG.PATCH_PC_YG2}/Example/Resources/{FILE_NAME_SCENES_LIST}.txt"; } } public static void LoadSceneList() { TextAsset sceneListFile = Resources.Load<TextAsset>(FILE_NAME_SCENES_LIST); if (sceneListFile != null) { string fileContent = sceneListFile.text; sceneNames = fileContent.Split(new[] { '\r', '\n' }, System.StringSplitOptions.RemoveEmptyEntries); } else { sceneNames = new string[0]; } } public static void AddScenesToBuildSettings() { RemoveScenesFromBuildSettings(); if (!Directory.Exists($"{InfoYG.PATCH_PC_YG2}/Example")) { #if RU_YG2 EditorUtility.DisplayDialog($"Сообщение", "Демо материалы были удалены!", "Ok"); #else EditorUtility.DisplayDialog($"Message", "The demo materials have been deleted!", "Ok"); #endif return; } List<string> scenePathsToAdd = GetScenesModules(); sceneNames = scenePathsToAdd.ToArray(); EditorBuildSettingsScene[] existingScenes = EditorBuildSettings.scenes; foreach (EditorBuildSettingsScene existScene in existingScenes) { for (int i = scenePathsToAdd.Count - 1; i >= 0; i--) { if (scenePathsToAdd[i] == existScene.path) scenePathsToAdd.RemoveAt(i); } } EditorBuildSettingsScene[] newScenes = new EditorBuildSettingsScene[scenePathsToAdd.Count + existingScenes.Length]; for (int i = 0; i < scenePathsToAdd.Count; i++) newScenes[i] = new EditorBuildSettingsScene(scenePathsToAdd[i], true); for (int i = 0; i < existingScenes.Length; i++) newScenes[scenePathsToAdd.Count + i] = existingScenes[i]; EditorBuildSettings.scenes = newScenes; using (StreamWriter writer = new StreamWriter(FILE_PATH_SCENES_LIST, false)) { for (int i = 0; i < sceneNames.Length; i++) { int lastSlashIndex = sceneNames[i].LastIndexOf('/'); sceneNames[i] = sceneNames[i].Substring(lastSlashIndex + 1).Replace(".unity", string.Empty); writer.WriteLine(sceneNames[i]); } } AssetDatabase.Refresh(); } public static void RemoveScenesFromBuildSettings() { List<string> scenePathsToRemove = GetScenesModules(); EditorBuildSettingsScene[] existingScenes = EditorBuildSettings.scenes; List<EditorBuildSettingsScene> remainingScenes = new List<EditorBuildSettingsScene>(); foreach (var scene in existingScenes) { bool contains = false; for (int i = 0; i < scenePathsToRemove.Count; i++) { if (scene.path == scenePathsToRemove[i]) { contains = true; break; } } if (!contains) remainingScenes.Add(scene); } EditorBuildSettings.scenes = remainingScenes.ToArray(); sceneNames = new string[0]; using (FileStream fs = new FileStream(FILE_PATH_SCENES_LIST, FileMode.Truncate)) { } AssetDatabase.Refresh(); } public static List<string> GetScenesModules() { List<string> scenePathsToAdd = new List<string>(); string patchExample = $"{InfoYG.PATCH_PC_YG2}/Example"; if (!Directory.Exists(patchExample)) { return scenePathsToAdd; } else { string directory = $"{patchExample}/Resources"; string file = $"{directory}/DemoSceneNames.txt"; if (!File.Exists(file)) { Directory.CreateDirectory(directory); FileYG.WriteAllText(file, string.Empty); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } } List<string> directories = new List<string> { $"{InfoYG.PATCH_PC_YG2}" }; directories.AddRange(Directory.GetDirectories(InfoYG.PATCH_PC_MODULES).ToList()); foreach (string directory in directories) { string dir = directory + "/Example/Scenes"; if (!Directory.Exists(dir)) continue; string[] files = Directory.GetFiles(dir); IEnumerable<string> sceneFiles = files.Where(file => Path.GetExtension(file).Equals(".unity", System.StringComparison.OrdinalIgnoreCase)); List<string> sceneList = sceneFiles.ToList(); for (int i = 0; i < sceneList.Count; i++) { sceneList[i] = sceneList[i].Remove(0, Application.dataPath.Length - 6); sceneList[i] = sceneList[i].Replace("\\", "/"); } scenePathsToAdd.AddRange(sceneList); } return scenePathsToAdd; } } }