如何在使用PlayOneShot时停止音频播放

7

目前我有一个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以符合标准命名约定(只有类名以大写字母开头,或者在您的属性上调用方法看起来像对类的静态引用)。 - Draco18s no longer trusts SE
但这样做不会停止SoundPlayer2D播放的所有音频吗?当我想在SoundPlayer2D上播放另一个声音时,之前的声音将在我恢复SoundPlayer2D时完成播放。@Draco18s - RaZ
糟糕,只是个打字错误 @Draco18s - RaZ
2
我认为任何需要停止的剪辑都不应该使用 PlayOneShot() 播放,而应该有一个单独的 AudioSource。(AudioSource SoundPlayer2D; 仍然要大写 S) - Draco18s no longer trusts SE
哦,好的,所以你建议我制作一个单独的音频源来播放这个特定的声音...不过还有其他的选择吗? - RaZ
没想法。我从来没有做过像你所做的那样的事情。 - Draco18s no longer trusts SE
1个回答

10

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

您需要使用Play函数。只需将AudioClip分配给AudioSource,然后播放即可。现在可以使用Stop函数停止它。

private AudioSource SoundPlayer2D;
private AudioClip sound; 

在播放之前,将音频剪辑分配给音频源(AudioSource)。
SoundPlayer2D.clip = sound;

现在,你可以开始玩了。
SoundPlayer2D.Play();

停止它:

SoundPlayer2D.Stop();

决定何时使用布尔变量播放音频绝不是一个好主意。这样做会导致一些问题,例如在同一帧内尝试多次播放音频而无法播放。

你需要编写一个播放和停止音频的函数。

可以像这样:

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

public void stopMyAudio()
{
    SoundPlayer2D.Stop();
}

“soundPlayer2D”应该只用于播放音频剪辑吗?
不一定,除非需要同时播放多个音频。在播放之前,您可以随时将AudioSource(“soundPlayer2D”)剪辑更改为另一个“AudioClip”。

是的,我知道我不应该使用bool变量来确定何时播放音频,我只是举个例子,但还是谢谢。 - RaZ
好的。我修改了我的回答以回答您的第一个评论。 - Programmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接