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