2015-01-02 201 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完成播放后让孩子的脚本自行消失。随着儿童游戏对象从场景中移除,它不能再次播放。