2015-01-02 198 views
0

我正在製作恐怖遊戲,並希望在播放觸發器時播放聲音。問題在於每次進入觸發器時都不會一直觸發。我想要的是進入觸發器,播放聲音,然後它不得再次播放。我嘗試了很多東西,像摧毀剪輯..但我似乎無法使它正常工作。停止播放音頻剪輯

public class SoundScript : MonoBehaviour 
{  
    public AudioClip Snd_Sound; 

    IEnumerator Wait(){ 
     yield return new WaitForSeconds(20000); 
     } 

    void OnTriggerEnter(Collider col) 
    {    
      audio.enabled = true; 
      audio.PlayOneShot(Snd_Sound, 1f); 
      StartCoroutine(Wait()); 
      //??? 
    } 
} 

此外,似乎我的等待秒不起作用。

+0

不熟悉統一協程,但我相信這將把工作放在一個不同的線程上。在這種情況下,不會將等待放在另一個線程上意味着你只是在等待,而不是阻止任何東西?爲什麼不只是設置一個「聲音播放」標誌? – BradleyDotNET

回答

1

很抱歉,如果我誤解了你的問題,我的英語不好:/ 我瞭解,你需要做的音源從來沒有先進入後再次上場,即使玩家進入觸發第二次

最簡單的方法是銷燬此觸發器遊戲對象或處理播放音頻後的腳本。音頻已完成播放後,您可以使用destroy()函數,如Destroy(gameObject)Destroy(this)

您也可以聲明其處理該音頻的播放,如變量:

bool playsound; //assign the value of **true** in Inspector 
void OnTriggerEnter(Collider col) 
{ 
    if(playsound){ 
     audio.enabled = true; 
     audio.PlayOneShot(Snd_Sound, 1f); 
     playsound = false; 
    }  
} 
0

我會創建一個持有聲音的小孩對象,並公開播放聲音的方法。然後在你的SoundScript對象中,創建一個存儲子對象腳本的變量。當觸發OnTriggerEnter時,檢查變量是否不爲空。如果不是,則調用子對象中的公共方法並將該變量設置爲空。在soundbite完成播放後讓孩子的腳本自行消失。隨着兒童遊戲對象從場景中移除,它不能再次播放。