Skip to content

Commit 594f250

Browse files
committed
提交
1 parent 3a63326 commit 594f250

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+824
-448
lines changed

Assets/Script/Core/AudioManager/Audio2DPlayer.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void PlayMusic(int channel, string audioName, bool isLoop = true, float v
4040
au = CreateAudioAssetByPool(mono.gameObject, false, AudioSourceType.Music);
4141
bgMusicDic.Add(channel, au);
4242
}
43-
43+
au.musicChannel = channel;
4444
PlayMusicControl(au, audioName, isLoop, volumeScale, delay, fadeTime, flag);
4545
}
4646
public void PauseMusic(int channel, bool isPause, float fadeTime = 0.5f)
@@ -111,6 +111,7 @@ private AudioAsset GetEmptyAudioAssetFromSFXList()
111111
}
112112

113113
private List<AudioAsset> clearList = new List<AudioAsset>();
114+
//private List<int> channalClearList = new List<int>();
114115
public void ClearMoreAudioAsset()
115116
{
116117
for (int i = 0; i < sfxList.Count; i++)
@@ -121,6 +122,7 @@ public void ClearMoreAudioAsset()
121122
clearList.Add(sfxList[i]);
122123
}
123124
}
125+
124126

125127
for (int i = 0; i < clearList.Count; i++)
126128
{
@@ -129,6 +131,18 @@ public void ClearMoreAudioAsset()
129131
}
130132
clearList.Clear();
131133

134+
foreach (var item in bgMusicDic)
135+
{
136+
item.Value.CheckState();
137+
//if (item.Value.PlayState == AudioPlayState.Stop)
138+
// channalClearList.Add(item.Key);
139+
}
140+
//foreach (var item in channalClearList)
141+
//{
142+
// DestroyAudioAssetByPool(bgMusicDic[item]);
143+
// bgMusicDic.Remove(item);
144+
//}
145+
//channalClearList.Clear();
132146
}
133147

134148
}

Assets/Script/Core/AudioManager/Audio3DPlayer.cs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,21 @@ public void ClearDestroyObjectData()
270270
if (clearList[i] == null)
271271
bgMusicDic.Remove(clearList[i]);
272272
}
273+
274+
foreach (var dic in bgMusicDic)
275+
{
276+
foreach (var item in dic.Value)
277+
{
278+
item.Value.CheckState();
279+
//if(item.Value.PlayState == AudioPlayState.Stop)
280+
//{
281+
// DestroyAudioAssetByPool(bgMusicDic[dic.Key][item.Key]);
282+
// bgMusicDic[dic.Key].Remove(item.Key);
283+
284+
// break;
285+
//}
286+
}
287+
}
273288
}
274289
if (sfxDic.Count > 0)
275290
{
@@ -278,7 +293,22 @@ public void ClearDestroyObjectData()
278293
for (int i = 0; i < clearList.Count; i++)
279294
{
280295
if (clearList[i] == null)
296+
{
281297
sfxDic.Remove(clearList[i]);
298+
}
299+
}
300+
foreach (var list in sfxDic)
301+
{
302+
foreach (var item in list.Value)
303+
{
304+
item.CheckState();
305+
if(item.PlayState== AudioPlayState.Stop)
306+
{
307+
DestroyAudioAssetByPool(item);
308+
sfxDic[list.Key].Remove(item);
309+
break;
310+
}
311+
}
282312
}
283313
}
284314
}

Assets/Script/Core/AudioManager/AudioAsset.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ public class AudioAsset
2323
public AudioSourceType sourceType;
2424
public string flag = "";
2525
public string assetName = "";
26+
/// <summary>
27+
/// music,记录channel
28+
/// </summary>
29+
public int musicChannel = 0;
2630
private float totleVolume = 1;
2731
/// <summary>
2832
/// 总音量
@@ -94,10 +98,17 @@ public void SetPlayState(AudioPlayState state)
9498
{
9599
playState = state;
96100
}
101+
/// <summary>
102+
/// 检查音频是否播放完成
103+
/// </summary>
97104
public void CheckState()
98105
{
106+
if (playState == AudioPlayState.Stop)
107+
return;
99108
if (audioSource == null || (!audioSource.isPlaying && playState != AudioPlayState.Pause))
109+
{
100110
Stop();
111+
}
101112

102113
}
103114

@@ -123,6 +134,17 @@ public void Stop()
123134
if (audioSource)
124135
audioSource.Stop();
125136
playState = AudioPlayState.Stop;
137+
138+
if(sourceType== AudioSourceType.Music)
139+
{
140+
if (AudioPlayManager.OnMusicStopCallBack != null)
141+
AudioPlayManager.OnMusicStopCallBack(assetName, musicChannel, flag);
142+
}
143+
else
144+
{
145+
if (AudioPlayManager.OnSFXStopCallBack != null)
146+
AudioPlayManager.OnSFXStopCallBack(assetName, flag);
147+
}
126148
}
127149

128150
/// <summary>

Assets/Script/Core/AudioManager/AudioGroupSystem.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Script/Core/AudioManager/AudioGroupSystem/AudioGroupData.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ public class AudioGroupData
2020
/// </summary>
2121
public List<MusicPlayData> fixedMusicDatas = new List<MusicPlayData>();
2222
/// <summary>
23+
///
24+
/// </summary>
25+
public List<MusicRandomLoopData> loopMusicDatas = new List<MusicRandomLoopData>();
26+
/// <summary>
2327
/// 固定播放一次的音效
2428
/// </summary>
2529
public List<SFXPlayData> fixedSFXDatas = new List<SFXPlayData>();
@@ -36,9 +40,24 @@ public class SFXRandomLoopData
3640
/// 循环次数,-1无限次
3741
/// </summary>
3842
public int loopTimes = -1;
43+
/// <summary>
44+
/// 在最小到最大时间间隔后随机
45+
/// </summary>
3946
public Vector2 delayRange;
4047
public List<SFXPlayData> SFXDatas = new List<SFXPlayData>();
4148
}
49+
public class MusicRandomLoopData
50+
{
51+
/// <summary>
52+
/// 循环次数,-1无限次(顺序播放时起作用)
53+
/// </summary>
54+
public int loopTimes = -1;
55+
/// <summary>
56+
/// 是否随机播放,false:顺序播放
57+
/// </summary>
58+
public bool isRandom = false;
59+
public List<MusicPlayData> musicDatas = new List<MusicPlayData>();
60+
}
4261

4362
public class MusicPlayData
4463
{

Assets/Script/Core/AudioManager/AudioGroupSystem/AudioGroupData.cs.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Script/Core/AudioManager/AudioGroupSystem/AudioGroupSystem.cs

Lines changed: 65 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,29 @@ public class AudioGroupSystem :MonoBehaviour
2222
public static void Play(string keyName,float fadeTime =0.6f)
2323
{
2424
Init();
25-
if (currentAudioGroupData != null && keyName == currentAudioGroupData.keyName)
25+
if (currentAudioGroupData != null && keyName == currentAudioGroupData.keyName && audioGroupPlayState == AudioGroupPlayState.Playing)
2626
return;
2727

28+
//Debug.Log("AudioGroupSystem.Play :" + keyName);
2829
audioGroupPlayState = AudioGroupPlayState.Playing;
29-
currentAudioGroupData = audioGroupDataDic[keyName];
3030

31-
Dictionary<int, AudioAsset> playingMusics = AudioPlayManager.a2DPlayer.bgMusicDic;
3231

33-
foreach (var item in playingMusics)
32+
// Dictionary<int, AudioAsset> playingMusics = AudioPlayManager.a2DPlayer.bgMusicDic;
33+
if (currentAudioGroupData != null)
3434
{
35-
if (item.Key > currentAudioGroupData.fixedMusicDatas.Count - 1)
35+
foreach (var item in currentAudioGroupData.fixedMusicDatas)
36+
{
37+
AudioPlayManager.StopMusic2D(item.channel, fadeTime);
38+
}
39+
foreach (var ss in currentAudioGroupData.loopMusicDatas)
3640
{
37-
AudioPlayManager.StopMusic2D(item.Key, fadeTime);
41+
foreach (var item in ss.musicDatas)
42+
{
43+
AudioPlayManager.StopMusic2D(item.channel, fadeTime);
44+
}
3845
}
3946
}
47+
currentAudioGroupData = audioGroupDataDic[keyName];
4048
for (int i = 0; i < currentAudioGroupData.fixedMusicDatas.Count; i++)
4149
{
4250
MusicPlayData data = currentAudioGroupData.fixedMusicDatas[i];
@@ -51,7 +59,17 @@ public static void Play(string keyName,float fadeTime =0.6f)
5159
instance.randomLoopSFXDatas.Clear();
5260
foreach (var item in currentAudioGroupData.sFXRandomLoopDatas)
5361
{
54-
instance.randomLoopSFXDatas.Add( AddLoopSFX(item));
62+
instance.randomLoopSFXDatas.Add( new RandomLoopSFXData(item));
63+
}
64+
65+
foreach (var item in instance.randomLoopMusicDatas)
66+
{
67+
item.Close();
68+
}
69+
instance.randomLoopMusicDatas.Clear();
70+
foreach (var item in currentAudioGroupData.loopMusicDatas)
71+
{
72+
instance.randomLoopMusicDatas.Add(new RandomLoopMusicData(item));
5573
}
5674
}
5775

@@ -70,9 +88,9 @@ public static void Pause(bool isPause,float fadeTime=0.5f)
7088
AudioPlayManager.PauseSFXAll2D(isPause);
7189
}
7290

73-
private static void PlayMusicData(MusicPlayData data)
91+
private static void PlayMusicData(MusicPlayData data,string flag="")
7492
{
75-
AudioPlayManager.PlayMusic2D(data.name, data.channel, data.volume, data.isLoop, data.fadeTime, data.delay);
93+
AudioPlayManager.PlayMusic2D(data.name, data.channel, data.volume, data.isLoop, data.fadeTime, data.delay,flag:flag);
7694
}
7795

7896
private static void PlaySFXData(SFXPlayData data)
@@ -99,22 +117,12 @@ private static void Init()
99117
audioGroupDataDic.Add(item.keyName, item);
100118
}
101119
}
102-
103-
private static RandomLoopSFXData AddLoopSFX(SFXRandomLoopData data)
104-
{
105-
RandomLoopSFXData r = new RandomLoopSFXData();
106-
r.configData = data;
107-
RandomTime(r);
108-
109-
return r;
110-
}
111-
private static void RandomTime(RandomLoopSFXData data)
112-
{
113-
float r = UnityEngine.Random.Range(data.configData.delayRange.x, data.configData.delayRange.y);
114-
data.currentTime = r;
115-
}
120+
116121
List<RandomLoopSFXData> randomLoopSFXDatas = new List<RandomLoopSFXData>();
117122
List<RandomLoopSFXData> clearRandomList = new List<RandomLoopSFXData>();
123+
124+
List<RandomLoopMusicData> randomLoopMusicDatas = new List<RandomLoopMusicData>();
125+
List<RandomLoopMusicData> clearLoopMusicDatas = new List<RandomLoopMusicData>();
118126
private void Update()
119127
{
120128
if (audioGroupPlayState != AudioGroupPlayState.Playing)
@@ -128,48 +136,52 @@ private void Update()
128136
}
129137
else
130138
{
131-
if (item.currentTime <= 0)
139+
SFXPlayData sFXPlayData= item.Excute();
140+
if (sFXPlayData != null)
132141
{
133-
if (item.configData.SFXDatas.Count > 0)
134-
{
135-
int r = UnityEngine.Random.Range(0, item.configData.SFXDatas.Count);
136-
PlaySFXData(item.configData.SFXDatas[r]);
137-
}
138-
item.runTime++;
139-
RandomTime(item);
142+
PlaySFXData(sFXPlayData);
140143
}
141-
else
144+
}
145+
}
146+
if (clearRandomList.Count > 0)
147+
{
148+
foreach (var item in clearRandomList)
149+
{
150+
randomLoopSFXDatas.Remove(item);
151+
}
152+
clearRandomList.Clear();
153+
}
154+
155+
foreach (var item in randomLoopMusicDatas)
156+
{
157+
if (item.IsRunFinished())
158+
{
159+
clearLoopMusicDatas.Add(item);
160+
}
161+
else
162+
{
163+
MusicPlayData musicPlayData = item.Excute();
164+
if (musicPlayData != null)
142165
{
143-
item.currentTime -= Time.deltaTime;
166+
Debug.Log("currentAudioGroupData: " + currentAudioGroupData.keyName+ " Play MusicPlayData: " + musicPlayData.name);
167+
PlayMusicData(musicPlayData,item.flag);
144168
}
145169
}
146170
}
147171

148-
foreach (var item in clearRandomList)
172+
if (clearLoopMusicDatas.Count > 0)
149173
{
150-
randomLoopSFXDatas.Remove(item);
174+
foreach (var item in clearLoopMusicDatas)
175+
{
176+
item.Close();
177+
randomLoopMusicDatas.Remove(item);
178+
}
179+
clearLoopMusicDatas.Clear();
151180
}
152-
clearRandomList.Clear();
153181
}
154182

155183

156-
private class RandomLoopSFXData
157-
{
158-
public float currentTime;
159-
public int runTime;
160-
161-
public SFXRandomLoopData configData;
162-
163-
public bool IsRunFinished()
164-
{
165-
if (configData.loopTimes == -1)
166-
return false;
167-
if (runTime >= configData.loopTimes)
168-
return true;
169-
170-
return false;
171-
}
172-
}
184+
173185

174186
}
175187

Assets/Script/Core/AudioManager/AudioGroupSystem/AudioGroupSystem.cs.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Script/Core/AudioManager/AudioGroupSystem/Editor.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)