2016-01-22 3 views
0

Когда звук воспроизводится, система должна игнорировать все остальное до тех пор, пока звук не будет закончен, но когда звук закончен, и у вас есть цель, которая присутствует, когда звук закончен, ему нужно вызвать функцию OnTrackingFound(). Если я дожидаюсь окончания звука и затем покажу цель на камеру, он отлично работает (он вызывает OnTrackingFound), но когда я показываю цель во время воспроизведения звука, он игнорирует цель (это нормально), но он не должен игнорировать его, когда звук закончен, и цель присутствует, не дожидаясь окончания звука.Как проверить, закончен ли звук, и вызвать OnTrackingFound(), когда звук закончен?

public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus,TrackableBehaviour.Status newStatus) 
      {  

        if (newStatus == TrackableBehaviour.Status.DETECTED || 
         newStatus == TrackableBehaviour.Status.TRACKED || 
         newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED) { 
        if (notCorrect.isPlaying || correct.isPlaying || FindTheCard.isPlaying || Quiz.currentPoint.GetComponent<AudioSource>().isPlaying || tryagain.isPlaying || GameObject.Find ("LetsTryNumbers").GetComponent<AudioSource>().isPlaying || GameObject.Find ("LetsTryLetters").GetComponent<AudioSource>().isPlaying || GameObject.Find ("LetsTryAnother").GetComponent<AudioSource>().isPlaying || GameObject.Find ("Correct").GetComponent<AudioSource>().isPlaying || GameObject.Find ("CorrectAnimals").GetComponent<AudioSource>().isPlaying || GameObject.Find ("CorrectLetters").GetComponent<AudioSource>().isPlaying || GameObject.Find ("LetsTryAnotherModel").GetComponent<AudioSource>().isPlaying) 
        { 
         OnTrackingLost(); 

        } 
        else 
        { 

          OnTrackingFound(); 
        } 

        } 
      } 

ответ

0
public AudioSource audio; 
public event Action<bool> OnPlayDone =()=>{}; 
IEnumerator PlayAndWaitForAudio() 
{ 
    // Set all things off 
    OnPlayDone(false); 
    this.audio.Play(); // Considering the clip is loaded already 
    while(this.audio.isPlaying == true){ 
     yield return null; 
    } 
    // Set all things on 
    OnPlayDone(true); 
} 

Любые компоненты, которые должны реагировать на ожидания регистрируется событие. После этого вы можете установить соответственно:

void Start(){ 
    GetComponent<AudioController>().OnPlayDone += HandlerAudio; 
} 
private bool isAudioDone = false; 
private void HandlerAudio(bool value){ 
    this.isAudioDone = value; 
} 
public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus,TrackableBehaviour.Status newStatus) 
{ 
    if(this.isAudioDone == false){ return; } 
    // Rest of the method 
} 
+0

Неожиданный символ 'IEnumerator» в классе, структуре или декларации элемента интерфейса Это не работает – Butrint

+0

Был а; перед IEnumerator. – Everts

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