/
arti4
/
CourseWork
Обзор
Документация
Войти
/
arti4
/
CourseWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Scriptes/MainMenu.cs
251 строка
8 KB
arti4
Загрузить файлы в «Scriptes»
01 июн 2025, 11:57
01 июн 2025, 11:57
9c49e8f
Код
Авторство
О чём код?
using UnityEngine; using UnityEngine.UI; using UnityEngine.Audio; using TMPro; public class MainMenu : MonoBehaviour { [Header("����� �����")] public GameObject introScreen; [Header("����")] public GameObject mainMenu; public GameObject levelSelectionMenu; public GameObject settingsMenu; public GameObject resetConfirmationPanel; [Header("UI �������� ��������")] public Toggle fullscreenToggle; public TMP_Dropdown resolutionDropdown; public Slider volumeSlider; public Slider musicVolumeSlider; public Toggle skipIntroToggle; [Header("����")] public GameObject background1; public GameObject background2; public GameObject background3; [Header("������")] public GameObject level2Lock; public GameObject level3Lock; public Button level2Button; public Button level3Button; public GameObject level2DarkOverlay; public GameObject level3DarkOverlay; public AudioMixer audioMixer; private AudioManager audioManager; private Resolution[] resolutions; private static bool introAlreadyShownInSession = false; void Start() { bool skipIntro = PlayerPrefs.GetInt("SkipIntro", 0) == 1; skipIntroToggle.isOn = skipIntro; //���������� ������ � ������������ ��� ������� if (!skipIntro && !introAlreadyShownInSession) { introScreen.SetActive(true); } else { introScreen.SetActive(false); mainMenu.SetActive(true); } introAlreadyShownInSession = true; audioManager = Object.FindFirstObjectByType<AudioManager>(); resolutions = Screen.resolutions; resolutionDropdown.ClearOptions(); var options = new System.Collections.Generic.List<string>(); var uniqueResolutions = new System.Collections.Generic.HashSet<string>(); int savedResolutionIndex = PlayerPrefs.GetInt("ResolutionIndex", -1); int currentResolutionIndex = 0; for (int i = 0; i < resolutions.Length; i++) { string option = resolutions[i].width + " x " + resolutions[i].height; if (uniqueResolutions.Add(option)) { options.Add(option); } if (resolutions[i].width == Screen.currentResolution.width && resolutions[i].height == Screen.currentResolution.height) { currentResolutionIndex = options.IndexOf(option); } } resolutionDropdown.AddOptions(options); if (savedResolutionIndex >= 0 && savedResolutionIndex < options.Count) { resolutionDropdown.value = savedResolutionIndex; string[] res = options[savedResolutionIndex].Split('x'); int width = int.Parse(res[0].Trim()); int height = int.Parse(res[1].Trim()); bool isFullscreen = PlayerPrefs.GetInt("Fullscreen", 1) == 1; Screen.SetResolution(width, height, isFullscreen); fullscreenToggle.isOn = isFullscreen; } else { resolutionDropdown.value = currentResolutionIndex; resolutionDropdown.RefreshShownValue(); fullscreenToggle.isOn = Screen.fullScreen; } int levelReached = LevelProgress.GetReachedLevel(); background1.SetActive(levelReached == 1); background2.SetActive(levelReached == 2); background3.SetActive(levelReached >= 3); level2Lock.SetActive(levelReached < 2); level3Lock.SetActive(levelReached < 3); level2DarkOverlay.SetActive(levelReached < 2); level3DarkOverlay.SetActive(levelReached < 3); level2Button.interactable = levelReached > 1; level3Button.interactable = levelReached > 2; volumeSlider.value = PlayerPrefs.GetFloat("Game", 1f); volumeSlider.onValueChanged.AddListener(OnVolumeChanged); musicVolumeSlider.value = PlayerPrefs.GetFloat("Music", 1f); musicVolumeSlider.onValueChanged.AddListener(OnMusicVolumeChanged); if (audioManager != null) { audioManager.SetVolume(volumeSlider.value); audioManager.SetMusicVolume(musicVolumeSlider.value); } } void Update() { if (introScreen.activeSelf && Input.GetKeyDown(KeyCode.Return)) { introScreen.SetActive(false); mainMenu.SetActive(true); } } //���������� ��������� ��������� ���� private void OnVolumeChanged(float value) { if (audioManager != null) { audioManager.SetVolume(value); PlayerPrefs.SetFloat("Game", value); PlayerPrefs.Save(); } } // ���������� ��������� ��������� ������ private void OnMusicVolumeChanged(float value) { if (audioManager != null) { audioManager.SetMusicVolume(value); PlayerPrefs.SetFloat("Music", value); PlayerPrefs.Save(); } } //���� ������� public void OpenLevels() { mainMenu.SetActive(false); levelSelectionMenu.SetActive(true); } //���� �������� public void OpenSettings() { Cursor.visible = true; mainMenu.SetActive(false); settingsMenu.SetActive(true); fullscreenToggle.isOn = PlayerPrefs.GetInt("Fullscreen", 1) == 1; skipIntroToggle.isOn = PlayerPrefs.GetInt("SkipIntro", 0) == 1; int resolutionIndex = PlayerPrefs.GetInt("ResolutionIndex", resolutionDropdown.value); if (resolutionIndex >= 0 && resolutionIndex < resolutionDropdown.options.Count) { resolutionDropdown.value = resolutionIndex; resolutionDropdown.RefreshShownValue(); } volumeSlider.value = PlayerPrefs.GetFloat("Game", 1f); musicVolumeSlider.value = PlayerPrefs.GetFloat("Music", 1f); } //������� � ������� ���� public void BackToMainMenu() { Cursor.visible = true; settingsMenu.SetActive(false); levelSelectionMenu.SetActive(false); mainMenu.SetActive(true); } //����� �� ���� public void ExitGame() { Application.Quit(); #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #endif } //���� ������ ��������� public void ConfirmResetGameProgress() { resetConfirmationPanel.SetActive(true); settingsMenu.SetActive(false); } //�������� ������ ��������� public void OnConfirmResetYes() { LevelProgress.SetLevelToOne(); int levelReached = LevelProgress.GetReachedLevel(); background1.SetActive(levelReached == 1); background2.SetActive(levelReached == 2); background3.SetActive(levelReached >= 3); level2Lock.SetActive(levelReached < 2); level3Lock.SetActive(levelReached < 3); level2Button.interactable = levelReached > 1; level3Button.interactable = levelReached > 2; level2DarkOverlay.SetActive(levelReached < 2); level3DarkOverlay.SetActive(levelReached < 3); resetConfirmationPanel.SetActive(false); settingsMenu.SetActive(true); } //���������� ������ ��������� public void OnConfirmResetNo() { resetConfirmationPanel.SetActive(false); settingsMenu.SetActive(true); } //���������� �������� public void SaveSettings() { Screen.fullScreen = fullscreenToggle.isOn; PlayerPrefs.SetInt("Fullscreen", fullscreenToggle.isOn ? 1 : 0); string[] res = resolutionDropdown.options[resolutionDropdown.value].text.Split('x'); int width = int.Parse(res[0].Trim()); int height = int.Parse(res[1].Trim()); Screen.SetResolution(width, height, fullscreenToggle.isOn); PlayerPrefs.SetInt("ResolutionIndex", resolutionDropdown.value); PlayerPrefs.SetInt("SkipIntro", skipIntroToggle.isOn ? 1 : 0); settingsMenu.SetActive(false); mainMenu.SetActive(true); } }