/
arti4
/
CourseWork
Обзор
Документация
Войти
/
arti4
/
CourseWork
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Scriptes/PauseMenu.cs
228 строк
6 KB
arti4
Загрузить файлы в «Scriptes»
01 июн 2025, 11:57
01 июн 2025, 11:57
9c49e8f
Код
Авторство
О чём код?
using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; public class PauseMenu : MonoBehaviour { public GameObject pauseMenu; private bool isPaused = false; [SerializeField] private Shooting shootingScript; [SerializeField] private Crosshair crosshairScript; [SerializeField] private Slider volumeSlider; public Slider musicVolumeSlider; private AudioManager audioManager; [Header("����� �����")] public GameObject introScreen; [Header("���� ������")] public GameObject gameOverMenu; public Button restartButton; public Button mainMenuButton; private bool isDead = false; void Start() { Cursor.visible = false; audioManager = Object.FindFirstObjectByType<AudioManager>(); bool skipIntro = PlayerPrefs.GetInt("SkipIntro", 0) == 1; //����� ������ � ������������ if (!skipIntro) { pauseMenu.SetActive(true); introScreen.SetActive(true); shootingScript.SetPause(true); Time.timeScale = 0f; isPaused = true; if (audioManager != null) audioManager.MuteGameSounds(); audioManager.PauseAudioEffects(); } else { introScreen.SetActive(false); pauseMenu.SetActive(false); shootingScript.SetPause(false); Time.timeScale = 1f; isPaused = false; } restartButton.onClick.AddListener(RestartLevel); mainMenuButton.onClick.AddListener(GoToMainMenu); volumeSlider.onValueChanged.AddListener(OnVolumeChanged); musicVolumeSlider.onValueChanged.AddListener(OnMusicVolumeChanged); float savedVolume = PlayerPrefs.GetFloat("Game", 1f); float savedMusicVolume = PlayerPrefs.GetFloat("Music", 1f); volumeSlider.value = savedVolume; musicVolumeSlider.value = savedMusicVolume; if (audioManager != null) { audioManager.SetVolume(savedVolume); audioManager.SetMusicVolume(savedMusicVolume); } } void Update() { if (isDead) { Cursor.visible = true; return; } if (introScreen.activeSelf) { if (Input.GetKeyDown(KeyCode.Return)) { introScreen.SetActive(false); pauseMenu.SetActive(false); shootingScript.SetPause(false); Time.timeScale = 1f; isPaused = false; if (audioManager != null) audioManager.ResumeAudioEffects(); } if (Input.GetKeyDown(KeyCode.Escape)) { Cursor.visible = false; } return; } if (Input.GetKeyDown(KeyCode.Escape)) { if (isPaused) ResumeGame(); else PauseGame(); } } //��������� ��������� private void OnMusicVolumeChanged(float value) { if (audioManager != null) { audioManager.SetMusicVolume(value); PlayerPrefs.SetFloat("Music", value); PlayerPrefs.Save(); } } //������������ ���� public void PauseGame() { pauseMenu.SetActive(true); Time.timeScale = 0f; isPaused = true; shootingScript.SetPause(true); crosshairScript.SetPause(true); Cursor.visible = true; if (audioManager != null) { audioManager.PauseAudioEffects(); audioManager.MuteGameSounds(); } } //����������� ���� public void ResumeGame() { pauseMenu.SetActive(false); Time.timeScale = 1f; isPaused = false; shootingScript.SetPause(false); crosshairScript.SetPause(false); Cursor.visible = false; if (audioManager != null) { audioManager.ResumeAudioEffects(); audioManager.UnmuteGameSounds(); } } //������� � ������� ���� public void ReturnToMainMenu() { Cursor.visible = true; Time.timeScale = 1f; SceneManager.LoadScene("SampleScene"); if (audioManager != null) { audioManager.ResumeAudio(); } } //��������� ��������� private void OnVolumeChanged(float value) { if (audioManager != null) { audioManager.SetVolume(value); PlayerPrefs.SetFloat("Game", value); PlayerPrefs.Save(); } } //����������� ���� ������ public void ShowGameOverMenu() { pauseMenu.SetActive(false); introScreen.SetActive(false); Cursor.lockState = CursorLockMode.None; Cursor.visible = true; gameOverMenu.SetActive(true); Time.timeScale = 0f; shootingScript.SetPause(true); crosshairScript.SetPause(true); isDead = true; if (audioManager != null) { audioManager.PauseAudioEffects(); audioManager.MuteGameSounds(); } } //���������� ������ public void RestartLevel() { gameOverMenu.SetActive(false); Time.timeScale = 1f; isDead = false; SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); } private void RestartLevelFromPause() { pauseMenu.SetActive(false); introScreen.SetActive(false); Time.timeScale = 1f; SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); } //������� � ������� ���� private void GoToMainMenu() { Time.timeScale = 1f; SceneManager.LoadScene("SampleScene"); } //������ ������ public void PlayerDied() { if (!isDead) { ShowGameOverMenu(); isDead = true; } } }