From 51ac57d49404b2cb74579417898ca34b11680701 Mon Sep 17 00:00:00 2001 From: Oliver Wong Date: Fri, 15 May 2026 10:09:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=A7=A3=E8=80=A6=E9=9F=B3=E9=A2=91?= =?UTF-8?q?=E4=B8=8E=E8=A7=A6=E6=84=9F=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../OCES/Audio/HandWritten/AudioHapticGlue.cs | 32 +++++++++++++++++++ .../Audio/HandWritten/AudioHapticGlue.cs.meta | 3 ++ .../OCES/Audio/HandWritten/AudioSystem.cs | 6 +++- .../OCES/Audio/HandWritten/SfxSystem.cs | 24 ++------------ 4 files changed, 43 insertions(+), 22 deletions(-) create mode 100644 Assets/Scripts/OCES/Audio/HandWritten/AudioHapticGlue.cs create mode 100644 Assets/Scripts/OCES/Audio/HandWritten/AudioHapticGlue.cs.meta diff --git a/Assets/Scripts/OCES/Audio/HandWritten/AudioHapticGlue.cs b/Assets/Scripts/OCES/Audio/HandWritten/AudioHapticGlue.cs new file mode 100644 index 0000000..2fe23f4 --- /dev/null +++ b/Assets/Scripts/OCES/Audio/HandWritten/AudioHapticGlue.cs @@ -0,0 +1,32 @@ +using OCES.Haptic; +using UnityEngine; + +namespace OCES.Audio +{ + public partial class AudioSystem + { + partial void OnAwakeComplete() + { + this.m_sfxSystem.OnSoundStarted += activeSound => + { + uint hapticId = activeSound.AudioObject.Haptic; + if (hapticId == 0) return; + + if (activeSound.AudioObject.ContainerType == ContainerType.Blend && activeSound.AudioObject.Haptic > 0) + { + Debug.LogWarning($"[Haptic System] Blend container {activeSound.AudioObject.Id} should not have haptic feedback!"); + return; + } + + HapticSystem.Instance.Play(hapticId, isDirectCall: false); + }; + + this.m_sfxSystem.OnSoundStopped += activeSound => + { + uint hapticId = activeSound.AudioObject.Haptic; + if (hapticId == 0) return; + HapticSystem.Instance.Stop(hapticId); + }; + } + } +} diff --git a/Assets/Scripts/OCES/Audio/HandWritten/AudioHapticGlue.cs.meta b/Assets/Scripts/OCES/Audio/HandWritten/AudioHapticGlue.cs.meta new file mode 100644 index 0000000..6767347 --- /dev/null +++ b/Assets/Scripts/OCES/Audio/HandWritten/AudioHapticGlue.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 122b47fe8b5741869abb7aca0fcc2638 +timeCreated: 1778763456 \ No newline at end of file diff --git a/Assets/Scripts/OCES/Audio/HandWritten/AudioSystem.cs b/Assets/Scripts/OCES/Audio/HandWritten/AudioSystem.cs index d151888..cd48f35 100644 --- a/Assets/Scripts/OCES/Audio/HandWritten/AudioSystem.cs +++ b/Assets/Scripts/OCES/Audio/HandWritten/AudioSystem.cs @@ -7,7 +7,7 @@ using DG.Tweening; namespace OCES.Audio { - public class AudioSystem : MonoBehaviour + public partial class AudioSystem : MonoBehaviour { public static AudioSystem Instance { get; private set; } public bool startWithMusic; @@ -29,6 +29,7 @@ namespace OCES.Audio AudioGroupConfig m_groups; AudioMixer m_mixer; Tween m_lowpassTween; + partial void OnAwakeComplete(); // ───────────────────────────────────────────── @@ -348,6 +349,9 @@ namespace OCES.Audio Parameters.EnumIds.RegisterAllGameState(); ActiveStates = new Dictionary(); + + //引入HapticSystem + OnAwakeComplete(); } void Start() diff --git a/Assets/Scripts/OCES/Audio/HandWritten/SfxSystem.cs b/Assets/Scripts/OCES/Audio/HandWritten/SfxSystem.cs index cad34e7..985235a 100644 --- a/Assets/Scripts/OCES/Audio/HandWritten/SfxSystem.cs +++ b/Assets/Scripts/OCES/Audio/HandWritten/SfxSystem.cs @@ -2,7 +2,6 @@ using System; using System.Collections; using System.Collections.Generic; using System.Linq; -using OCES.Haptic; using UnityEngine; using UnityEngine.Audio; @@ -33,6 +32,7 @@ namespace OCES.Audio AudioContainerSelector m_containerSelector; PitchStepResolver m_pitchStepResolver; VolumeStepResolver m_volumeStepResolver; + internal Action OnSoundStarted, OnSoundStopped; #if UNITY_EDITOR || DEVELOPMENT_BUILD void Update() @@ -435,14 +435,7 @@ namespace OCES.Audio IncrementClipCount(activeSound.AudioObject.Id); } - if (activeSound.AudioObject.ContainerType == ContainerType.Blend && activeSound.AudioObject.Haptic > 0) - { - Debug.LogWarning($"[Haptic System] Blend container {activeSound.AudioObject.Id} should not have haptic feedback!"); - } - else - { - TryStartHaptic(activeSound); - } + this.OnSoundStarted?.Invoke(activeSound); activeSound.Coroutine = StartCoroutine(RemoveWhenFinished(activeSound)); } @@ -565,6 +558,7 @@ namespace OCES.Audio { StopCoroutine(active.Coroutine); //Debug.Log($"[StopSound] 协程已终止: {active.AudioObject.Name[0]}"); + this.OnSoundStopped?.Invoke(active); } if(active.Source) active.Source.Stop(); @@ -572,18 +566,6 @@ namespace OCES.Audio this.m_activeSounds.Remove(active); this.m_pool.ReturnToPool(active.Source.gameObject); } - - static void TryStartHaptic(ActiveSound active) - { - uint hapticId = active.AudioObject.Haptic; - if (hapticId == 0) return; - HapticSystem.Instance.Play(hapticId, isDirectCall: false); - } - - static void TryStopHaptic(uint hapticId) - { - HapticSystem.Instance.Stop(hapticId); - } } ///