Аудио ошибка в Unity со скриптами - PullRequest
0 голосов
/ 10 мая 2018

Я строю игру на единстве на реальной старой версии, такой как 5.3.У меня есть основная сцена и сцена меню. Каждая сцена имеет скрипт менеджера аудио, который управляет аудио.Моя проблема с этой функцией под названием DontDestroyOnLoad.Точнее говоря, проблема в том, что когда я создаю игру, игра работает отлично, и меню тоже, но в меню есть звуки, а в игре нет. В игре есть только некоторые звуки, которые отсутствуют в аудио менеджере, и я поставил их вручную.

Мой код аудио-менеджера здесь

using UnityEngine;

[System.Serializable]
public class Sound
{

    public string name;
    public AudioClip clip;

    [Range(0f, 1f)]
    public float volume = 0.7f;
    [Range(0.5f, 1.5f)]
    public float pitch = 1f;

    [Range(0f, 0.5f)]
    public float randomVolume = 0.1f;
    [Range(0f, 0.5f)]
    public float randomPitch = 0.1f;

    public bool loop = false;

    private AudioSource source;

    public void SetSource(AudioSource _source)
    {
        source = _source;
        source.clip = clip;
        source.loop = loop;
    }

    public void Play()
    {
        source.volume = volume * (1 + Random.Range(-randomVolume / 2f, randomVolume / 2f));
        source.pitch = pitch * (1 + Random.Range(-randomPitch / 2f, randomPitch / 2f));
        source.Play();
    }

    public void Stop()
    {
        source.Stop();
    }

}

public class AudioManager : MonoBehaviour
{

    public static AudioManager instance;

    [SerializeField]
    Sound[] sounds;

    void Awake()
    {
        if (instance != null)
        {
            if (instance != this)
            {

                Destroy(this.gameObject);
            }
        }
        else
        {
            instance = this;
            DontDestroyOnLoad(this);
        }
    }

    void Start()
    {
        for (int i = 0; i < sounds.Length; i++)
        {
            GameObject _go = new GameObject("Sound_" + i + "_" + sounds[i].name);
            _go.transform.SetParent(this.transform);
            sounds[i].SetSource(_go.AddComponent<AudioSource>());
        }

        PlaySound("Music");

    }

    public void PlaySound(string _name)
    {
        for (int i = 0; i < sounds.Length; i++)
        {
            if (sounds[i].name == _name)
            {
                sounds[i].Play();
                return;
            }
        }

        // no sound with _name
        Debug.LogWarning("AudioManager: Sound not found in list, " + _name);
    }

    public void StopSound(string _name)
    {
        for (int i = 0; i < sounds.Length; i++)
        {
            if (sounds[i].name == _name)
            {
                sounds[i].Stop();
                return;
            }
        }

        // no sound with _name
        Debug.LogWarning("AudioManager: Sound not found in list, " + _name);
    }

}

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Необходимо указать, что DontDestroyOnLoad будет влиять на сам gameObject, а не только на MonoBehaviour.

void Awake()
{
    if (instance != null)
    {
        if (instance != this)
        {

            Destroy(this.gameObject);
        }
    }
    else
    {
        instance = this;
        DontDestroyOnLoad(this.gameObject); // <-- Here
    }
}
0 голосов
/ 11 мая 2018

Возможно, вам может понадобиться использовать DontDestroyOnLoad (gameobject);Вместо использования это в качестве параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...