Задача: разработать экран меню, который активируется при нажатии клавиши 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);
            }
        }
    }
}

Заключение

В заключение со всеми этими компонентами и скриптами я создал простое меню, позволяющее пользователю поставить игру на паузу и настроить параметры громкости и яркости.