127 lines
5.2 KiB
Lua
127 lines
5.2 KiB
Lua
---@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; |