繁体   English   中英

统一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);
    }

在公共虚拟无效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);
        }

//关于trackingLost: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);
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM