Unity C # - воспроизведение звуков перекрытия - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть код, который автоматически воспроизводит звук при обнаружении цели и останавливается при потере цели.Что я делаю, так это то, что хочу повторить звук цели, найденной в данный момент.Проблема в том, что когда я нажимаю кнопку воспроизведения, воспроизводится звук последней найденной цели и текущая цель.

Я кодировал это в сценарии DefaultTrackableEventHandler.Вот мой код:

public AudioSource soundTarget;
public AudioClip clipTarget;
private AudioSource[] allAudioSources;
public Button Button;

void StopAllAudio()
    {
        allAudioSources = FindObjectsOfType(typeof(AudioSource)) as AudioSource[];
        foreach (AudioSource audioS in allAudioSources)
        {
            audioS.Stop();

        }
    }

void playSound(string ss)
    {
        clipTarget = (AudioClip)Resources.Load(ss);
        soundTarget.clip = clipTarget;
        soundTarget.loop = false;
        soundTarget.playOnAwake = false;
        soundTarget.Play();

    }

public void ReplayAudio()
    {
        soundTarget.PlayOneShot(clipTarget);
    }

В публичной виртуальной пустоте OnTrackingFound ()

    public virtual void OnTrackingFound()
    {

  if (mTrackableBehaviour.TrackableName == "letterA")
        {
            playSound("sounds/airplane");

            Button.onClick.AddListener(ReplayAudio);
        }

        if (mTrackableBehaviour.TrackableName == "letterB")
        {
            playSound("sounds/banana");

            Button.onClick.AddListener(ReplayAudio);
        }

// На отслеживание потерян: StopAllAudio ();

1 Ответ

0 голосов
/ 04 декабря 2018

Вам нужно вызвать RemoveAllListeners на вашей кнопке, прежде чем добавлять другого слушателя, или они будут складываться при каждом обнаружении цели.

public virtual void OnTrackingFound()
{
  Button.onClick.RemoveAllListeners();

  if (mTrackableBehaviour.TrackableName == "letterA")
  {
      playSound("sounds/airplane");
      Button.onClick.AddListener(ReplayAudio);
  }

  if (mTrackableBehaviour.TrackableName == "letterB")
  {
      playSound("sounds/banana");
      Button.onClick.AddListener(ReplayAudio);
  }
}
...