/// <summary> /// 停止播放指定的世界音效 /// </summary> /// <param name="attachTarget">附加目标</param> public void StopWorldSound(GameObject attachTarget) { if (WorldAudios.ContainsKey(attachTarget)) { if (WorldAudios[attachTarget].isPlaying) { WorldAudios[attachTarget].Stop(); } } }
/// <summary> /// 销毁所有闲置中的世界音效的音源 /// </summary> public void ClearIdleWorldAudioSource() { HashSet <GameObject> removeSet = new HashSet <GameObject>(); foreach (var audio in WorldAudios) { if (!audio.Value.isPlaying) { removeSet.Add(audio.Key); Main.Kill(audio.Value); } } foreach (var item in removeSet) { WorldAudios.Remove(item); } }
/// <summary> /// 恢复播放指定的世界音效 /// </summary> /// <param name="attachTarget">附加目标</param> /// <param name="isGradual">是否渐进式</param> public void UnPauseWorldSound(GameObject attachTarget, bool isGradual = true) { if (WorldAudios.ContainsKey(attachTarget)) { AudioSource audio = WorldAudios[attachTarget]; if (isGradual) { audio.volume = 0; audio.UnPause(); audio.DOFade(WorldVolume, 2); } else { audio.UnPause(); } } }
/// <summary> /// 暂停播放指定的世界音效 /// </summary> /// <param name="attachTarget">附加目标</param> /// <param name="isGradual">是否渐进式</param> public void PauseWorldSound(GameObject attachTarget, bool isGradual = true) { if (WorldAudios.ContainsKey(attachTarget)) { AudioSource audio = WorldAudios[attachTarget]; if (isGradual) { audio.DOFade(0, 2).OnComplete(() => { audio.Pause(); audio.volume = WorldVolume; }); } else { audio.Pause(); } } }
/// <summary> /// 播放世界音效 /// </summary> /// <param name="attachTarget">附加目标</param> /// <param name="clip">音乐剪辑</param> /// <param name="isLoop">是否循环</param> /// <param name="speed">播放速度</param> public void PlayWorldSound(GameObject attachTarget, AudioClip clip, bool isLoop = false, float speed = 1) { if (WorldAudios.ContainsKey(attachTarget)) { AudioSource audio = WorldAudios[attachTarget]; if (audio.isPlaying) { audio.Stop(); } audio.clip = clip; audio.loop = isLoop; audio.pitch = speed; audio.Play(); } else { AudioSource audio = AudioToolkit.AttachAudioSource(attachTarget, WorldPriority, WorldVolume, 1, 1, Mute); WorldAudios.Add(attachTarget, audio); audio.clip = clip; audio.loop = isLoop; audio.pitch = speed; audio.Play(); } }