/// <summary> /// 移除正在播放的音效 /// </summary> /// <param name="id"></param> public void RemoveSound(long id) { AudioGObjAssetPair pair = null; mPlayingIds.TryGetValue(id, out pair); if (pair != null) { mPlayingIds.Remove(id); AudioSource audioSrc = pair.audioObj.GetComponent <AudioSource>(); pair.asset.RemoveRef(); if (audioSrc != null) { audioSrc.clip = null; } addToPool(pair.audioObj); } }
/// <summary> /// 自动移除 /// </summary> /// <param name="id"></param> /// <param name="delayTime"></param> private void autoRemove(long id, float delayTime = 0.2f) { AudioGObjAssetPair pair = null; mPlayingIds.TryGetValue(id, out pair); if (pair == null) { return; } if (!pair.audioObj.GetComponent <AudioSource>().isPlaying) { RemoveSound(id); } else { CoroutineManager.Singleton.delayedCall(delayTime, () => autoRemove(id)); } }