Unity AudioSource播放事件监听

来源:互联网 发布:uuu网络加速器 编辑:程序博客网 时间:2024/05/19 14:36

恩恩,装装逼,其实不是我写的哈哈哈
这个东西放在你要监听的AudioSource组件的Object下面,当声音播放结束之后会有事件发出来,就可以在声音播放结束后搞事情(写方法)了。

using System;using UnityEngine;/// <summary>/// AudioSource的播放状态监听,包含一个AudioSource公共成员./// 使用方法:/// AudioEvent ae =AudioEvent.AddComponentToGameObject(t1.gameObject);/// ae.audioSource.clip = clip1;//自己控制赋值/// ae.EventPlayStart += OnEventPlayStart;/// ae.EventPlayEnd += OnEventPlayEnd;/// ae.audioSource.Play();/// </summary>class AudioEvent : MonoBehaviour{    /// <summary>    /// 这个脚本所在的物体上的audioSource    /// </summary>    public AudioSource audioSource;    /// <summary>    /// 播放开始事件    /// </summary>    public event Action<AudioEvent> EventPlayStart;    /// <summary>    /// 播放结束事件    /// </summary>    public event Action<AudioEvent> EventPlayEnd;    /// <summary>    /// 监控播放状态    /// </summary>    bool _lastPlayStatus;    /// <summary>    /// 往一个物体上添加这个事件监听类    /// </summary>    /// <param name="obj"></param>    /// <returns></returns>    public static AudioEvent AddComponentToGameObject(GameObject obj)    {        AudioEvent com = obj.GetComponent<AudioEvent>();        if (com == null)        {            com = obj.AddComponent<AudioEvent>();        }        return com;    }    void Awake()    {        //如果没有这个AudioSource东西那就要添加一个        audioSource = gameObject.GetComponent<AudioSource>();        if (audioSource == null)        {            audioSource = gameObject.AddComponent<AudioSource>();            audioSource.loop = false;            audioSource.Stop();            audioSource.playOnAwake = false;        }      _lastPlayStatus = false;    }    /// <summary>    /// 监测一下当前播放状态    /// </summary>    private void UpdatePlaySstatus()    {        if (_lastPlayStatus == false && audioSource.isPlaying == true)        {            if (EventPlayStart != null)            {                EventPlayStart(this);//发出事件:开始播放            }        }        if (_lastPlayStatus == true && audioSource.isPlaying == false)        {            if (EventPlayEnd != null)            {                EventPlayEnd(this);//发出事件:播放停止            }        }        _lastPlayStatus = audioSource.isPlaying;    }    public void Update()    {        UpdatePlaySstatus();    }    void OnDestoryed()    {        //如果被销毁了是否需要发出播放停止事件?        if (_lastPlayStatus == true)        {            if (EventPlayEnd != null)            {                EventPlayEnd(this);//发出事件:播放停止            }        }    }}
0 0
原创粉丝点击