在做项目的时候经常遇到,要播放一段音频之后要执行一些方法或者事件,但是AudioSource并没有提供播放完成事件,我在网上查了很久才找到一个比较不错的方法,我整理了一下,可以直接挂在有AudioSource组件的GameObject上。它的原理就是获取音频文件的时长,通过协程等待播放完成再去执行其他方法或者事件。下面是代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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(); } } |
这里在播放声音的时候可以传一个回调方法,在回调方法里放上播放完音频要执行的代码。具体的使用方法我就不再放代码了,有不懂的可以加我联系方式问我。文章源自大腿Plus-https://www.zhaoshijun.com/archives/994 文章源自大腿Plus-https://www.zhaoshijun.com/archives/994
我的微信
微信扫一扫
shijun_z
我的QQ
QQ扫一扫
846207670
评论