我想在发生碰撞时播放音频。发生碰撞时,请进行以下设置:
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/