unity AudioSource播放完聲音后要執(zhí)行的函數(shù)或條件操作
將腳本掛在要判斷聲音是否播放完畢的物體上
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ò)誤或未考慮完全的地方,望不吝賜教。
- Unity3D實(shí)現(xiàn)播放gif圖功能
- Unity 如何獲取鼠標(biāo)停留位置下的物體
- Unity之繞軸進(jìn)行旋轉(zhuǎn)的操作
- 解決unity rotate旋轉(zhuǎn)物體 限制物體旋轉(zhuǎn)角度的大坑
- unity 實(shí)現(xiàn)攝像機(jī)繞某點(diǎn)旋轉(zhuǎn)一周
- Unity3d 使用Gizmos畫(huà)一個(gè)圓圈
- unity 如何使用LineRenderer 動(dòng)態(tài)劃線
- Unity 通過(guò)LineRenderer繪制兩點(diǎn)之間的直線操作
- Unity 實(shí)現(xiàn)給物體替換材質(zhì)球
- Unity解析gif動(dòng)態(tài)圖操作
相關(guā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#實(shí)現(xiàn)寫(xiě)入系統(tǒng)日志
本文給大家分享的是作者使用使用C#實(shí)現(xiàn)將軟件日志寫(xiě)入系統(tǒng)日志中的方法,十分巧妙,有需要的小伙伴可以參考下2018-01-01Unity動(dòng)畫(huà)混合樹(shù)實(shí)例詳解
這篇文章主要為大家詳細(xì)介紹了Unity動(dòng)畫(huà)混合樹(shù)實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11C#泛型集合類(lèi)System.Collections.Generic
這篇文章介紹了C#中的泛型集合類(lèi)System.Collections.Generic,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05