停止播放音频片段

时间:2015-01-02 21:48:25

标签: c# audio unity3d

我正在做一个恐怖游戏,并希望在通过触发器时播放声音。问题是每次进入触发器时它都不会被触发。我想要的是进入触发器,播放声音,然后它永远不会再播放。我尝试了很多东西,比如摧毁剪辑......但我似乎无法让它正常工作。

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());
            //??? 
    }   
}

似乎我等待第二次也不起作用。

2 个答案:

答案 0 :(得分: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;
    }       
}  

答案 1 :(得分:0)

我会创建一个包含声音咬合的子对象,并公开播放声音的公共方法。然后在SoundScript对象中创建一个存储子对象脚本的变量。触发OnTriggerEnter时,检查变量是否为空。如果没有,则调用子对象中的public方法并将该变量设置为null。声音比赛结束后让儿童脚本自行消失。将子游戏对象从场景中删除后,无法再次播放。