AudioSource.Play()async是一个函数吗?

时间:2017-02-17 11:07:35

标签: c# unity3d unity5 audio-player

期望

  1. 首先,Brick发出声音。
  2. 然后,砖块消失了。
  3. 代码

    public class Brick : MonoBehaviour
    {
        private AudioSource _audio;
    
        public void Awake()
        {
            _audio = GetComponent<AudioSource>();
        }
    
        public void OnCollisionEnter2D()
        {
            _audio.Play();
            Destroy(gameObject);
        }
    }
    

    结果

    砖块没有声音,砖块消失了。 我想知道为什么Brick没有声音。

    猜测

    reference 不是说它是异步的,但是,AudioSource.Play()是异步函数吗?

    遗嘱

    当然,gameObject获得了c#Brick.cs有效的AudioSource。 因此,当我像Start()这样编写代码时,Brick会正确地发出声音。

    public void Start()
    {
        _audio.Play();
    }
    

1 个答案:

答案 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);