碰撞声未播放时团结

问题描述 投票:-1回答:1

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

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;
        }

    }
}

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

unity3d audio collision
1个回答
-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.