【m】 修改淡入淡出
This commit is contained in:
@@ -84,9 +84,10 @@ namespace Stary.Evo.AudioCore
|
|||||||
UniTask FadeInMusic(AudioSource source, float fadeDuration);
|
UniTask FadeInMusic(AudioSource source, float fadeDuration);
|
||||||
UniTask FadeOutMusic(AudioSource source, float fadeDuration);
|
UniTask FadeOutMusic(AudioSource source, float fadeDuration);
|
||||||
|
|
||||||
|
|
||||||
void Stop();
|
void Stop();
|
||||||
void StopAll();
|
void StopAll();
|
||||||
|
|
||||||
|
AudioSource GetAudioSource();
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract class AbstractAudio : IAudio
|
public abstract class AbstractAudio : IAudio
|
||||||
@@ -99,6 +100,13 @@ namespace Stary.Evo.AudioCore
|
|||||||
public abstract UniTask PlayAsync(AudioData audioData);
|
public abstract UniTask PlayAsync(AudioData audioData);
|
||||||
|
|
||||||
public abstract void StopAll();
|
public abstract void StopAll();
|
||||||
|
public abstract AudioSource GetAudioSource();
|
||||||
|
|
||||||
|
|
||||||
|
public virtual UniTask FadeOutVoice(float fadeDuration)
|
||||||
|
{
|
||||||
|
return UniTask.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public virtual void Stop()
|
public virtual void Stop()
|
||||||
@@ -114,6 +122,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
AudioSourcePool.Creation();
|
AudioSourcePool.Creation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 音频数据初始化
|
/// 音频数据初始化
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -126,10 +135,14 @@ namespace Stary.Evo.AudioCore
|
|||||||
audioData.volume = 1f;
|
audioData.volume = 1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!GetType().Name.Contains("Voice"))
|
||||||
|
{
|
||||||
if (audioData.fadeDuration == 0)
|
if (audioData.fadeDuration == 0)
|
||||||
{
|
{
|
||||||
audioData.fadeDuration = 1f;
|
audioData.fadeDuration = 1f;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return audioData;
|
return audioData;
|
||||||
}
|
}
|
||||||
@@ -181,9 +194,10 @@ namespace Stary.Evo.AudioCore
|
|||||||
/// <param name="delay"></param>
|
/// <param name="delay"></param>
|
||||||
/// <param name="onComplete"></param>
|
/// <param name="onComplete"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async UniTask PlayAudioAWait(AudioSourceToken audioSourceToken, float delay, System.Action onComplete)
|
public async UniTask PlayAudioAWait(AudioSourceToken audioSourceToken, float delay,
|
||||||
|
System.Action onComplete, float fadeDuration = 1f)
|
||||||
{
|
{
|
||||||
await PlayAudioAWait(audioSourceToken, delay);
|
await PlayAudioAWait(audioSourceToken, delay, fadeDuration);
|
||||||
onComplete?.Invoke();
|
onComplete?.Invoke();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,14 +208,14 @@ namespace Stary.Evo.AudioCore
|
|||||||
/// <param name="delay"></param>
|
/// <param name="delay"></param>
|
||||||
/// <param name="onComplete"></param>
|
/// <param name="onComplete"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async UniTask PlayAudioAWait(AudioSourceToken audioSourceToken, float delay)
|
public async UniTask PlayAudioAWait(AudioSourceToken audioSourceToken, float delay, float fadeDuration = 1f)
|
||||||
{
|
{
|
||||||
Debug.Log($"PlayAudioAWait:{GetType().Name}");
|
Debug.Log($"PlayAudioAWait:{GetType().Name}");
|
||||||
if (!GetType().Name.Contains("Voice"))
|
if (GetType().Name.Contains("Voice"))
|
||||||
{
|
{
|
||||||
await UniTask.Delay(TimeSpan.FromSeconds(audioSourceToken.source.clip.length - 2f),
|
await UniTask.Delay(TimeSpan.FromSeconds(audioSourceToken.source.clip.length - fadeDuration),
|
||||||
cancellationToken: audioSourceToken.cancellationToken.Token);
|
cancellationToken: audioSourceToken.cancellationToken.Token);
|
||||||
await FadeOutMusic(audioSourceToken.source, 2f);
|
await FadeOutMusic(audioSourceToken.source, fadeDuration);
|
||||||
await UniTask.Delay(TimeSpan.FromSeconds(delay),
|
await UniTask.Delay(TimeSpan.FromSeconds(delay),
|
||||||
cancellationToken: audioSourceToken.cancellationToken.Token);
|
cancellationToken: audioSourceToken.cancellationToken.Token);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
|
|
||||||
public class AudioSourcePool : IAudioSourcePool
|
public class AudioSourcePool : IAudioSourcePool
|
||||||
{
|
{
|
||||||
private GameObject poolObject;
|
private Transform active;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 回收对象的父物体
|
/// 回收对象的父物体
|
||||||
@@ -70,18 +70,26 @@ namespace Stary.Evo.AudioCore
|
|||||||
public AudioSourcePool(string poolName, int poolSize)
|
public AudioSourcePool(string poolName, int poolSize)
|
||||||
{
|
{
|
||||||
this.poolSize = poolSize;
|
this.poolSize = poolSize;
|
||||||
poolObject = GameObject.Find(poolName);
|
var poolObject = GameObject.Find(poolName);
|
||||||
if (poolObject == null)
|
if (poolObject == null)
|
||||||
{
|
{
|
||||||
// 如果不存在,创建一个新对象
|
// 如果不存在,创建一个新对象
|
||||||
poolObject = new GameObject(poolName);
|
active = new GameObject(poolName).transform;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
active = poolObject.transform;
|
||||||
}
|
}
|
||||||
|
|
||||||
poolObject = GameObject.Find($"recycle_{poolName}");
|
var recycleObject = GameObject.Find($"recycle_{poolName}");
|
||||||
if (poolObject == null)
|
if (recycle == null)
|
||||||
{
|
{
|
||||||
// 如果不存在,创建一个新对象
|
// 如果不存在,创建一个新对象
|
||||||
poolObject = new GameObject($"recycle_{poolName}");
|
recycle = new GameObject($"recycle_{poolName}").transform;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
recycle = recycleObject.transform;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +102,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
AudioSource source = CreatAudioSource();
|
AudioSource source = CreatAudioSource();
|
||||||
if (source == null)
|
if (source == null)
|
||||||
{
|
{
|
||||||
Debug.LogErrorFormat("对象池【{0}】已达最大数量【{1}】,无法创建新对象", poolObject.name, poolSize);
|
Debug.LogErrorFormat("对象池【{0}】已达最大数量【{1}】,无法创建新对象", active.name, poolSize);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,7 +126,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
if (noRecycleCount > 0)
|
if (noRecycleCount > 0)
|
||||||
{
|
{
|
||||||
audioSourceToken = inactivepool.Dequeue();
|
audioSourceToken = inactivepool.Dequeue();
|
||||||
audioSourceToken.source.transform.SetParent(poolObject.gameObject.transform);
|
audioSourceToken.source.transform.parent = active;
|
||||||
noRecycleCount--;
|
noRecycleCount--;
|
||||||
if (audioSourceToken.source == null)
|
if (audioSourceToken.source == null)
|
||||||
Debug.LogErrorFormat("对象池中不存在此对象【{0}】请排查代码", audioSourceToken.source);
|
Debug.LogErrorFormat("对象池中不存在此对象【{0}】请排查代码", audioSourceToken.source);
|
||||||
@@ -129,7 +137,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
var source = CreatAudioSource();
|
var source = CreatAudioSource();
|
||||||
if (source == null)
|
if (source == null)
|
||||||
{
|
{
|
||||||
Debug.LogErrorFormat("对象池【{0}】已达最大数量【{1}】,无法创建新对象", poolObject.name, poolSize);
|
Debug.LogErrorFormat("对象池【{0}】已达最大数量【{1}】,无法创建新对象", active.name, poolSize);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +192,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
{
|
{
|
||||||
noRecycleCount = 0;
|
noRecycleCount = 0;
|
||||||
poolCount = 0;
|
poolCount = 0;
|
||||||
GameObject.Destroy(poolObject);
|
GameObject.Destroy(active.gameObject);
|
||||||
inactivepool.Clear();
|
inactivepool.Clear();
|
||||||
GameObject.Destroy(recycle.gameObject);
|
GameObject.Destroy(recycle.gameObject);
|
||||||
for (int i = 0; i < activepool.Count; i++)
|
for (int i = 0; i < activepool.Count; i++)
|
||||||
@@ -204,9 +212,9 @@ namespace Stary.Evo.AudioCore
|
|||||||
if (poolCount >= poolSize && poolSize > 0)
|
if (poolCount >= poolSize && poolSize > 0)
|
||||||
return null;
|
return null;
|
||||||
poolCount++;
|
poolCount++;
|
||||||
AudioSource source = new GameObject($"{poolObject.name}_{poolCount}").AddComponent<AudioSource>();
|
AudioSource source = new GameObject($"{active.name}_{poolCount}").AddComponent<AudioSource>();
|
||||||
source.gameObject.transform.SetParent(recycle);
|
source.gameObject.transform.SetParent(recycle);
|
||||||
source.transform.SetParent(poolObject.transform); // 将新对象作为当前对象的子对象
|
source.transform.SetParent(active.transform); // 将新对象作为当前对象的子对象
|
||||||
source.playOnAwake = false; // 添加 AudioSource 组件并禁用自动播放
|
source.playOnAwake = false; // 添加 AudioSource 组件并禁用自动播放
|
||||||
return source;
|
return source;
|
||||||
}
|
}
|
||||||
@@ -228,6 +236,12 @@ namespace Stary.Evo.AudioCore
|
|||||||
this.cancellationToken = cancellationToken;
|
this.cancellationToken = cancellationToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AudioSourceToken(AudioSourceToken sourceToken)
|
||||||
|
{
|
||||||
|
this.source = sourceToken.source;
|
||||||
|
this.cancellationToken = sourceToken.cancellationToken;
|
||||||
|
}
|
||||||
|
|
||||||
// 添加释放方法
|
// 添加释放方法
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -145,6 +145,11 @@ namespace Stary.Evo.AudioCore
|
|||||||
FadeAllMusic();
|
FadeAllMusic();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override AudioSource GetAudioSource()
|
||||||
|
{
|
||||||
|
return currentAudioSource;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 关闭背景音乐
|
/// 关闭背景音乐
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -22,8 +22,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
{
|
{
|
||||||
AudioSourceToken audioSourceToken = await PlayAudio(audioData);
|
AudioSourceToken audioSourceToken = await PlayAudio(audioData);
|
||||||
// 使用协程处理延迟和回调
|
// 使用协程处理延迟和回调
|
||||||
PlayAudioAWait(audioSourceToken, audioData.delayOnCompleteTime,
|
PlayAudioAWait(audioSourceToken, audioData.delayOnCompleteTime, audioData.onComplete);
|
||||||
audioData.onComplete);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async UniTask PlayAsync(AudioData audioData)
|
public override async UniTask PlayAsync(AudioData audioData)
|
||||||
@@ -113,6 +112,12 @@ namespace Stary.Evo.AudioCore
|
|||||||
AudioSourcePool.RecycleAll();
|
AudioSourcePool.RecycleAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override AudioSource GetAudioSource()
|
||||||
|
{
|
||||||
|
Debug.LogWarning("SFXPlayer: GetAudioSource is not implemented.");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
AudioSourcePool.RecycleAll();
|
AudioSourcePool.RecycleAll();
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
AudioSourceToken audioSourceToken = await PlayAudio(audioData);
|
AudioSourceToken audioSourceToken = await PlayAudio(audioData);
|
||||||
// 使用协程处理延迟和回调
|
// 使用协程处理延迟和回调
|
||||||
PlayAudioAWait(audioSourceToken,
|
PlayAudioAWait(audioSourceToken,
|
||||||
audioData.delayOnCompleteTime, audioData.onComplete);
|
audioData.delayOnCompleteTime, audioData.onComplete, audioData.fadeDuration);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -41,7 +41,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
public override async UniTask PlayAsync(AudioData audioData)
|
public override async UniTask PlayAsync(AudioData audioData)
|
||||||
{
|
{
|
||||||
AudioSourceToken audioSourceToken = await PlayAudio(audioData);
|
AudioSourceToken audioSourceToken = await PlayAudio(audioData);
|
||||||
await PlayAudioAWait(audioSourceToken, audioData.delayOnCompleteTime);
|
await PlayAudioAWait(audioSourceToken, audioData.delayOnCompleteTime, audioData.fadeDuration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -113,7 +113,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
}
|
}
|
||||||
|
|
||||||
currentSource.source.Play();
|
currentSource.source.Play();
|
||||||
|
FadeInMusic(currentSource.source, audioData.fadeDuration);
|
||||||
return audioSourceToken;
|
return audioSourceToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,6 +137,11 @@ namespace Stary.Evo.AudioCore
|
|||||||
AudioSourcePool.RecycleAll();
|
AudioSourcePool.RecycleAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override AudioSource GetAudioSource()
|
||||||
|
{
|
||||||
|
return currentSource.source;
|
||||||
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
AudioSourcePool.RecycleAll();
|
AudioSourcePool.RecycleAll();
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ namespace Stary.Evo.AudioCore
|
|||||||
Voice = new VoicePlayer(Resources);
|
Voice = new VoicePlayer(Resources);
|
||||||
SFX = new SFXPlayer(Resources);
|
SFX = new SFXPlayer(Resources);
|
||||||
Music = new MusicPlayer(Resources);
|
Music = new MusicPlayer(Resources);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region 语音
|
#region 语音
|
||||||
@@ -39,6 +38,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
Debug.LogError("AudioCoreManager: Voice is null, please initialize it first.");
|
Debug.LogError("AudioCoreManager: Voice is null, please initialize it first.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Voice?.Play(audioData);
|
Voice?.Play(audioData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,6 +58,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
Debug.LogError("AudioCoreManager: Voice is null, please initialize it first.");
|
Debug.LogError("AudioCoreManager: Voice is null, please initialize it first.");
|
||||||
return UniTask.CompletedTask;
|
return UniTask.CompletedTask;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Voice.PlayAsync(audioData);
|
return Voice.PlayAsync(audioData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,6 +72,20 @@ namespace Stary.Evo.AudioCore
|
|||||||
Debug.LogError("AudioCoreManager: Voice is null, please initialize it first.");
|
Debug.LogError("AudioCoreManager: Voice is null, please initialize it first.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Voice.Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 停止当前的语音
|
||||||
|
/// </summary>
|
||||||
|
public static async UniTask FadeOutVoice(float fadeDuration)
|
||||||
|
{
|
||||||
|
if (Voice == null)
|
||||||
|
{
|
||||||
|
Debug.LogError("AudioCoreManager: Voice is null, please initialize it first.");
|
||||||
|
}
|
||||||
|
await Voice.FadeOutMusic(Voice.GetAudioSource(), fadeDuration);
|
||||||
Voice.Stop();
|
Voice.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,6 +107,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
Debug.LogError("AudioCoreManager: SFX is null, please initialize it first.");
|
Debug.LogError("AudioCoreManager: SFX is null, please initialize it first.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SFX.Play(audioData);
|
SFX.Play(audioData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,6 +121,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
Debug.LogError("AudioCoreManager: SFX is null, please initialize it first.");
|
Debug.LogError("AudioCoreManager: SFX is null, please initialize it first.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioData audioData = new AudioData();
|
AudioData audioData = new AudioData();
|
||||||
SFX.Stop();
|
SFX.Stop();
|
||||||
}
|
}
|
||||||
@@ -126,6 +143,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
Debug.LogError("AudioCoreManager: Music is null, please initialize it first.");
|
Debug.LogError("AudioCoreManager: Music is null, please initialize it first.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Music.Play(audioData);
|
Music.Play(audioData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,6 +160,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
Debug.LogError("AudioCoreManager: Music is null, please initialize it first.");
|
Debug.LogError("AudioCoreManager: Music is null, please initialize it first.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Music.SetMusicVolume(fadeDuration, targetVolume);
|
Music.SetMusicVolume(fadeDuration, targetVolume);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -157,6 +176,7 @@ namespace Stary.Evo.AudioCore
|
|||||||
Debug.LogError("AudioCoreManager: Music is null, please initialize it first.");
|
Debug.LogError("AudioCoreManager: Music is null, please initialize it first.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Music.Stop();
|
Music.Stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "com.staryevo.audiocore",
|
"name": "com.staryevo.audiocore",
|
||||||
"version": "1.1.0",
|
"version": "1.1.1",
|
||||||
"displayName": "04.AudioCore",
|
"displayName": "04.AudioCore",
|
||||||
"description": "音频播放工具",
|
"description": "音频播放工具",
|
||||||
"unity": "2021.3",
|
"unity": "2021.3",
|
||||||
|
|||||||
Reference in New Issue
Block a user