我正在做一个恐怖游戏,并希望在通过触发器时播放声音。问题是每次进入触发器时它都不会被触发。我想要的是进入触发器,播放声音,然后它永远不会再播放。我尝试了很多东西,比如摧毁剪辑......但我似乎无法让它正常工作。
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 :(得分: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。声音比赛结束后让儿童脚本自行消失。将子游戏对象从场景中删除后,无法再次播放。