C# 碰撞后未播放音频剪辑

C# 碰撞后未播放音频剪辑,c#,unity3d,audio-source,C#,Unity3d,Audio Source,我30天来一直面临音频问题。我想在碰撞后播放音频。 没有得到任何正确的想法,或者在我的场景中问题发生在哪里,我无法解决我的问题。 在我的GameObject中,我通过“添加组件”添加了音频源,我将mp3文件放入音频剪辑中,并且 勾选“醒着玩” 注:PlayExplosionAnimation和Destroy工作正常 public class Player : MonoBehaviour { private AudioSource source; void Start()

我30天来一直面临音频问题。我想在碰撞后播放音频。 没有得到任何正确的想法,或者在我的场景中问题发生在哪里,我无法解决我的问题。 在我的GameObject中,我通过“添加组件”添加了音频源,我将mp3文件放入音频剪辑中,并且 勾选“醒着玩”

注:PlayExplosionAnimation和Destroy工作正常

public class Player : MonoBehaviour
{

    private AudioSource source;

    void Start()
    {
        source = GetComponent<AudioSource>();
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.tag == "Rocks")
        {
            source.Play();
            PlayExplosionAnimation();
            Destroy(gameObject);
        }
    }

}

尝试一下,如果仍然不起作用,则表示您的音频有问题:

public class Player : MonoBehaviour
{
private AudioSource source;

void Start()
{
    source = GetComponent<AudioSource>();
}

void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.tag == "Rocks")
    {
        source.Play();
        PlayExplosionAnimation();
        gameObject.SetActive("false");
        Destroy(gameObject, 1f);
    }
}
}

问题在于,音频源连接到游戏对象上,而游戏对象在检测到碰撞后立即被销毁,因此您实际上从未听到声音。一个可能的解决方案是通过指定要延迟销毁的秒数来延迟销毁游戏对象,例如延迟0.5秒

void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.tag == "Rocks")
    {
        source.Play();
        PlayExplosionAnimation();
        Destroy(gameObject, 0.5);
    }
}

您正在立即销毁您的对象,因此是您的音频源。通过指定时间延迟销毁,例如DestroygameObject,0.5非常感谢@Johnny and Jichael。耽搁了一段时间之后,它就消失了playing@M.S.T为了完整起见,我将添加一个答案。