2015-12-16 3 views
4

Я пытаюсь играть звук, но это не играетUnity звук не играет

Вот мой код:

public void Replay() 
{ 
    playAudio(); 
    Application.LoadLevel (Application.loadedLevel); 
} 

void playAudio() 
{ 
    AudioSource audio = GetComponent<AudioSource>(); 

    audio.Play(); 
} 

Когда кнопка нажата, я звоню Replay(). Но звук не воспроизводится.

Если я заметил Application.LoadLevel (Application.loadedLevel);, звук воспроизводится нормально.

Что делать, чтобы звук воспроизводился с Application.LoadLevel()?

+0

Вы уверены, что у вас есть свой 'AudioListener', когда вы играли в звуковой файл? Является ли ваш AudioClip двумерным или трехмерным звуком? – brain56

ответ

1

Аудиосигнал, воспроизводящий звук, будет удален до того, как он успеет закончить.

Это альтернативное решение с помощью yield, чтобы дождаться завершения вашего звука.

public void Replay() 
{ 
    StartCoroutine("ReplayRoutine"); 
} 

IEnumerator ReplayRoutine() 
{ 
    AudioSource audio = GetComponent<AudioSource>(); 

    audio.Play(); 
    yield return new WaitForSeconds(audio.clip.length); 

    Application.LoadLevel(Application.loadedLevel); 
} 
+0

Спасибо, что он отлично работает со мной – Steven

0

Вы вызываете метод воспроизведения, и вы загружаете сцену после него. Попробуйте позвонить playAudio() перед уровнем загрузки.

public void Replay() { 
    Application.LoadLevel(Application.loadedLevel); 
    playAudio(); 
} 
0

Я думаю, что вы не даете шанс источнику звука для воспроизведения звука, так как после выполнения игры, вы сразу же повторно загружены на сцене, так же экземпляр источника звука больше не существует, создается новый экземпляр, который еще не получил команду воспроизведения. Вы можете использовать небольшую задержку, используя совместную процедуру или другие способы предоставить необходимое время источнику звука. (Если вы хотите воспроизвести звук перед уровнем загрузки, в противном случае просто воспроизведите звук в обратном вызове Start())