欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

unity AudioSource播放完聲音后要執(zhí)行的函數(shù)或條件操作

 更新時(shí)間:2021年04月12日 15:30:00   作者:是阿根  
這篇文章主要介紹了unity AudioSource播放完聲音后要執(zhí)行的函數(shù)或條件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

將腳本掛在要判斷聲音是否播放完畢的物體上

using System.Collections;
using UnityEngine;
using UnityEngine.Events;
[RequireComponent(typeof(AudioSource))]
public class AudioManager : MonoBehaviour
{
public static AudioManager instence = null;
private AudioSource _audio;
void Awake()
{
if (instence == null)
{
instence = this;
}
}
void Start()
{
    _audio = GetComponent<AudioSource>();
  
}
void Update()
{
//按下鍵盤(pán)按鈕A鍵執(zhí)行函數(shù)播放語(yǔ)音
if (Input.GetKeyDown(KeyCode.A))
{
PlayAudio(GameObject.GetComponent().clip)
}
}
//接受音頻文件和是否重復(fù)播放
public void PlayAudio(AudioClip clip, UnityAction callback = null, bool isLoop = false)
{
//獲取自身音頻文件進(jìn)行播放并且不重復(fù)播放
_audio.clip = clip;
_audio.loop = isLoop;
_audio.Play();
//執(zhí)行協(xié)成獲取音頻文件的時(shí)間
StartCoroutine(AudioPlayFinished(_audio.clip.length, callback));
}
//執(zhí)行協(xié)成函數(shù) 并且返回時(shí)間
private IEnumerator AudioPlayFinished(float time, UnityAction callback)
{   
    yield return new WaitForSeconds(time);
    //聲音播放完畢后之下往下的代碼  
    # region   聲音播放完成后執(zhí)行的代碼
    print("聲音播放完畢,繼續(xù)向下執(zhí)行"); 
    #endregion
}
}

補(bǔ)充:Unity 的 AudioSourse 播完的監(jiān)聽(tīng)

最近涉及到 音頻結(jié)束后的調(diào)用問(wèn)題,unity 原生的音頻組件 AudioSourse 沒(méi)有功能,于是自己寫(xiě)了一個(gè)。

下面是代碼:

using Assets.Scripts.Entities;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine; 
public class AudioSourceInfo
{
    private float playTime = 0;
    public AudioSource AudioSource { get; private set; }
    public AudioState AudioState = AudioState.Idle;
    public Action AfterPlaying { get; set; }
    public int ID = 0;
    public AudioSourceInfo(GameObject go)
    {
        this.AudioSource = go.AddComponent<AudioSource>();
    }
    public AudioClip Clip
    {
        get
        {
            return this.AudioSource.clip;
        }
        set
        {
            this.AudioSource.clip = value;
            playTime = 0;
        }
    }
    public bool Loop
    {
        get
        {
            return this.AudioSource.loop ;
        }
        set
        {
            this.AudioSource.loop = value;
        }
    }
    public float Volume
    {
        get
        {
            return this.AudioSource.volume;
        }
        set
        {
            this.AudioSource.volume = value;
        }
    }
    public void Play()
    {
        if (null == this.AudioSource)
        {
            return;
        }
        this.AudioState = AudioState.IsPlaying;
        this.AudioSource.Play();
    }
    public void Pause()
    {
        if (null == this.AudioSource)
        {
            return;
        }
        if(this.AudioSource.isPlaying)
        {
            this.AudioState = AudioState.Pause;
            this.AudioSource.Pause();
        }
    }
    public void Stop()
    {
        if (null == this.AudioSource)
        {
            return;
        }
        this.AudioState = AudioState.Stop;
        this.AudioSource.Stop();
        if(AfterPlaying!= null)
        {
            this.AfterPlaying();
        }
    }
    private void Update()
    {
        if (this.AudioSource != null &&  this.AudioSource.clip!= null && this.AudioState == AudioState.IsPlaying)
        {
            playTime += Time.fixedDeltaTime;
            if (playTime >= this.Clip.length)
            {
                playTime = 0;
                this.Stop();
            }
        }
    }
} 
public enum AudioState
{
    Idle,
    IsPlaying,
    Pause,
    Stop,
}
 

補(bǔ)充:Unity3d AudioSource如何監(jiān)聽(tīng)播放完成并處理邏輯

想知道AudioSource什么時(shí)候播放完成并處理相關(guān)的邏輯,比如切換曲目,而unity又沒(méi)有提供相應(yīng)的事件

于是想到下面幾種方案:

1、Update時(shí)時(shí)判斷isPlaying

2、獲取音頻的播放長(zhǎng)度,Invoke一下

后來(lái)查看api的時(shí)候突然想到,可以用協(xié)程啊。原理和Invoke一樣,這應(yīng)該是最好的方案了。

不過(guò)如果音頻暫停掉了之后而又沒(méi)有更新協(xié)程函數(shù)的話,問(wèn)題就出現(xiàn)了。所以暫停的時(shí)候記得更新協(xié)程函數(shù)。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • C#委托與匿名委托詳解

    C#委托與匿名委托詳解

    這篇文章主要為大家詳細(xì)介紹了C#委托與匿名委托的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C#操作IIS程序池及站點(diǎn)的創(chuàng)建配置實(shí)現(xiàn)代碼

    C#操作IIS程序池及站點(diǎn)的創(chuàng)建配置實(shí)現(xiàn)代碼

    最近在做一個(gè)WEB程序的安裝包;對(duì)一些操作IIS進(jìn)行一個(gè)簡(jiǎn)單的總結(jié);主要包括對(duì)IIS進(jìn)行站點(diǎn)的新建以及新建站點(diǎn)的NET版本的選擇,還有針對(duì)IIS7程序池的托管模式以及版本的操作
    2013-03-03
  • C#串口連接的讀取和發(fā)送詳解

    C#串口連接的讀取和發(fā)送詳解

    這篇文章主要給大家介紹了關(guān)于C#串口連接的讀取和發(fā)送的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C#打印出正等腰三角形實(shí)例代碼

    C#打印出正等腰三角形實(shí)例代碼

    C#打印出正等腰三角形實(shí)例代碼,需要的朋友可以參考一下
    2013-03-03
  • 使用C#實(shí)現(xiàn)寫(xiě)入系統(tǒng)日志

    使用C#實(shí)現(xiàn)寫(xiě)入系統(tǒng)日志

    本文給大家分享的是作者使用使用C#實(shí)現(xiàn)將軟件日志寫(xiě)入系統(tǒng)日志中的方法,十分巧妙,有需要的小伙伴可以參考下
    2018-01-01
  • Unity動(dòng)畫(huà)混合樹(shù)實(shí)例詳解

    Unity動(dòng)畫(huà)混合樹(shù)實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了Unity動(dòng)畫(huà)混合樹(shù)實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C#實(shí)現(xiàn)屏幕拷貝的方法

    C#實(shí)現(xiàn)屏幕拷貝的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)屏幕拷貝的方法,實(shí)例分析了兩種常用的屏幕拷貝實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-06-06
  • C#泛型集合類(lèi)System.Collections.Generic

    C#泛型集合類(lèi)System.Collections.Generic

    這篇文章介紹了C#中的泛型集合類(lèi)System.Collections.Generic,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • C#實(shí)現(xiàn)異步發(fā)送郵件的方法

    C#實(shí)現(xiàn)異步發(fā)送郵件的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)異步發(fā)送郵件的方法,涉及C#異步操作與郵件發(fā)送的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#操作進(jìn)程的方法介紹

    C#操作進(jìn)程的方法介紹

    這篇文章介紹了C#操作進(jìn)程的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02

最新評(píng)論