Unity 音效对象

本文介绍了一个Unity中的音效管理组件SoundObject。该组件提供了一系列音效控制方法,如播放、暂停、停止等,并能处理音效剪辑的循环播放及音量调整。SoundObject还支持在音效停止时触发事件。
using System;
using UnityEngine;

namespace Framework {
	/// <summary>
	/// 音效对象
	/// </summary>
	[RequireComponent (typeof (AudioSource))]
	public class SoundObject : MonoBehaviour {
		/// <summary>
		/// 停止事件
		/// </summary>
		public event Action<SoundObject> OnStopEvent;

		/// <summary>
		/// 音效资源
		/// </summary>
		private AudioSource m_AudioSource;

		private void Awake () {
			m_AudioSource = GetComponent<AudioSource> ();
			m_AudioSource.playOnAwake = false;
		}

		private void Update () {
			if (!m_AudioSource.isPlaying) {
				Stop ();
			}
		}

		/// <summary>
		/// 播放音效
		/// </summary>
		/// <param name="audioClip">音效剪辑</param>
		/// <param name="loop">是否循环</param>
		public void Play (AudioClip audioClip, bool loop = false) {
			gameObject.name = audioClip.name;
			gameObject.SetActive (true);

			m_AudioSource.enabled = true;
			m_AudioSource.clip = audioClip;
			m_AudioSource.loop = loop;
			m_AudioSource.Play ();
		}

		/// <summary>
		/// 重新播放
		/// </summary>
		public void Replay () {
			if (m_AudioSource.clip == null) {
				return;
			}

			gameObject.SetActive (true);
			m_AudioSource.enabled = true;
			m_AudioSource.time = 0;
			m_AudioSource.Play ();
		}

		/// <summary>
		/// 停止音效
		/// </summary>
		/// <param name="destroy">是否销毁</param>
		public void Stop (bool destroy = false) {
			gameObject.SetActive (false);

			m_AudioSource.Stop ();
			m_AudioSource.clip = null;
			m_AudioSource.enabled = false;

			if (OnStopEvent != null) {
				OnStopEvent.Invoke (this);
				OnStopEvent = null;
			}

			if (destroy) {
				Destroy (gameObject);
			}
		}

		/// <summary>
		/// 暂停音效
		/// </summary>
		public void Pause () {
			gameObject.SetActive (false);
			m_AudioSource.Pause ();
		}

		/// <summary>
		/// 取消暂停
		/// </summary>
		public void UnPause () {
			gameObject.SetActive (true);
			m_AudioSource.UnPause ();
		}

		/// <summary>
		/// 设置音乐音量
		/// </summary>
		/// <param name="val"></param>
		public void SetVolume (float val) {
			if (m_AudioSource != null) {
				m_AudioSource.volume = val;
			}
		}

		/// <summary>
		/// 获取音乐音量
		/// </summary>
		/// <param name="val"></param>
		/// <returns></returns>
		public float GetVolume (float val) {
			if (m_AudioSource != null) {
				return m_AudioSource.volume;
			}

			return 0;
		}
	}
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值