Unity 調用音頻事件(播放、暫停等)

將腳本隨便掛載在一個物體上即可

//======================================================================================
//==description:音頻管理器
//==state:播放音頻、暫停、暫停繼續播放、停止播放、切換音頻、音頻回調播放器、延時音頻播放器、生成2D音效、3D音效、指定音效播放
//======================================================================================
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public delegate void AudioCallBack();

[RequireComponent(typeof(AudioSource))]
public class AudioManager : MonoBehaviour
{
    public static AudioManager Instance;

    ClipData clipdata = new ClipData();

    private AudioSource _audioSource;

    void Awake()
    {
        Instance = this;
    }
    void Start()
    {
        _audioSource = GetComponent<AudioSource>();
    }
    /// <summary>
    /// 播放音頻 Resources/Audios/name
    /// </summary>
    /// <param name="name"></param>
    public void AudioPlay(string name)
    {
        _audioSource.clip = clipdata.audiodata(name);
        _audioSource.Play();
    }
    /// <summary>
    /// 暫停播放
    /// </summary>
    public void AudioPause()
    {
        _audioSource.Pause();
    }
    /// <summary>
    /// 暫停播放後繼續播放
    /// </summary>
    public void AudioUnPause()
    {
        _audioSource.UnPause();
    }
    /// <summary>
    /// 停止播放
    /// </summary>
    public void AudioStop()
    {
        _audioSource.Stop();
    }
    /// <summary>
    /// 切換音頻 Resources/Audios/name
    /// </summary>
    /// <param name="name"></param>
    public void AudioSwitch(string name)
    {
        AudioClip _clip = clipdata.audiodata(name);
        if (_audioSource.isPlaying)
        {
            _audioSource.Stop();
        }
        _audioSource.clip = _clip;
        _audioSource.Play();
    }
    /// <summary>
    /// 音頻回調播放器  Resources/Audios/name callback=>音頻播完後執行的方法。
    /// </summary>
    /// <param name="name"></param>
    /// <param name="callback"></param>
    public void AudioPlayer(string name, AudioCallBack callback)
    {
        _audioSource.clip = clipdata.audiodata(name);
        _audioSource.Play();
        StartCoroutine(AudioDelayedCallBack(_audioSource.clip.length, callback));
    }

    /// <summary>
    /// 音頻回調播放器  Resources/Audios/name callback=>音頻播完後執行的方法。
    /// </summary>
    /// <param name="name"></param>
    /// <param name="callback"></param>
    public void AudioPlayer(string name, AudioCallBack callback, float time)
    {
        _audioSource.clip = clipdata.audiodata(name);
        _audioSource.Play();
        StartCoroutine(AudioDelayedCallBack(_audioSource.clip.length + time, callback));
    }

    //音頻延遲迴調
    IEnumerator AudioDelayedCallBack(float time, AudioCallBack callback)
    {
        yield return new WaitForSeconds(time);
        callback();
    }
    /// <summary>
    /// 延時播放音頻 Resources/Audios/name time=>延時時間
    /// </summary>
    /// <param name="name"></param>
    /// <param name="time"></param>
    public void AudioDelayPlay(string name, float time)
    {
        _audioSource.clip = clipdata.audiodata(name);
        Invoke("AudioDelayTime", time);
    }
    private void AudioDelayTime() { _audioSource.Play(); }

    /// <summary>
    /// 生成2D音效 Resources/Audios/name 播放完畢消失
    /// </summary>
    /// <param name="name"></param>
    public void AudioInstantiate(string name)
    {
        GameObject obj = new GameObject();
        AudioSource _audio = obj.AddComponent<AudioSource>();
        _audio.name = "AudioSource";
        _audio.playOnAwake = true;
        _audio.clip = clipdata.audiodata(name);
        _audio.Play();
        StartCoroutine(AudioFinish(_audio.clip.length, obj));
    }
    //音效結束銷燬AudioGameObject
    IEnumerator AudioFinish(float time, GameObject obj)
    {
        yield return new WaitForSeconds(time);
        DestroyImmediate(obj);
    }
    /// <summary>
    /// 3D音效 (只播放一次) Resources/Audios/name CameraPos:攝像機位置
    /// </summary>
    /// <param name="name"></param>
    /// <param name="CameraPos"></param>
    public void AudioAtPoint(string name, Vector3 CameraPos)
    {
        AudioSource.PlayClipAtPoint(clipdata.audiodata(name), CameraPos, 1.0f);
    }
    /// <summary>
    /// 指定AudioSource播放音頻
    /// </summary>
    /// <param name="obj"></param>
    /// <param name="name"></param>
    public void AudioSourceOther(GameObject obj, string name)
    {
        AudioSource audioSource = obj.GetComponent<AudioSource>();
        audioSource.clip = clipdata.audiodata(name);
        audioSource.Play();
    }

    public void CloseAudio()
    {
        StopAllCoroutines();
        _audioSource.clip = null;
    }
}

 

設置音頻目錄(無需掛載)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//音頻加載目錄
public class ClipData
{

    public AudioClip audiodata(string name)
    {
        return Resources.Load<AudioClip>("Audios/" + name);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章