Unity AudioSource播放事件监听

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20849387/article/details/71508633

恩恩,装装逼,其实不是我写的哈哈哈
这个东西放在你要监听的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);//发出事件:播放停止
            }
        }
    }


}

阅读更多
换一批

没有更多推荐了,返回首页