unity3d - 碰撞时未播放Unity

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

    }
}

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

最佳答案

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

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

关于unity3d - 碰撞时未播放Unity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61139477/

相关文章:

animation - Unity3d 中的动画旋转

c - 无论质量如何,都以最佳压缩方式用 C++ 录制音频

android - 如何防止MediaPlayer在其他应用程序中启动

python - 我怎样才能创作旋律?有声音模块吗?

ios - Sprite Kit 碰撞次数超过 1 次

unity3d - unity 3d backing 做奇怪的纹理

ios - 广告后,声音在游戏中消失

unity3d - 获取 Sprite 的宽度

c# - 碰撞后如何为我的播放器关闭重力?

java - Java 小程序中的碰撞检测帮助