diff --git a/Assets/04.AudioCore/README.md b/Assets/04.AudioCore/README.md index 39fa340..d1c87d4 100644 --- a/Assets/04.AudioCore/README.md +++ b/Assets/04.AudioCore/README.md @@ -1 +1 @@ -# 代码检查工具 +# 音频播放工具 diff --git a/Assets/04.AudioCore/RunTime/Abstract.meta b/Assets/04.AudioCore/RunTime/Abstract.meta new file mode 100644 index 0000000..cb32b9f --- /dev/null +++ b/Assets/04.AudioCore/RunTime/Abstract.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b4cff2e957a4add41a649e570dbabd9d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/IAudio.cs b/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs similarity index 79% rename from Assets/04.AudioCore/RunTime/IAudio.cs rename to Assets/04.AudioCore/RunTime/Abstract/IAudio.cs index bcf044f..9e1c84d 100644 --- a/Assets/04.AudioCore/RunTime/IAudio.cs +++ b/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs @@ -1,56 +1,56 @@ -using System.Collections; +using System.Collections; using System.Collections.Generic; using UnityEngine; -namespace AudioCore +namespace Stary.Evo.AudioCore { /// - /// Audio + /// Audio数据 /// public struct AudioData { /// - /// ӳٲʱ + /// 延迟播放时间 /// public float delayTime; /// - /// Ƶ + /// 音频 /// public AudioClip clip; /// - /// + /// 音量 /// public float volume; /// - /// صΪ + /// 回调行为 /// public System.Action onComplete; /// - /// ӳٻصִеʱ + /// 延迟回调执行的时间 /// public float delayOnCompleteTime; /// - /// Ȼʱ + /// 自然过渡时间 /// public float fadeDuration; /// - /// Ƿ񲻴һζԻ + /// 是否不打断上一段对话 /// public bool isNotOverVoice; /// - /// Ƿ3D + /// 是否是3D声音 /// public bool is3D; /// - /// 3D + /// 3D声音载体 /// public GameObject soundObject; } @@ -69,7 +69,7 @@ namespace AudioCore public abstract void Stop(AudioData audioData); /// - /// Ƶݳʼ + /// 音频数据初始化 /// /// /// diff --git a/Assets/04.AudioCore/RunTime/IAudio.cs.meta b/Assets/04.AudioCore/RunTime/Abstract/IAudio.cs.meta similarity index 100% rename from Assets/04.AudioCore/RunTime/IAudio.cs.meta rename to Assets/04.AudioCore/RunTime/Abstract/IAudio.cs.meta diff --git a/Assets/04.AudioCore/RunTime/AudioCore.RunTime.asmdef b/Assets/04.AudioCore/RunTime/AudioCore.RunTime.asmdef new file mode 100644 index 0000000..34ce85f --- /dev/null +++ b/Assets/04.AudioCore/RunTime/AudioCore.RunTime.asmdef @@ -0,0 +1,3 @@ +{ + "name": "AudioCore.RunTime" +} diff --git a/Assets/04.AudioCore/RunTime/AudioCore.RunTime.asmdef.meta b/Assets/04.AudioCore/RunTime/AudioCore.RunTime.asmdef.meta new file mode 100644 index 0000000..40f878b --- /dev/null +++ b/Assets/04.AudioCore/RunTime/AudioCore.RunTime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 44e8639d57fc2a94b94ecef44bf1e36a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/Base.meta b/Assets/04.AudioCore/RunTime/Base.meta new file mode 100644 index 0000000..ab16fbf --- /dev/null +++ b/Assets/04.AudioCore/RunTime/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f18d57a48c234514eaf0997407d2c9dd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/AudioSourcePool.cs b/Assets/04.AudioCore/RunTime/Base/AudioSourcePool.cs similarity index 72% rename from Assets/04.AudioCore/RunTime/AudioSourcePool.cs rename to Assets/04.AudioCore/RunTime/Base/AudioSourcePool.cs index c682f27..5d39117 100644 --- a/Assets/04.AudioCore/RunTime/AudioSourcePool.cs +++ b/Assets/04.AudioCore/RunTime/Base/AudioSourcePool.cs @@ -1,8 +1,8 @@ -using UnityEngine; +using UnityEngine; using System.Collections.Generic; using UnityEngine.SceneManagement; -namespace AudioCore +namespace Stary.Evo.AudioCore { public class AudioSourcePool { @@ -10,32 +10,32 @@ namespace AudioCore private GameObject poolObject; /// - /// سʼ + /// 对象池初始化 /// private void PoolAwake() { - // ǷѾһΪ"AudioSourcePool"Ķ + // 检查是否已经存在一个名为"AudioSourcePool"的对象 SceneManager.sceneUnloaded += OnSceneUnloaded; poolObject = GameObject.Find("AudioSourcePool"); if (poolObject == null) { - // ڣһ¶ + // 如果不存在,创建一个新对象 poolObject = new GameObject("AudioSourcePool"); } CoroutineHelper.SetRunner(); - // ʼ Voice أ 1 ɶ̬չ + // 初始化 Voice 池(最多 1 个,可动态扩展) poolDict["Voice"] = new Queue(); CreateAudioSource("Voice"); - // ʼ Music أ 2 + // 初始化 Music 池(最多 2 个) poolDict["Music"] = new Queue(); for (int i = 0; i < 2; i++) { CreateAudioSource("Music"); } - // ʼ SFX أʼ 4 ɶ̬չ + // 初始化 SFX 池(初始 4 个,可动态扩展) poolDict["SFX"] = new Queue(); for (int i = 0; i < 4; i++) { @@ -44,14 +44,14 @@ namespace AudioCore } /// - /// + /// 创建对象 /// - /// + /// 定义对象类型 private void CreateAudioSource(string type) { GameObject newObject = new GameObject($"AudioSource_{type}"); - newObject.transform.SetParent(poolObject.transform); // ¶ΪǰӶ - newObject.AddComponent().playOnAwake = false; // AudioSource Զ + newObject.transform.SetParent(poolObject.transform); // 将新对象作为当前对象的子对象 + newObject.AddComponent().playOnAwake = false; // 添加 AudioSource 组件并禁用自动播放 if (type == "Music") { newObject.GetComponent().loop = true; @@ -60,7 +60,7 @@ namespace AudioCore } /// - /// ȡ + /// 获取对象 /// /// /// @@ -73,20 +73,20 @@ namespace AudioCore if (!poolDict.ContainsKey(type)) { - Debug.LogError($"в: {type}"); + Debug.LogError($"对象池中不存在类型: {type}"); return null; } if (poolDict[type].Count == 0) { - // Ϊգ̬µ GameObject SFX Voice + // 如果池为空,动态创建新的 GameObject(仅限 SFX 与 Voice) if (type == "SFX" && type == "Voice") { CreateAudioSource(type); } else { - Debug.LogWarning($" {type} ꣬޷µ AudioSource"); + Debug.LogWarning($"对象池 {type} 已用完,无法分配新的 AudioSource"); return null; } @@ -99,7 +99,7 @@ namespace AudioCore } /// - /// ն + /// 回收对象 /// /// /// @@ -107,19 +107,19 @@ namespace AudioCore { if (!poolDict.ContainsKey(type)) { - Debug.LogError($"в: {type}"); + Debug.LogError($"对象池中不存在类型: {type}"); return; } AudioSource audioSource = audioObject.GetComponent(); - audioSource.Stop(); // ֹͣ - audioSource.clip = null; // Ƶ - audioSource.volume = 1f; // Сָ - poolDict[type].Enqueue(audioObject); // յ + audioSource.Stop(); // 停止播放 + audioSource.clip = null; // 清空音频剪辑 + audioSource.volume = 1f; // 音量大小恢复 + poolDict[type].Enqueue(audioObject); // 回收到对象池 } /// - /// ʱն + /// 场景销毁时清空对象池 /// /// void OnSceneUnloaded(Scene scene) diff --git a/Assets/04.AudioCore/RunTime/AudioSourcePool.cs.meta b/Assets/04.AudioCore/RunTime/Base/AudioSourcePool.cs.meta similarity index 100% rename from Assets/04.AudioCore/RunTime/AudioSourcePool.cs.meta rename to Assets/04.AudioCore/RunTime/Base/AudioSourcePool.cs.meta diff --git a/Assets/04.AudioCore/RunTime/CoroutineHelper.cs b/Assets/04.AudioCore/RunTime/Base/CoroutineHelper.cs similarity index 92% rename from Assets/04.AudioCore/RunTime/CoroutineHelper.cs rename to Assets/04.AudioCore/RunTime/Base/CoroutineHelper.cs index 263ab9a..c9436d5 100644 --- a/Assets/04.AudioCore/RunTime/CoroutineHelper.cs +++ b/Assets/04.AudioCore/RunTime/Base/CoroutineHelper.cs @@ -1,8 +1,8 @@ -using System.Collections; +using System.Collections; using UnityEngine; using UnityEngine.Internal; -namespace AudioCore +namespace Stary.Evo.AudioCore { public static class CoroutineHelper { diff --git a/Assets/04.AudioCore/RunTime/CoroutineHelper.cs.meta b/Assets/04.AudioCore/RunTime/Base/CoroutineHelper.cs.meta similarity index 100% rename from Assets/04.AudioCore/RunTime/CoroutineHelper.cs.meta rename to Assets/04.AudioCore/RunTime/Base/CoroutineHelper.cs.meta diff --git a/Assets/04.AudioCore/RunTime/MusicPlayer.cs b/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs similarity index 84% rename from Assets/04.AudioCore/RunTime/MusicPlayer.cs rename to Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs index 4848a0c..e4de707 100644 --- a/Assets/04.AudioCore/RunTime/MusicPlayer.cs +++ b/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs @@ -1,7 +1,7 @@ -using System.Collections; +using System.Collections; using UnityEngine; -namespace AudioCore +namespace Stary.Evo.AudioCore { public class MusicPlayer : AbstractAudio { @@ -16,9 +16,9 @@ namespace AudioCore } /// - /// ű + /// 播放背景音乐 /// - /// {[clip:Ƶ], [volume:], [fadeDuration:Ȼʱ]} + /// {[clip:音频], [volume:音量], [fadeDuration:自然过渡时间]} public override void Play(AudioData audioData) { audioData = AudioDataInitialize(audioData); @@ -44,16 +44,16 @@ namespace AudioCore } else { - Debug.LogWarning("ͬʱл"); + Debug.LogWarning("已同时存在两个背景乐在切换"); } } } /// - /// رձ + /// 关闭背景音乐 /// - /// {[fadeDuration:Ȼʱ]} + /// {[fadeDuration:自然过渡时间]} public override void Stop(AudioData audioData) { audioData = AudioDataInitialize(audioData); @@ -61,11 +61,11 @@ namespace AudioCore } /// - /// лƵ + /// 切换音频 /// - /// ŵƵ - /// 仯ʱ - /// ֹͣƵ + /// 播放的音频 + /// 变化时间 + /// 停止的音频 /// private IEnumerator FadeMusic(AudioSource source1, float fadeDuration, AudioSource source2 = null) { @@ -79,7 +79,7 @@ namespace AudioCore } /// - /// رƵЭ + /// 关闭音频的协程 /// /// /// @@ -108,7 +108,7 @@ namespace AudioCore } /// - /// ƵЭ + /// 开启音频的协程 /// /// /// diff --git a/Assets/04.AudioCore/RunTime/MusicPlayer.cs.meta b/Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs.meta similarity index 100% rename from Assets/04.AudioCore/RunTime/MusicPlayer.cs.meta rename to Assets/04.AudioCore/RunTime/Base/MusicPlayer.cs.meta diff --git a/Assets/04.AudioCore/RunTime/SFXPlayer.cs b/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs similarity index 77% rename from Assets/04.AudioCore/RunTime/SFXPlayer.cs rename to Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs index fb5484d..201d5e5 100644 --- a/Assets/04.AudioCore/RunTime/SFXPlayer.cs +++ b/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs @@ -1,13 +1,13 @@ -using System.Collections; +using System.Collections; using System.Collections.Generic; using UnityEngine; -namespace AudioCore +namespace Stary.Evo.AudioCore { public class SFXPlayer : AbstractAudio { private AudioSourcePool audioSourcePool; - private List activeSources = new List(); // ڲŵ AudioSource б + private List activeSources = new List(); // 正在播放的 AudioSource 列表 public SFXPlayer(AudioSourcePool audioSourcePool) { @@ -15,10 +15,10 @@ namespace AudioCore } /// - /// Ч + /// 播放音效 /// - /// {[clip:Ƶ], [volume:], - /// [onComplete:صΪ], [delayOnCompleteTime:ӳٻصִеʱ]} + /// {[clip:音频], [volume:音量], + /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]} public override void Play(AudioData audioData) { AudioSource source = audioSourcePool.GetAudioSource("SFX"); @@ -28,17 +28,17 @@ namespace AudioCore source.volume = audioData.volume; source.Play(); - // AudioSource б + // 将 AudioSource 加入活动列表 activeSources.Add(source); - // ʹЭ̴ӳٺͻص + // 使用协程处理延迟和回调 CoroutineHelper.StartCoroutine(PlaySFXCoroutine(source, audioData.delayOnCompleteTime, audioData.onComplete)); } /// - /// ֹͣЧ + /// 停止所有音效 /// - /// {[޿ʹñ]} + /// {[无可使用变量]} public override void Stop(AudioData audioData) { foreach (var source in activeSources) @@ -53,7 +53,7 @@ namespace AudioCore } /// - /// ЧЭ + /// 播放音效的协程 /// /// /// diff --git a/Assets/04.AudioCore/RunTime/SFXPlayer.cs.meta b/Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs.meta similarity index 100% rename from Assets/04.AudioCore/RunTime/SFXPlayer.cs.meta rename to Assets/04.AudioCore/RunTime/Base/SFXPlayer.cs.meta diff --git a/Assets/04.AudioCore/RunTime/VoicePlayer.cs b/Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs similarity index 81% rename from Assets/04.AudioCore/RunTime/VoicePlayer.cs rename to Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs index 8575d8b..2c161f9 100644 --- a/Assets/04.AudioCore/RunTime/VoicePlayer.cs +++ b/Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs @@ -1,7 +1,7 @@ -using System.Collections; +using System.Collections; using UnityEngine; -namespace AudioCore +namespace Stary.Evo.AudioCore { public class VoicePlayer : AbstractAudio { @@ -15,13 +15,13 @@ namespace AudioCore } /// - /// + /// 播放语音 /// - /// {[clip:Ƶ], [volume:], - /// [onComplete:صΪ], [delayOnCompleteTime:ӳٻصִеʱ]} + /// {[clip:音频], [volume:音量], + /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]} public override void Play(AudioData audioData) { - // ֹͣǰڲŵЭ + // 停止当前正在播放的语音与旧协程 Stop(new AudioData { }); audioData = AudioDataInitialize(audioData); @@ -38,14 +38,14 @@ namespace AudioCore currentSource.volume = audioData.volume; currentSource.Play(); - // ʹЭ̴ӳٺͻص + // 使用协程处理延迟和回调 myCoroutine = CoroutineHelper.StartCoroutine(PlayVoiceCoroutine(currentSource, audioData.delayOnCompleteTime, audioData.onComplete)); } /// - /// ֹͣ + /// 停止语音 /// - /// /// {[޿ʹñ]} + /// /// {[无可使用变量]} public override void Stop(AudioData audioData) { if (currentSource != null && currentSource.isPlaying) @@ -57,7 +57,7 @@ namespace AudioCore } /// - /// Э + /// 播放语音的协程 /// /// /// diff --git a/Assets/04.AudioCore/RunTime/VoicePlayer.cs.meta b/Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs.meta similarity index 100% rename from Assets/04.AudioCore/RunTime/VoicePlayer.cs.meta rename to Assets/04.AudioCore/RunTime/Base/VoicePlayer.cs.meta diff --git a/Assets/04.AudioCore/RunTime/Test.cs b/Assets/04.AudioCore/RunTime/Test.cs deleted file mode 100644 index 3123d06..0000000 --- a/Assets/04.AudioCore/RunTime/Test.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.SceneManagement; -using AudioCore; - -public class Test : MonoBehaviour -{ - public AudioClip clip1; - public AudioClip clip2; - public AudioClip clip21; - public AudioClip clip22; - public AudioClip clip31; - public AudioClip clip32; - - void Start() - { - //AudioCore.PlayerPrefs(); - } - - void Update() - { - if (Input.GetKeyDown(KeyCode.A)) - { - AudioCoreManager.PlayVoice(new AudioData { clip = clip1 }); - } - if (Input.GetKeyDown(KeyCode.S)) - { - AudioCoreManager.PlayVoice(new AudioData { clip = clip2 }); - } - if (Input.GetKeyDown(KeyCode.D)) - { - AudioCoreManager.PlaySFX(new AudioData { clip = clip21 }); - } - if (Input.GetKeyDown(KeyCode.F)) - { - AudioCoreManager.PlaySFX(new AudioData { clip = clip22 }); - } - if (Input.GetKeyDown(KeyCode.G)) - { - AudioCoreManager.PlayMusic(new AudioData { clip = clip31 }); - } - if (Input.GetKeyDown(KeyCode.H)) - { - AudioCoreManager.PlayMusic(new AudioData { clip = clip32 }); - } - if (Input.GetKeyDown(KeyCode.Z)) - { - AudioCoreManager.StopVoice(); - } - if (Input.GetKeyDown(KeyCode.X)) - { - AudioCoreManager.StopAllSFX(); - } - if (Input.GetKeyDown(KeyCode.C)) - { - AudioCoreManager.StopMusic(); - } - if (Input.GetKeyDown(KeyCode.Space)) - { - SceneManager.LoadScene(1); - } - } -} diff --git a/Assets/04.AudioCore/RunTime/Test.cs.meta b/Assets/04.AudioCore/RunTime/Test.cs.meta deleted file mode 100644 index 4bdb8db..0000000 --- a/Assets/04.AudioCore/RunTime/Test.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 2cca50490fb28574697c5fd3d2d37b52 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/Use.meta b/Assets/04.AudioCore/RunTime/Use.meta new file mode 100644 index 0000000..a268580 --- /dev/null +++ b/Assets/04.AudioCore/RunTime/Use.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4ffae49923bf0d34e9da8ee451f962f8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/04.AudioCore/RunTime/AudioCoreManager.cs b/Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs similarity index 66% rename from Assets/04.AudioCore/RunTime/AudioCoreManager.cs rename to Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs index 816d7ee..ac919c0 100644 --- a/Assets/04.AudioCore/RunTime/AudioCoreManager.cs +++ b/Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs @@ -1,7 +1,7 @@ -using UnityEngine; +using UnityEngine; using System.Collections.Generic; -namespace AudioCore +namespace Stary.Evo.AudioCore { public static class AudioCoreManager { @@ -13,26 +13,26 @@ namespace AudioCore static AudioCoreManager() { audioSourcePool = new AudioSourcePool(); - // ʼ + // 初始化播放器 Voice = new VoicePlayer(audioSourcePool); SFX = new SFXPlayer(audioSourcePool); Music = new MusicPlayer(audioSourcePool); } - #region + #region 语音 /// - /// + /// 播放语音 /// - /// {[clip:Ƶ], [volume:], - /// [onComplete:صΪ], [delayOnCompleteTime:ӳٻصִеʱ]} + /// {[clip:音频], [volume:音量], + /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]} public static void PlayVoice(AudioData audioData) { Voice.Play(audioData); } /// - /// ֹͣǰ + /// 停止当前的语音 /// public static void StopVoice() { @@ -42,20 +42,20 @@ namespace AudioCore #endregion - #region Ч + #region 音效 /// - /// Ч + /// 播放音效 /// - /// {[clip:Ƶ], [volume:], - /// [onComplete:صΪ], [delayOnCompleteTime:ӳٻصִеʱ]} + /// {[clip:音频], [volume:音量], + /// [onComplete:回调行为], [delayOnCompleteTime:延迟回调执行的时间]} public static void PlaySFX(AudioData audioData) { SFX.Play(audioData); } /// - /// ֹͣЧ + /// 停止所有音效 /// public static void StopAllSFX() { @@ -65,21 +65,21 @@ namespace AudioCore #endregion - #region + #region 背景音乐 /// - /// ű + /// 播放背景音乐 /// - /// {[clip:Ƶ], [volume:], [fadeDuration:Ȼʱ]} + /// {[clip:音频], [volume:音量], [fadeDuration:自然过渡时间]} public static void PlayMusic(AudioData audioData) { Music.Play(audioData); } /// - /// ֹͣű + /// 停止播放背景音乐 /// - /// Ȼʱ + /// 自然过渡时间 public static void StopMusic(float fadeDuration = 1f) { AudioData audioData = new AudioData(); diff --git a/Assets/04.AudioCore/RunTime/AudioCoreManager.cs.meta b/Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs.meta similarity index 100% rename from Assets/04.AudioCore/RunTime/AudioCoreManager.cs.meta rename to Assets/04.AudioCore/RunTime/Use/AudioCoreManager.cs.meta diff --git a/Assets/04.AudioCore/package.json b/Assets/04.AudioCore/package.json index eae7bd3..acc97d0 100644 --- a/Assets/04.AudioCore/package.json +++ b/Assets/04.AudioCore/package.json @@ -1,10 +1,10 @@ { "name": "com.staryevo.audiocore", - "version": "1.0.0", + "version": "1.0.1", "displayName": "04.AudioCore", "description": "音频播放工具", "unity": "2021.3", - "unityRelease": "30f1", + "unityRelease": "23f1", "keywords": [ "unity", "scirpt"