【问题标题】:How to stop an audio when PlayOneShot is used使用 PlayOneShot 时如何停止音频
【发布时间】: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)
  • 哦,好的,所以你建议我制作一个单独的音频源来播放这个特定的声音……还有其他选择吗?

标签: c# unity3d 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();
}

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

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

【讨论】:

  • 是的,我知道我不应该使用 bool 变量来确定何时播放音频,我只是以它为例,但无论如何都感谢
  • 好的。修改了我的答案以回答您的第一条评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多