diff --git a/unity/Assets/UI/AudioData.cs b/unity/Assets/UI/AudioData.cs new file mode 100644 index 0000000..6462ee5 --- /dev/null +++ b/unity/Assets/UI/AudioData.cs @@ -0,0 +1,49 @@ +using UnityEngine; + +namespace GameFramework +{ + /// + /// 音效数据类 —— 封装 AudioClip 和音量。 + /// 用于 UI 音效、游戏音效的配置。 + /// + /// 使用方式: + /// 1. 创建 ScriptableObject: Assets → Create → Audio Data + /// 2. 设置 AudioClip 和音量 + /// 3. 拖到需要播放音效的组件上 + /// + [CreateAssetMenu(fileName = "NewAudioData", menuName = "GameFramework/Audio Data")] + public class AudioData : ScriptableObject + { + [Header("音效设置")] + [Tooltip("音效剪辑")] + public AudioClip clip; + + [Tooltip("音量 (0-1)")] + [Range(0f, 1f)] + public float volume = 1.0f; + + [Tooltip("是否循环播放")] + public bool loop = false; + + /// + /// 播放此音效 + /// + public void Play(AudioSource source) + { + if (source == null || clip == null) return; + + source.loop = loop; + source.volume = volume; + + if (loop) + { + source.clip = clip; + source.Play(); + } + else + { + source.PlayOneShot(clip, volume); + } + } + } +} diff --git a/unity/Assets/UI/AudioData.cs.meta b/unity/Assets/UI/AudioData.cs.meta new file mode 100644 index 0000000..ef7b38d --- /dev/null +++ b/unity/Assets/UI/AudioData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: D3pMvSKuUH1SWkWWqI1CSXJwokVRHQmfgSj0WzIXqy/Ep7AWqd3IoWo= +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/unity/Assets/UI/AudioManager.cs b/unity/Assets/UI/AudioManager.cs index 9731c52..3c48c56 100644 --- a/unity/Assets/UI/AudioManager.cs +++ b/unity/Assets/UI/AudioManager.cs @@ -4,16 +4,6 @@ using UnityEngine; namespace GameFramework { - /// - /// 音频片段数据,可挂到 ScriptableObject 或直接 SerializeField。 - /// - [System.Serializable] - public class AudioData - { - public AudioClip audioClip; - [Range(0f, 1f)] public float volume = 1f; - } - /// /// 全局音频管理器(持久单例)。 /// 管理 BGM(背景音乐,循环)和 SFX(音效,一次性)。 @@ -93,11 +83,11 @@ namespace GameFramework /// public void PlaySFX(AudioData data) { - if (data == null || data.audioClip == null) return; + if (data == null || data.clip == null) return; // sfxPlayer.volume 已在 Awake 中设为 sfxVolume, // PlayOneShot 的 volumeScale 再乘以 data.volume, // 最终音量 = sfxVolume * data.volume - sfxPlayer.PlayOneShot(data.audioClip, data.volume); + sfxPlayer.PlayOneShot(data.clip, data.volume); } /// diff --git a/unity/UserSettings/EditorUserSettings.asset b/unity/UserSettings/EditorUserSettings.asset index 3f9c886..0e02cd4 100644 --- a/unity/UserSettings/EditorUserSettings.asset +++ b/unity/UserSettings/EditorUserSettings.asset @@ -30,10 +30,10 @@ EditorUserSettings: value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a flags: 0 RecentlyUsedSceneGuid-8: - value: 0209025f575750595c57092149765d444e4e49727e7c7068757b1c65b6e36c3b + value: 5a55515156575a0b0f56592346260f444f16197c7e7f24697d2a4a32b1b0353e flags: 0 RecentlyUsedSceneGuid-9: - value: 5a55515156575a0b0f56592346260f444f16197c7e7f24697d2a4a32b1b0353e + value: 0209025f575750595c57092149765d444e4e49727e7c7068757b1c65b6e36c3b flags: 0 UnityEditor.ShaderGraph.Blackboard: value: 18135939215a0a5004000b0e15254b524c030a3f2964643d120d1230e9e93a3fd6e826abbd2e2d293c4ead313b08042de6030a0afa240c0d020be94c4ba75e435d8715fa32c70d15d11612dacc11fee5d3c5d1fe9ab1bf968e93e2ffcbc3e7e2f0b3ffe0e8b0be9af8ffaeffff8e85dd8390e3949c8899daa7