Я сделал ползунок, который регулирует громкость игры в главном меню, но музыка возвращается к нормальной, когда сцена меняется на настоящую игру? - PullRequest
0 голосов
/ 01 января 2019

как я могу сделать так, чтобы изменения, сделанные мной в сцене главного меню, переносились на игровую сцену?

ниже - код, который я использовал для музыкального проигрывателя.

// Reference to Audio Source component
private AudioSource audioSrc;

// Music volume variable that will be modified
// by dragging slider knob
private float musicVolume = 1f;

// Use this for initialization
void Start()
{

    // Assign Audio Source component to control it
    audioSrc = GetComponent<AudioSource>();
}

// Update is called once per frame
void Update()
{

    // Setting volume option of Audio Source to be equal to musicVolume
    audioSrc.volume = musicVolume;
}

// Method that is called by slider game object
// This method takes vol value passed by slider
// and sets it as musicValue
public void SetVolume(float vol)
{
    musicVolume = vol;
}

1 Ответ

0 голосов
/ 01 января 2019

Есть несколько опций

  1. Сделать musicVolume a static, чтобы значение было «общим» для всех экземпляров этого класса.

    private static float musicVolume = 1.0f;
    
  2. Или используйте DontDestroyOnLoad, чтобы всегда использовать один и тот же компонент во всех сценах.

    private void Awake ()
    {
        DontDestroyOnLoad(gameObject);
    }
    

    , но убедитесь, что вывключите этот объект с этим компонентом только один раз в первую сцену, чтобы у вас не было нескольких объектов позже.

  3. Вы можете использовать ScriptableObject для такого рода настроек.Это более мощно, гибко и «ортодоксально», чем использование значения static.

    Это немного сложнее, но оно того стоит.Вот учебник .

    [CreateAssetMenu(fileName = "New SettingsAsset", menuName = "Example/SettingsAsset"]
    public class SettingsAsset : ScriptableObject 
    {
         public float musicVolume = 1.0f;
    }
    

    создайте один SetttingsAsset, щелкнув правой кнопкой мыши в ProjectView (Активы) и в меню найдите Example -> SettingsAsset

    и затем обратитесь к этим настройкам во всех сценах.и компоненты, где это необходимо.В этом случае, например,

    // Reference in the inspector
    public SettingsAsset settings;
    
    // ...
    
    // Though I doubt you would need to do this in Update 
    // If you only change the settings from within a separate settings scene
    // you probably should do this only once
    private void Update()
    {
        audioSrc.volume = settings.musicVolume;
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...