c# - 使用 PlayOneShot 时如何停止音频

标签 c# unity3d audio

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

相关文章:

c# - 如何在 C#.Net 中创建原型(prototype)方法(如 JavaScript)?

c# - WPF 如何将 DataTrigger 应用到 XAML 中的自定义用户控件类

c# - 子类化 UserControlled GridView

unity3d - 统一 : "The referenced script (Unknown) on this Behaviour is missing!"

c# - 如何在统一 4.6 中停止 OnBeginDrag() 中的拖动事件

javascript - Chrome 扩展保持弹出窗口加载

c# - 现有连接被远程主机强行关闭

c# - 更改实例化对象的父级

android - 如何通过免提电话播放媒体

ios - 在 iOS 上停止另一个应用程序的背景音频