[英]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.