Unity3D:AudioSource音频播放完成事件

在做项目的时候经常遇到,要播放一段音频之后要执行一些方法或者事件,但是AudioSource并没有提供播放完成事件,我在网上查了很久才找到一个比较不错的方法,我整理了一下,可以直接挂在有AudioSource组件的GameObject上。它的原理就是获取音频文件的时长,通过协程等待播放完成再去执行其他方法或者事件。下面是代码。

using System.Collections;
using UnityEngine;
using UnityEngine.Events;

[RequireComponent(typeof(AudioSource))]
public class AudioManager : MonoBehaviour
{
    public static AudioManager _Instence;
    public static AudioManager Instance
    {
        get
        {
            if (_Instence == null)
            {
                GameObject AudioManager = new GameObject("AudioManager");
                _Instence = AudioManager.AddComponent<AudioManager>();
            }
            return _Instence;
        }
    }
    public void PlayAudio(AudioSource _audio, AudioClip clip, UnityAction callback = null, bool isLoop = false)
    {
        _audio.clip = clip;
        _audio.loop = isLoop;
        _audio.Play();
        StartCoroutine(AudioPlayFinished(_audio.clip.length, callback));
    }
    private IEnumerator AudioPlayFinished(float time, UnityAction callback)
    {
        yield return new WaitForSeconds(time);
        callback.Invoke();
    }
}

这里在播放声音的时候可以传一个回调方法,在回调方法里放上播放完音频要执行的代码。具体的使用方法我就不再放代码了,有不懂的可以加我联系方式问我。

You May Also Like

About the Author: 大腿Plus

发表评论