使用PlayOneShot时如何停止音频

RaZ*_*RaZ 3 c# audio unity-game-engine

所以目前我有一个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 <--

        }
     }
Run Code Online (Sandbox Code Playgroud)

编辑1:注意,我只想停止特定的音频剪辑,而不是音频源

Pro*_*mer 6

使用时您无法停止音频PlayOneShot。就像玩和忘了功能。当然,您可以使Unity的音频系统静音,但这不是一个好的解决方案。

您需要改为使用播放功能。只需将AudioClip分配给AudioSource,然后播放即可。现在可以使用停止功能将其停止。

private AudioSource SoundPlayer2D;
private AudioClip sound; 
Run Code Online (Sandbox Code Playgroud)

播放之前,将AudioClip分配给AudioSource

SoundPlayer2D.clip = sound;
Run Code Online (Sandbox Code Playgroud)

现在,您可以播放

SoundPlayer2D.Play();
Run Code Online (Sandbox Code Playgroud)

并停止它:

SoundPlayer2D.Stop();
Run Code Online (Sandbox Code Playgroud)

这是从来没有决定什么时候打一个音频一个好主意boolean变量。请勿执行此操作,因为您会尝试在一个帧中多次播放音频,从而导致音频无法播放等问题。

您需要将其放入播放和停止音频的功能中。

像这样:

public void playMyAudio(AudioClip clipToPlay)
{
    SoundPlayer2D.clip = clipToPlay;
    SoundPlayer2D.Play();
}

public void stopMyAudio()
{
    SoundPlayer2D.Stop();
}
Run Code Online (Sandbox Code Playgroud)

和soundPlayer2D应该专门用于播放声音AudioClip吗?

不。除非您需要同时播放多个音频,否则不必这样做。播放音频源(soundPlayer2D)片段AudioClip之前,您始终可以将其更改为另一个 。