Название в значительной степени подводит итог моей проблемы. Я использую сценарий AudioManager
для воспроизведения одного из звуков из массива. Кажется, что все переменные были назначены правильно, и я могу получить доступ ко всем свойствам AudioSource
. Однако, когда я звоню Play()
, в редакторе нет звука. Я также проверил это, вручную добавив один AudioSource
компонент и вызвав AudioSource.Play()
из моего метода play (закомментированная строка в Play()
), и он работает просто отлично. Ниже приведены два сценария, о которых идет речь. Я не получаю ошибок или предупреждений.
Я использую Unity 2019.3.3f
Обновление: Итак, я обнаружил проблему, переменная высоты тона класса Sound была неинициализирована, поэтому по умолчанию 0.
public class AudioManager : MonoBehaviour
{
public Sound[] sounds;
public static AudioManager instance;
void Awake()
{
DontDestroyOnLoad(gameObject);
if (instance == null) instance = this;
else
{
Destroy(gameObject);
return;
}
foreach (Sound s in sounds)
{
s.audioSource = gameObject.AddComponent<AudioSource>();
s.audioSource.clip = s.clip;
s.audioSource.volume = s.volume;
s.audioSource.pitch = s.pitch;
s.audioSource.playOnAwake = s.playOnAwake;
}
}
public void Play(string name)
{
Sound s = Array.Find(sounds, sound => sound.name == name);
s.audioSource.Play();
// gameObject.GetComponent<AudioSource>().Play();
}
}
[System.Serializable]
public class Sound
{
public string name;
public AudioClip clip;
[Range(0f, 1f)] public float volume;
[Range(-3f, 3f)] public float pitch;
public bool playOnAwake = false;
[HideInInspector] public AudioSource audioSource;
}