首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DestroyImmediate()不工作

问DestroyImmediate()不工作
EN

Stack Overflow用户
提问于 2016-05-29 14:04:37
回答 1查看 2K关注 0票数 1

为自己的乐趣制作一个小游戏,并有一个按钮,我想用它来取消正在播放的音频。

音频是用这种方法创建的:

代码语言:javascript
复制
public void PlaySound(AudioClip[] audioClip )
{
    int random = Random.Range(0, audioClip.Length);
    Ed = (AudioSource)gameObject.AddComponent<AudioSource>();
    AudioClip myNew;
    myNew = audioClip[random];
    Ed.clip = myNew;
    Ed.Play();
}

我想在这件事上毁掉它:

代码语言:javascript
复制
public void StopPlayBack()
{
    AudioSource myAudio;

    myAudio = GetComponent<AudioSource>();
    Debug.Log("My Audio is 1 :" + myAudio);
    if (myAudio != null)
    {
        DestroyImmediate(myAudio);
        Debug.Log("My Audio is NOT null");
        Debug.Log("My Audio is 2 :" + myAudio);
    }
    else if ( myAudio == null)
    {
        Debug.Log("My Audio is null");
    }
    Debug.Log("My Audio is 3 :" + myAudio);

}
}

有时音频将被销毁,有时我不得不点击该按钮两次。但是,无论是否销毁,调试日志都会显示相同的结果。(即销毁方法之后,audioSource为空)不确定为什么有时工作,有时不工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-29 14:38:21

DestroyImmediate用于编辑器代码。它甚至在文档中也这么说。在运行时,应该使用Destroy。

几句忠告:在play方法中不需要临时的AudioClip变量。您可以将其改为:

代码语言:javascript
复制
public void PlaySound(AudioClip[] audioClip )
{
    int random = Random.Range(0, audioClip.Length);
    Ed = (AudioSource)gameObject.AddComponent<AudioSource>();
    Ed.clip = audioClip[random];
    Ed.Play();
}

此外,你不应该真的添加一个音频源,每次你想播放一个剪辑。创建一个AudioSource并将其添加到Start函数中,然后在代码中重用它。如下所示:

代码语言:javascript
复制
private AudioSource audioSource;

public void Start()
{
    audioSource = gameObject.AddComponent<AudioSource>();
}

public void PlaySound(AudioClip[] audioClip )
{
    int random = Random.Range(0, audioClip.Length);
    audioSource.clip = audioClip[random];
    audioSource.Play();
}

通过这种方式,您可以通过以下方式停止播放:

代码语言:javascript
复制
public void StopPlayBack()
{
    audioSource.Stop()    
}

现在,当您调用PlaySound时,它将从传递的audioClip数组中播放一个随机剪辑,您可以通过调用StopPlayBack来停止声音。这是启动和停止音频的正确方法,但是如果出于某种原因要实际删除AudioSource,那么仍然可以使用:

代码语言:javascript
复制
public void StopPlayBack()
{
    Destroy(audioSource);    
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37510826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档