public class Brick : MonoBehaviour
{
private AudioSource _audio;
public void Awake()
{
_audio = GetComponent<AudioSource>();
}
public void OnCollisionEnter2D()
{
_audio.Play();
Destroy(gameObject);
}
}
reference 不是说它是异步的,但是,AudioSource.Play()是异步函数吗?
当然,gameObject获得了c#Brick.cs有效的AudioSource。
因此,当我像Start()
这样编写代码时,Brick会正确地发出声音。
public void Start()
{
_audio.Play();
}
答案 0 :(得分:2)
是的,它是异步的。如果它不是异步,你的整个游戏都会冻结,直到播放声音效果。解决问题的一种方法是让一个GameObject专用于AudioSource,然后使用AudioSource.PlayOneShot播放所有声音效果。
另一种选择是在播放音频后销毁Brick。你应该删除/禁用SpriteRenderers和colliders,这样块就不可见了。 Destroy有第二个参数,即对象被销毁之前的延迟。
第二个选项的示例代码:
_audio.Play();
GetComponent<Collider2D>().enabled = false;
GetComponent<Renderer>().enabled = false;
Destroy(gameObject, _audio.clip.length);