我想在发生碰撞时播放音频。发生碰撞时,请进行以下设置:
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也会停用附加到它的所有组件。如果在播放声音的OnTriggerEnter2D回调(有竞争情况的情况)之前执行了禁用GameObject的OnTriggerEnter2D回调,则您的audioSound.PlayOneShot()
调用会“丢失”。
一种可能的解决方案是使用AudioSource.PlayClipAtPoint,该内部在给定位置(在这种情况下为transform.position
)内部创建一个具有指定audioClip和音量的AudioSource。我很确定此解决方案还可以使您销毁调用方GameObject,而不是通过gameObject.SetActive(false);
禁用它。