碰撞时的统一声音无法播放

时间:2020-04-10 11:37:55

标签: unity3d audio collision

我想在发生碰撞时播放音频。发生碰撞时,请进行以下设置:

other.gameObject.SetActive(false);

然后在我的播放声音代码中,我有以下内容:

public class PlaySounds : MonoBehaviour {

    public AudioClip SoundToPlay;
    public float Volume;
    AudioSource audioSound;
    public bool alreadyPlayed = false;
    void Start()
    {
        audioSound = GetComponent<AudioSource>();
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (!alreadyPlayed)
        {
            audioSound.PlayOneShot(SoundToPlay, Volume);
            alreadyPlayed = true;
        }

    }
}

我了解到,如果精灵被销毁,您将无法播放声音,这就是为什么我不销毁我的,但是声音仍然无法播放。有什么可能的原因吗?

1 个答案:

答案 0 :(得分:-1)

停用GameObject也会停用附加到它的所有组件。如果在播放声音的OnTriggerEnter2D回调(在竞争情况下)之前执行了禁用GameObject的OnTriggerEnter2D回调,则您的audioSound.PlayOneShot()调用会“丢失”。

一个可能的解决方案是使用AudioSource.PlayClipAtPoint,它在内部使用指定的audioClip和音量在给定位置(在本例中为transform.position)创建一个AudioSource。我很确定,该解决方案还可以让您销毁调用方GameObject,而不是通过gameObject.SetActive(false);来禁用它。

相关问题