/
KasatkinGV
/
CourseWork
Обзор
Документация
Войти
/
KasatkinGV
/
CourseWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
PauseMenuController.cs
119 строк
3 KB
KasatkinGV
upload files
11 июн 2025, 01:06
11 июн 2025, 01:06
3efd0d1
Код
Авторство
О чём код?
using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; using System.Collections; public class PauseMenuController : MonoBehaviour { public static bool IsPaused { get; private set; } [SerializeField] private GameObject pauseMenuUI; [SerializeField] private GameObject deathPanelUI; [SerializeField] private GameObject winPanelUI; [Header("Win Menu Buttons")] [SerializeField] private Button nextLevelButton; private const int LAST_LEVEL_BUILD_INDEX = 7; private void Update() { if (Input.GetKeyDown(KeyCode.Escape) && !deathPanelUI.activeSelf && !winPanelUI.activeSelf) { if (IsPaused) Resume(); else Pause(); } } public void Resume() { pauseMenuUI.SetActive(false); deathPanelUI.SetActive(false); winPanelUI.SetActive(false); Time.timeScale = 1f; IsPaused = false; } public void Pause() { pauseMenuUI.SetActive(true); Time.timeScale = 0f; IsPaused = true; } public void ShowDeathMenu() { deathPanelUI.SetActive(true); Time.timeScale = 0f; IsPaused = true; } public void ShowWinMenu() { int currentLevelIndex = SceneManager.GetActiveScene().buildIndex; nextLevelButton.gameObject.SetActive(currentLevelIndex < LAST_LEVEL_BUILD_INDEX); winPanelUI.SetActive(true); Time.timeScale = 0f; IsPaused = true; } public void RestartLevel() { StartCoroutine(LoadSceneAfterUnpause(SceneManager.GetActiveScene().buildIndex)); } public void GoToMainMenu() { StartCoroutine(LoadSceneAfterUnpause("MainMenu")); } public void GoToLevelSelect() { StartCoroutine(LoadSceneAfterUnpause("LevelSelect")); } public void LoadNextLevel() { int nextIndex = SceneManager.GetActiveScene().buildIndex + 1; if (nextIndex <= LAST_LEVEL_BUILD_INDEX) { StartCoroutine(LoadSceneAfterUnpause(nextIndex)); } } private IEnumerator LoadSceneAfterUnpause(int index) { Time.timeScale = 1f; yield return null; SceneManager.LoadScene(index); } private IEnumerator LoadSceneAfterUnpause(string sceneName) { Time.timeScale = 1f; yield return null; SceneManager.LoadScene(sceneName); } private void OnEnable() { SceneManager.sceneLoaded += OnSceneLoaded; } private void OnDisable() { SceneManager.sceneLoaded -= OnSceneLoaded; } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { Time.timeScale = 1f; IsPaused = false; } }