2016-02-26 3 views
1

Я хочу играть AudioSource каждый второй только если конкретный сценарий включен:Невозможно воспроизвести звук каждую секунду?

public int wait = 1; 
bool keepPlaying = true; 

void Start() 
{ 
    StartCoroutine(SoundOut()); 
} 

IEnumerator SoundOut() 
{ 
    while (keepPlaying) 
    { 
     if (GameObject.FindWithTag ("GameObject").GetComponent<SpecificScript>().enabled == true) 
     { 
      GameObject.FindWithTag ("GameObject").GetComponent<AudioSource>().Play(); 
      yield return new WaitForSeconds (wait); 
     } 
    } 
} 

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

+0

'return new WaitForSeconds (carwait)' что такое 'carwait'? – Valentin

+0

@ Valentin Извините, моя ошибка. Я редактировал вопрос. –

+0

Но он играет что-нибудь? – Gusman

ответ

0

Попробуйте использовать PlayOneShot

float wait = 1; 
bool keepPlaying = true; 

void Start() 
{ 
    StartCoroutine(SoundOut()); 
} 

IEnumerator SoundOut() 
{ 
    while (keepPlaying) 
    { 
     if (GameObject.FindWithTag("GameObject").GetComponent<SpecificScript>().enabled == true) 
     { 
      AudioSource myAudioSource = GameObject.FindWithTag("GameObject").GetComponent<AudioSource>(); 
      myAudioSource.PlayOneShot(myAudioSource.clip); 
      yield return new WaitForSeconds(wait); 
     } 
    } 
} 

Используя эту технику, если ваш клип> 1 второе, они будут перекрывать друг друга.

Если вы этого не хотите, просто выполните myAudioSource.Stop(); прежде чем снова играть.

Смежные вопросы