Skip to content

Commit cd02f65

Browse files
committed
增加音频管理器
1 parent 110a5c7 commit cd02f65

File tree

7 files changed

+366
-3
lines changed

7 files changed

+366
-3
lines changed

Assets/Game/Scripts/Base/GameMode.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class GameMode : MonoBehaviour
2222
public static ResourceManager Resource;
2323
public static UIManager UI;
2424
public static WebRequestManager WebRequest;
25+
public static AudioManager Audio;
2526

2627
/// <summary>
2728
/// 当前程序集
@@ -63,10 +64,11 @@ IEnumerator Start()
6364
Resource = GameFrameworkMode.GetModule<ResourceManager>();
6465
UI = GameFrameworkMode.GetModule<UIManager>();
6566
WebRequest = GameFrameworkMode.GetModule<WebRequestManager>();
66-
#endregion
67+
Audio = GameFrameworkMode.GetModule<AudioManager>();
68+
#endregion
6769

68-
#region resource
69-
Resource.ResUpdateType = ResUpdateType;
70+
#region resource
71+
Resource.ResUpdateType = ResUpdateType;
7072
Resource.ResUpdatePath = ResUpdatePath;
7173
Resource.LocalPathType = LocalPathType;
7274

@@ -76,6 +78,15 @@ IEnumerator Start()
7678
Resource.SetGameObjectPoolHelper(gameObjectPoolHelper.AddComponent<GameObjectPoolHelper>());
7779
#endregion
7880

81+
#region auido
82+
//设置音频播放
83+
GameObject audioPlayer = new GameObject("AudioSourcePlayer");
84+
audioPlayer.transform.SetParent(transform);
85+
//添加AduioSource
86+
Audio.SetDefaultAudioSource(audioPlayer.AddComponent<AudioSource>(), audioPlayer.AddComponent<AudioSource>(),
87+
audioPlayer.AddComponent<AudioSource>());
88+
#endregion
89+
7990
#region WebRequest
8091
//设置帮助类
8192
GameObject webRequestHelper =new GameObject("IWebRequestHelper");

Assets/GameFramework/Audio.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 245 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,245 @@
1+
//-----------------------------------------------------------------------
2+
// <copyright>
3+
// Copyright (c) 2018 Zhang Yang. All rights reserved.
4+
// </copyright>
5+
// <describe> #音频管理器# </describe>
6+
// <email> [email protected] </email>
7+
// <time> #2018年7月22日 00点37分# </time>
8+
//-----------------------------------------------------------------------
9+
10+
using System.Collections;
11+
using System.Collections.Generic;
12+
using UnityEngine;
13+
14+
namespace GameFramework.Taurus
15+
{
16+
public sealed class AudioManager:GameFrameworkModule
17+
{
18+
#region 属性
19+
//资源管理器
20+
private ResourceManager _resourceManager;
21+
//背景音乐
22+
private AudioSource _backgroundMusic;
23+
//ui音效
24+
private AudioSource _uiSound;
25+
//音效
26+
private AudioSource _soundEffect;
27+
28+
private readonly Dictionary<string, AudioClip> _backGroundMusicClips = new Dictionary<string, AudioClip>();
29+
private readonly Dictionary<string, AudioClip> _uiSoundClips = new Dictionary<string, AudioClip>();
30+
private readonly Dictionary<string, AudioClip> _soundEffectClips = new Dictionary<string, AudioClip>();
31+
32+
#endregion
33+
34+
public AudioManager()
35+
{
36+
_resourceManager = GameFrameworkMode.GetModule<ResourceManager>();
37+
}
38+
39+
#region 外部接口
40+
/// <summary>
41+
/// 设置默认声音播放器
42+
/// </summary>
43+
/// <param name="backgroundMusic"></param>
44+
/// <param name="uiSound"></param>
45+
/// <param name="soundEffect"></param>
46+
public void SetDefaultAudioSource(AudioSource backgroundMusic = null, AudioSource uiSound=null, AudioSource soundEffect=null)
47+
{
48+
_backgroundMusic = backgroundMusic;
49+
_uiSound = uiSound;
50+
_soundEffect = soundEffect;
51+
}
52+
53+
/// <summary>
54+
/// 添加背景音乐
55+
/// </summary>
56+
/// <param name="audioClipPath"></param>
57+
public void AddBackroundMusic(string audioClipPath)
58+
{
59+
AddAuioClip(audioClipPath, _backGroundMusicClips);
60+
}
61+
/// <summary>
62+
/// 添加UI音效
63+
/// </summary>
64+
/// <param name="audioClipPath"></param>
65+
public void AddUISound(string audioClipPath)
66+
{
67+
AddAuioClip(audioClipPath, _uiSoundClips);
68+
}
69+
/// <summary>
70+
/// 添加音效
71+
/// </summary>
72+
/// <param name="audioClipPath"></param>
73+
public void AddSoundEffect(string audioClipPath)
74+
{
75+
AddAuioClip(audioClipPath, _soundEffectClips);
76+
}
77+
78+
/// <summary>
79+
/// 播放在GameObject上的声音
80+
/// </summary>
81+
/// <param name="audioClipPath"></param>
82+
public void PlayGameObjectSound(GameObject go,string audioClipPath)
83+
{
84+
AudioSource audioSource=go.GetComponent<AudioSource>();
85+
if (audioSource==null)
86+
{
87+
audioSource = go.AddComponent<AudioSource>();
88+
}
89+
90+
audioSource.clip = _resourceManager?.LoadAsset<AudioClip>(audioClipPath);
91+
if (audioSource.clip != null)
92+
audioSource.Play();
93+
}
94+
/// <summary>
95+
/// 移除音乐
96+
/// </summary>
97+
/// <param name="audioClipPath"></param>
98+
public void RemoveGameObjectSound(GameObject go)
99+
{
100+
AudioSource audioSource= go.GetComponent<AudioSource>();
101+
if (audioSource!=null)
102+
MonoBehaviour.Destroy(audioSource);
103+
}
104+
105+
106+
/// <summary>
107+
/// 播放背景音乐
108+
/// </summary>
109+
/// <param name="audioClipPath">音频的资源路径</param>
110+
public void PlayBackgroundMusic(string audioClipPath,bool addAudioClip=false)
111+
{
112+
if (addAudioClip)
113+
AddBackroundMusic(audioClipPath);
114+
PlayAudioClip(audioClipPath, _backGroundMusicClips, _backgroundMusic);
115+
}
116+
117+
/// <summary>
118+
/// 停止背景音乐
119+
/// </summary>
120+
public void StopBakgroundMusic()
121+
{
122+
StopAudioClip(_backgroundMusic);
123+
}
124+
125+
/// <summary>
126+
/// 移除背景音乐
127+
/// </summary>
128+
/// <param name="audioClipPath"></param>
129+
public void RemoveBackgroundMusic(string audioClipPath)
130+
{
131+
RemoveAudioClip(audioClipPath, _backGroundMusicClips);
132+
}
133+
134+
/// <summary>
135+
/// 播放ui音效
136+
/// </summary>
137+
/// <param name="audioClipPath"></param>
138+
public void PlayUISound(string audioClipPath,bool addAudioClip=false)
139+
{
140+
if (addAudioClip)
141+
AddUISound(audioClipPath);
142+
PlayAudioClip(audioClipPath, _uiSoundClips, _uiSound);
143+
}
144+
145+
/// <summary>
146+
/// 停止
147+
/// </summary>
148+
public void StopUISoud()
149+
{
150+
StopAudioClip(_uiSound);
151+
}
152+
153+
/// <summary>
154+
/// 移除ui音效
155+
/// </summary>
156+
/// <param name="audioClipPath"></param>
157+
public void RemoveUISound(string audioClipPath)
158+
{
159+
RemoveAudioClip(audioClipPath, _uiSoundClips);
160+
}
161+
162+
/// <summary>
163+
/// 播放音效
164+
/// </summary>
165+
/// <param name="audioClipPath"></param>
166+
/// <param name="addAudioClip"></param>
167+
public void PlaySoundEffect(string audioClipPath,bool addAudioClip=false)
168+
{
169+
if (addAudioClip)
170+
AddSoundEffect(audioClipPath);
171+
PlayAudioClip(audioClipPath, _soundEffectClips, _soundEffect);
172+
}
173+
174+
/// <summary>
175+
/// 停止
176+
/// </summary>
177+
public void StopSoundEffect()
178+
{
179+
StopAudioClip(_soundEffect);
180+
}
181+
182+
/// <summary>
183+
/// 移除音效
184+
/// </summary>
185+
/// <param name="audioClipPath"></param>
186+
public void RemoveSoundEffect(string audioClipPath)
187+
{
188+
RemoveAudioClip(audioClipPath,_soundEffectClips);
189+
}
190+
191+
#endregion
192+
193+
#region 内部函数
194+
195+
//添加音频
196+
private bool AddAuioClip(string audioClipPath, Dictionary<string, AudioClip> clips)
197+
{
198+
if (!clips.ContainsKey(audioClipPath))
199+
{
200+
AudioClip audioClip = _resourceManager?.LoadAsset<AudioClip>(audioClipPath);
201+
if (audioClip != null)
202+
{
203+
clips.Add(audioClipPath, audioClip);
204+
return true;
205+
}
206+
}
207+
208+
return false;
209+
}
210+
211+
private void PlayAudioClip(string audioClipPath,Dictionary<string,AudioClip> audioClips,AudioSource audioSource)
212+
{
213+
AudioClip audioClip;
214+
if (audioClips.TryGetValue(audioClipPath, out audioClip))
215+
{
216+
if (audioSource != null && (audioSource.clip != audioClip || !audioSource.isPlaying))
217+
{
218+
audioSource.clip = audioClip;
219+
audioSource.Play();
220+
}
221+
}
222+
}
223+
224+
private void StopAudioClip(AudioSource audioSource)
225+
{
226+
audioSource?.Stop();
227+
}
228+
229+
private void RemoveAudioClip(string audioClipPath, Dictionary<string, AudioClip> audioClips)
230+
{
231+
AudioClip audioClip;
232+
if (audioClips.TryGetValue(audioClipPath,out audioClip))
233+
{
234+
audioClips.Remove(audioClipPath);
235+
audioClip = null;
236+
}
237+
}
238+
239+
#endregion
240+
241+
public override void OnClose()
242+
{
243+
}
244+
}
245+
}

Assets/GameFramework/Audio/AudioManager.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/NewAudioMixer.mixer

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
%YAML 1.1
2+
%TAG !u! tag:unity3d.com,2011:
3+
--- !u!241 &24100000
4+
AudioMixerController:
5+
m_ObjectHideFlags: 0
6+
m_CorrespondingSourceObject: {fileID: 0}
7+
m_PrefabInternal: {fileID: 0}
8+
m_Name: NewAudioMixer
9+
m_OutputGroup: {fileID: 0}
10+
m_MasterGroup: {fileID: 24300002}
11+
m_Snapshots:
12+
- {fileID: 24500006}
13+
m_StartSnapshot: {fileID: 24500006}
14+
m_SuspendThreshold: -80
15+
m_EnableSuspend: 1
16+
m_UpdateMode: 0
17+
m_ExposedParameters: []
18+
m_AudioMixerGroupViews: []
19+
m_CurrentViewIndex: 0
20+
m_TargetSnapshot: {fileID: 24500006}
21+
--- !u!243 &24300002
22+
AudioMixerGroupController:
23+
m_ObjectHideFlags: 0
24+
m_CorrespondingSourceObject: {fileID: 0}
25+
m_PrefabInternal: {fileID: 0}
26+
m_Name: Master
27+
m_AudioMixer: {fileID: 24100000}
28+
m_GroupID: 2594aea5d02aacb449f2d8ca5cc5b8b0
29+
m_Children: []
30+
m_Volume: 40111c2e5a397684483dace59de118e7
31+
m_Pitch: bd77172f42aadb74db665174caf1560b
32+
m_Effects:
33+
- {fileID: 24400004}
34+
m_UserColorIndex: 0
35+
m_Mute: 0
36+
m_Solo: 0
37+
m_BypassEffects: 0
38+
--- !u!244 &24400004
39+
AudioMixerEffectController:
40+
m_ObjectHideFlags: 3
41+
m_CorrespondingSourceObject: {fileID: 0}
42+
m_PrefabInternal: {fileID: 0}
43+
m_Name:
44+
m_EffectID: 77c5fb3879cfc8148a3abc3db659f623
45+
m_EffectName: Attenuation
46+
m_MixLevel: a4919927f1620b64fb38a43c95c64358
47+
m_Parameters: []
48+
m_SendTarget: {fileID: 0}
49+
m_EnableWetMix: 0
50+
m_Bypass: 0
51+
--- !u!245 &24500006
52+
AudioMixerSnapshotController:
53+
m_ObjectHideFlags: 0
54+
m_CorrespondingSourceObject: {fileID: 0}
55+
m_PrefabInternal: {fileID: 0}
56+
m_Name: Snapshot
57+
m_AudioMixer: {fileID: 24100000}
58+
m_SnapshotID: 57bffdf5a68c6994daa69378a3715ab7
59+
m_FloatValues: {}
60+
m_TransitionOverrides: {}

Assets/NewAudioMixer.mixer.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)