Unity3d 关于碰撞声音不播放的统一

Unity3d 关于碰撞声音不播放的统一,unity3d,audio,collision,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()

我想在发生碰撞时播放音频。发生碰撞时,我设置以下各项:

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

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

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

    }
}
public class PlaySounds:monobhavior{
公共音频剪辑声音播放;
公众浮存量;
声源;有声;
public bool alreadyPlayed=false;
void Start()
{
audioSound=GetComponent();
}
无效OnTiggerEnter2D(碰撞的R2D其他)
{
如果(!已显示)
{
audioSound.PlayOneShot(声音播放,音量);
alreadyPlayed=true;
}
}
}

我知道,如果一个精灵被摧毁了,你就不能播放声音,这就是为什么我没有摧毁我的,但是声音仍然不能播放。有什么原因会出现这种情况吗?

禁用游戏对象也会禁用与之连接的所有组件。如果禁用游戏对象的OnTiggerEnter2D回调在播放声音的OnTiggerEnter2D回调之前执行(比赛条件场景),则您的
audioSound.PlayOneShot()
调用将“丢失”


一种可能的解决方案是使用它在给定位置(在本例中为
transform.position
)内部创建具有指定音频剪辑和音量的音频源。我敢肯定,这个解决方案还允许您销毁调用方游戏对象,而不是通过
GameObject.SetActive(false)禁用它

这是一个触发器,而不是碰撞器我应该将“OnTriggerEnter2D”更改为“OnCollision”?因为您没有提供设置,所以很难判断。。但是,一行简单的代码将告诉您是否正在使用该方法。。如果不是,则碰撞器不会设置为触发器。。所以你需要OnCollision2D。。假设它是一个2d游戏,否则它会发生碰撞,你可以从那里销毁地雷,你只需要在销毁命令中添加延迟参数。这非常有趣,我将对此进行研究!非常感谢你帮了我大忙这很有趣!我会试试看,谢谢你!~快速提问,如果我的代码在不同位置的多个精灵上使用,我将如何处理此可能解决方案的矢量方面?只需使用“transform.position”作为所需位置调用AudioSource.PlayClipAtPoint,这样每个精灵都将使用其自己的位置。我是否需要在代码中添加任何内容以使用PlayClipAtPoint?我已收到此错误,当前contextType“AudioSource.PlayClipAtPoint”中不存在名称“PlayClipAtPoint”,因为它是类AudioSource的静态方法。查看答案中的链接以获取更多资源和代码示例。