所以目前我有一个 8 秒长的音频剪辑。但是,我希望能够在发生特定事情时阻止它播放。像这样:
private AudioSource soundPlayer2D;
private AudioClip sound;
void Start(){
GameObject new2DsoundPlayer = new GameObject ("2DSoundPlayer");
soundPlayer2D = new2DsoundPlayer.AddComponent<AudioSource> ();
new2DsoundPlayer.transform.parent = transform;
}
void Update() {
if(shouldPlayAudio){
soundPlayer2D.PlayOneShot (sound, fxVolumePercentage * allVolumePercentage);
} else if(shouldStopAudio){
//Stop Audio <--
}
}
编辑 1:注意我只想停止特定的音频剪辑而不是音频源
最佳答案
当使用 PlayOneShot
时,您不能停止音频。这就像播放和忘记功能。当然,您可以将 Unity 的音频系统静音,但这不是一个好的解决方案。
您需要改用播放功能。只需将 AudioClip 分配给 AudioSource 然后播放它。现在可以使用停止功能将其停止。
private AudioSource SoundPlayer2D;
private AudioClip sound;
播放前,将AudioClip赋值给AudioSource
SoundPlayer2D.clip = sound;
现在,你可以玩了
SoundPlayer2D.Play();
并停止它:
SoundPlayer2D.Stop();
使用boolean
变量来决定何时播放音频绝不是一个好主意。不要这样做,因为您会遇到诸如音频无法播放的问题,因为您试图在一个帧中多次播放它。
您需要将它放在播放和停止音频的函数中。
像这样:
public void playMyAudio(AudioClip clipToPlay)
{
SoundPlayer2D.clip = clipToPlay;
SoundPlayer2D.Play();
}
public void stopMyAudio()
{
SoundPlayer2D.Stop();
}
and soundPlayer2D should solely be devoted to playing the sound AudioClip?
没有。除非您需要同时播放多个音频,否则您不必这样做。您始终可以在播放之前将 AudioSource (soundPlayer2D
) 剪辑更改为另一个 AudioClip
。
关于c# - 使用 PlayOneShot 时如何停止音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45218413/