danil_afan
@danil_afan
НЕопытный разработчик

Как доработать скрипт, так что бы уровень звука был одинаков на всех сценах?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class settingsmenu : MonoBehaviour {
    
    public AudioSource Music;
    public Slider bar;
    

    public void Start()
    {
        
            Music.Play();

        

        
    }
    public void Update()
    {
        AudioListener.volume = bar.value;
        
    }


   
}


Как доработать скрипт, так что бы уровень звука был одинаков на всех сценах?
Сама игра: https://vk.com/app6070955_209422110
  • Вопрос задан
  • 863 просмотра
Решения вопроса 1
MrMureno
@MrMureno Куратор тега Unity
VR for all
Все же давайте отдельный совет , отдельный ответом дам.
У вас сейчас настроики звука сильно связанны с самим компонентом воспроизведения.
По хорошему у вас есть статическая или глобальная (или еще как хотите) структура данных для настроек.
Аля какой-нибудь класс где есть "громкость", "доп эффекты", "выбранный скин" и тп. просто данные.
Меню настроек будет позволять эти данные изменить и сохранить.
А вот скрипт занимающийся воспроизведением - обратиться к этим данным и использует их.

к примеру если назвать класс с настройками GlobalSettings))
public class GlobalSettings
{
 public static float musicVolume;
}

то из него берем громкость для скрипта где управляем музыкой
public void Update()
    {
        AudioListener.volume = GlobalSettings.musicVolume;
        
    }

а вот изменение положение слайдера - будет менять нашу новую глобальную переменную)
float newVolume = //тут как нибудь получаете новое значение 
// к примеру из эвента  ChangeValue() в слайдере..или еще как 
GlobalSettings.musicVolume = newVolume ;


надеюсь я донес общий принцип и смысл того , как я бы сделал настройки
(код писал так из головы, возможны опечатки и неточности, но тут смысл и вариант решения доносил, а не код за вас писал)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@S0HardCore
Передавать volume между сценами с помощью PlayerPrefs.SetFloat/PlayerPrefs.GetFloat.
Ответ написан
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Читайте мануал про Audio Mixer и меняйте громкость не через AudioListener.volume , а с помощью AudioMixer.SetFloat.
Ответ написан
BRO_TIGER
@BRO_TIGER
Indie Developer (C#, JS)
Был одинаков во всех сценах? Не проще указать что уровень звука при старте программы был равен тому уровню который вы напишите? (Предлагаю такую идею)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы