Задача: разработать экран меню, который активируется при нажатии клавиши ESC. Это приостановит игру и позволит пользователям регулировать громкость и яркость.
Сегодняшний проект заключается в работе с инструментами пользовательского интерфейса Unity для создания меню паузы с использованием ползунков пользовательского интерфейса для аудио и яркости, а также с использованием Time.timeScale, чтобы приостанавливать игру всякий раз, когда пользователь нажимает ESC.
Настройка слайдера
Ползунок аудио: значения варьируются от -80 до 20. Эти значения устанавливаются для аудиомикшера, который управляет громкостью фоновой музыки.
Ползунок яркости. Значения варьируются от 0 до 1. Эти значения управляют альфа-каналом для темного наложения на холсте.
Настройка сцены
Иерархия сцены состоит из одного холста с двумя основными объектами DarkOverlay и меню паузы. ” на заднем плане со сферами, падающими с неба по бесконечной петле, менеджером игры и музыкальным игровым объектом.
DarkOverlay: это изображение черного цвета, которое закрывает вид сцены игры. Альфа-шкала установлена на ноль и будет регулироваться с помощью скрипта, действуя как яркость.
Главное меню (Пауза)
Содержит фоновое изображение, два ползунка, один для яркости и один для звука, и одну кнопку для выхода из меню. К меню паузы прикреплен скрипт, содержащий функции для приостановки игры.
using UnityEngine; public class PauseFunction : MonoBehaviour { private void OnEnable() { Time.timeScale = 0.0f; } private void OnDisable() { Time.timeScale = 1.0f; } }
Менеджер игры
Содержит скрипт для активации меню паузы. Этот сценарий содержит все ползунки, изображения наложения и ссылки на аудиомикшер. С помощью этих ссылок создаются функции для настройки звуковых значений и альфа-каналов и обработки ввода пользователя при нажатии ESC, включая и отключая меню паузы.
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEngine.Audio; public class PauseMenu : MonoBehaviour { [SerializeField] private GameObject _pauseMenu; [SerializeField] private Slider _brightnessSlider; [SerializeField] private Slider _volumeSlider; [SerializeField] private AudioMixer _volumeMixer; [SerializeField] private Image _overLay; private bool _isPauseMenuActive = false; void Start() { _pauseMenu.SetActive(false); } // Update is called once per frame void Update() { if (Input.GetKeyUp(KeyCode.Escape)) { PauseMenuSwitch(); } DarkOverlay(); AdjustVolume(); } private void PauseMenuSwitch() { if(!_isPauseMenuActive) { _pauseMenu.SetActive(true); _isPauseMenuActive=true; } else if(_isPauseMenuActive){ _pauseMenu.SetActive(false); _isPauseMenuActive=false; } } private void DisableMainMenu() { _pauseMenu.SetActive(false); } private void AdjustVolume() { _volumeMixer.SetFloat("BG_Music", _volumeSlider.value); } private void DarkOverlay(){ var tempColor = _overLay.color; tempColor.a = _brightnessSlider.value; _overLay.color = tempColor; } }
Музыкальный объект: содержит источник звука для фоновой музыки и связан с аудиомикшером.
Бесконечный цикл
Содержит объекты сцены, полы, стены и сферы. Скрипт бесконечного цикла, который случайным образом сбрасывает сферы из определенного места, прикреплен к игровому объекту.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class EndlessLoop : MonoBehaviour { [SerializeField] GameObject[] _spheres; [SerializeField] Transform _spawnPoint; void Update() { foreach(var spheres in _spheres) { if (spheres.transform.position.y <= 0.5) { spheres.transform.position = new Vector3(Random.Range(0,3f),_spawnPoint.position.y,_spawnPoint.position.z); } } } }
Заключение
В заключение со всеми этими компонентами и скриптами я создал простое меню, позволяющее пользователю поставить игру на паузу и настроить параметры громкости и яркости.