---@class SoundManager @音效系统接口库 SoundManager = SoundManager or {} ---@type table SoundManager.LoadedFX2D = {} ---@type table SoundManager.LoadedFX3D = {} -----------------------------------------------------[Client]----------------------------------------------------- ---播放2D音效 ---@return EventId int @音效ID ---@param ConfigId int @音效资源ID(SoundConfig.lua文件中添加) function SoundManager.PlaySound2D(ConfigId) local Audio = SoundManager.GetSound2D(ConfigId) return UGCSoundManagerSystem.PlaySound2D(Audio) end ---在指定位置播放音效 ---@return EventId int @音效ID ---@param ConfigId int @音效资源ID(SoundConfig.lua文件中添加) ---@param Location Vector @位置 ---@param Rotation Rotator @旋转 可使用Rotator.New(Roll,Pitch,Yaw)创建,结构{Roll=Roll, Pitch=Pitch, Yaw=Yaw} function SoundManager.PlaySoundAtLocation(ConfigId, Location, Rotation) local Audio = SoundManager.GetSound3D(ConfigId) return UGCSoundManagerSystem.PlaySoundAtLocation(Audio, Location, Rotation) end ---依附于Actor播放音效 ---@return EventId int @音效ID ---@param ConfigId int @音效资源ID(SoundConfig.lua文件中添加) ---@param AttachedActor AActor @依附的Actor ---@param StopWhenAttachedToDestroyed bool @依附的Actor销毁时是否停止音效播放 function SoundManager.PlaySoundAttachActor(ConfigId, AttachedActor, StopWhenAttachedToDestroyed) local Audio = SoundManager.GetSound3D(ConfigId) return UGCSoundManagerSystem.PlaySoundAttachActor(Audio, AttachedActor, StopWhenAttachedToDestroyed) end ---停止全部音效 function SoundManager.StopAllSound() UGCSoundManagerSystem.StopAllSound() end ---停止指定Actor上的所有音效 ---@param Actor AActor @指定的Actor function SoundManager.StopSoundByActor(Actor) UGCSoundManagerSystem.StopSoundByActor(Actor) end ---停止指定ID的音效 ---@param ID int @音效ID(非音效资源ID) function SoundManager.StopSoundByID(ID) UGCSoundManagerSystem.StopSoundByID(ID) end ---获取指定2D音效资源 ---@return AKEvent UAkAudioEvent* @音效资源 ---@param ConfigId int @音效ID function SoundManager.GetSound2D(ConfigId) local CachedAudio2D = SoundManager.LoadedFX2D[ConfigId] if CachedAudio2D == nil or UE.IsValid(CachedAudio2D) == false then local SoundConfig = require('Script.Global.SoundConfig') local AudioPath = SoundConfig.FX2D[ConfigId] CachedAudio2D = UE.LoadObject(AudioPath) SoundManager.LoadedFX2D[ConfigId] = CachedAudio2D end return CachedAudio2D end ---获取指定3D音效资源 ---@return AKEvent UAkAudioEvent* @音效资源 ---@param ConfigId int @音效ID function SoundManager.GetSound3D(ConfigId) local CachedAudio3D = SoundManager.LoadedFX3D[ConfigId] if CachedAudio3D == nil or UE.IsValid(CachedAudio3D) == false then local SoundConfig = require('Script.Global.SoundConfig') local AudioPath = SoundConfig.FX3D[ConfigId] CachedAudio3D = UE.LoadObject(AudioPath) SoundManager.LoadedFX3D[ConfigId] = CachedAudio3D end return CachedAudio3D end -----------------------------------------------------[Server]----------------------------------------------------- ---广播播放2D音效 ---@param ConfigId int function SoundManager.MulticastPlaySound2D(ConfigId) UnrealNetwork.CallUnrealRPC_Multicast_Unreliable(UGCGameSystem.GameState, "Client_MulticastRPC_PlaySound2D", ConfigId) end ---广播在指定位置播放音效 ---@param ConfigId int @音效资源ID(SoundConfig.lua文件中添加) ---@param Location Vector @位置 ---@param Rotation Rotator @旋转 可使用Rotator.New(Roll,Pitch,Yaw)创建,结构{Roll=Roll, Pitch=Pitch, Yaw=Yaw} function SoundManager.MulticastPlaySoundAtLocation(ConfigId, Location, Rotation) UnrealNetwork.CallUnrealRPC_Multicast_Unreliable(UGCGameSystem.GameState, "Client_MulticastRPC_PlaySoundAtLocation", ConfigId, VectorHelper.ToLuaTable(Location), VectorHelper.RotToLuaTable(Rotation)) end ---广播依附于Actor播放音效 ---@param ConfigId int @音效资源ID(SoundConfig.lua文件中添加) ---@param AttachedActor AActor @依附的Actor ---@param StopWhenAttachedToDestroyed bool @依附的Actor销毁时是否停止音效播放 function SoundManager.MulticastPlaySoundAttachActor(ConfigId, AttachedActor, StopWhenAttachedToDestroyed) UnrealNetwork.CallUnrealRPC_Multicast_Unreliable(UGCGameSystem.GameState, "Client_MulticastRPC_PlaySoundAttachActor", ConfigId, AttachedActor, StopWhenAttachedToDestroyed) end ---广播停止全部音效 function SoundManager.MulticastStopAllSound() UnrealNetwork.CallUnrealRPC_Multicast_Unreliable(UGCGameSystem.GameState, "Client_MulticastRPC_StopAllSound") end ---广播停止指定Actor上的所有音效 ---@param Actor AActor @指定的Actor function SoundManager.MulticastStopSoundByActor(Actor) UnrealNetwork.CallUnrealRPC_Multicast_Unreliable(UGCGameSystem.GameState, "Client_MulticastRPC_StopSoundByActor", Actor) end ---广播停止指定ID的音效 ---@param ID int @音效ID(非音效资源ID) function SoundManager.MulticastStopSoundByID(ID) UnrealNetwork.CallUnrealRPC_Multicast_Unreliable(UGCGameSystem.GameState, "Client_MulticastRPC_StopSoundByID", ID) end return SoundManager;