使用 PlayOneShot 时如何停止音频

Posted

技术标签:

【中文标题】使用 PlayOneShot 时如何停止音频【英文标题】:How to stop an audio when PlayOneShot is used 【发布时间】:2017-07-20 14:58:37 【问题描述】:

所以目前我有一个 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:注意我只想停止特定的音频剪辑而不是音频源

【问题讨论】:

SoundPlayer2D.Stop()?此外,您应该将该属性重命名为 soundPlayer2D 以符合标准命名约定(只有类名以首字母大写开头,或者对属性的方法调用看起来像对类的静态引用)。 但这会停止 SoundPlayer2D 播放的所有音频,不是吗??然后当我想在 SoundPlayer2D 上播放另一个声音时,当我恢复 SoundPlayer2D @Draco18s 时,前一个声音将完成播放 哎呀只是一个错字@Draco18s 我认为任何需要停止的剪辑都不应该使用PlayOneShot() 播放,并且应该有一个单独的音频源。 (AudioSource SoundPlayer2D; 还是大写的 S) 哦,好的,所以你建议我制作一个单独的音频源来播放这个特定的声音……还有其他选择吗? 【参考方案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();

并且 soundPlayer2D 应该专门用于播放声音 音频剪辑?

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

【讨论】:

是的,我知道我不应该使用 bool 变量来确定何时播放音频,我只是以它为例,但无论如何都感谢 好的。修改了我的答案以回答您的第一条评论。

以上是关于使用 PlayOneShot 时如何停止音频的主要内容,如果未能解决你的问题,请参考以下文章

使用火焰/音频播放器时,如何停止来自 AudioCache 的音频?

在使用 AVAudioRecorder 在为导航栏设置动画的同时录制音频时发生中断时,我们如何停止并保存录制?

如何停止使用 jQuery 播放其他音频元素

如何使用 Jquery 停止所有音频播放

如何在启动另一个反应音频播放器时停止播放?

停止特定的setTimeout循环如何使用clearTimeout