UGCProjects/GZJ/Script/Manager/SoundManager.lua

127 lines
5.2 KiB
Lua
Raw Normal View History

2025-01-08 22:46:12 +08:00
---@class SoundManager @音效系统接口库
SoundManager = SoundManager or {}
---@type table<ConfigId, AkAudio>
SoundManager.LoadedFX2D = {}
---@type table<ConfigId, AkAudio>
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;