为自己的乐趣制作一个小游戏,并有一个按钮,我想用它来取消正在播放的音频。
音频是用这种方法创建的:
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();
}我想在这件事上毁掉它:
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为空)不确定为什么有时工作,有时不工作?
发布于 2016-05-29 14:38:21
DestroyImmediate用于编辑器代码。它甚至在文档中也这么说。在运行时,应该使用Destroy。
几句忠告:在play方法中不需要临时的AudioClip变量。您可以将其改为:
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函数中,然后在代码中重用它。如下所示:
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();
}通过这种方式,您可以通过以下方式停止播放:
public void StopPlayBack()
{
audioSource.Stop()
}现在,当您调用PlaySound时,它将从传递的audioClip数组中播放一个随机剪辑,您可以通过调用StopPlayBack来停止声音。这是启动和停止音频的正确方法,但是如果出于某种原因要实际删除AudioSource,那么仍然可以使用:
public void StopPlayBack()
{
Destroy(audioSource);
}https://stackoverflow.com/questions/37510826
复制相似问题