unity c# - 重播声音重叠

unity c# - replay sounds overlapping

我这里有一个代码,当找到目标时自动播放声音,当目标丢失时停止。我所做的是,我想重复当前找到的目标的声音。问题是当我点击重播按钮时,找到的最后一个目标的声音和当前目标的声音都在播放。

我在 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);
    }

在public下virtual void 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();

在添加另一个侦听器之前,您需要在按钮上调用 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);
  }
}