您的位置:首页 > 移动开发 > Unity3D

Unity AudioSource播放事件监听

2017-05-09 20:49 411 查看
恩恩,装装逼,其实不是我写的哈哈哈

这个东西放在你要监听的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);//发出事件:播放停止
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: