게임에서 Sounds 재생 방식을 결정하는 서비스입니다. SoundService 는 일반적으로 게임에서 작동하도록 하는 데 사용됩니다 SoundGroups 하지만 이것은 SoundGroups 작동을 위한 필수 사항은 아닙니다.
SoundService는 무엇을 할 수 있습니까?
Class.SoundService.AmbientReverb, SoundService.DistanceFactor, SoundService.DopplerScale, 1>Class.SoundService.RolloffScale1> 및 4>Class.SoundService.RolloffScale4> 등의 음향 서비스 속성을 사용하여 게임에서 모든 7>Class
Class.SoundService:SetListener() 함수는 개발자가 음향을 감지할 위치를 설정할 수 있습니다.
SoundService:PlayLocalSound() 은 어디에 부모로 지정되든 사운드를 로컬에서 재생할 수 있습니다.
Roblox의 음향 작동 방식에 대해 자세히 알아보려는 개발자는 음향 엔진에 대한 문서를 참조하십시오.(FMOD sound engine).
코드 샘플
local Players = game:GetService("Players")
local CollectionService = game:GetService("CollectionService")
local SoundService = game:GetService("SoundService")
local localPlayer = Players.LocalPlayer
local reverbTags = {
["reverb_Cave"] = Enum.ReverbType.Cave,
}
-- collect parts and group them by tag
local parts = {}
for reverbTag, reverbType in pairs(reverbTags) do
for _, part in pairs(CollectionService:GetTagged(reverbTag)) do
parts[part] = reverbType
end
end
-- function to check if a position is within a part's extents
local function positionInPart(part, position)
local extents = part.Size / 2
local offset = part.CFrame:PointToObjectSpace(position)
return offset.x < extents.x and offset.y < extents.y and offset.z < extents.z
end
local reverbType = SoundService.AmbientReverb
while true do
task.wait()
if not localPlayer then
return
end
local character = localPlayer.Character
-- default to no reverb
local newReverbType = Enum.ReverbType.NoReverb
if character and character.PrimaryPart then
local position = character.PrimaryPart.Position
-- go through all the indexed parts
for part, type in pairs(parts) do
-- see if the character is within them
if positionInPart(part, position) then
-- if so, pick that reverb type
newReverbType = type
break
end
end
end
-- set the reverb type if it has changed
if newReverbType ~= reverbType then
SoundService.AmbientReverb = newReverbType
reverbType = newReverbType
end
end
local ServerScriptService = game:GetService("ServerScriptService")
local SoundService = game:GetService("SoundService")
-- Create custom plugin button
local toolbar = plugin:CreateToolbar("Empty Script Adder")
local newScriptButton = toolbar:CreateButton("Add Script", "Create an empty Script", "rbxassetid://1507949215")
local function playLocalSound(soundId)
local sound = Instance.new("Sound")
sound.SoundId = soundId
SoundService:PlayLocalSound(sound)
sound.Ended:Wait()
sound:Destroy()
end
local function onNewScriptButtonClicked()
-- Create new empty script
local newScript = Instance.new("Script")
newScript.Source = ""
newScript.Parent = ServerScriptService
playLocalSound("rbxassetid://0") -- Insert audio asset ID here
end
newScriptButton.Click:Connect(onNewScriptButtonClicked)
요약
속성
Class.SoundService 가 사용하는 환경 음향 사운드 프리셋.
3D Sound 볼륨 손실을 계산할 때 SoundService에 의해 고려되는 스터드 수입니다.
이 속성은 피처 변경 효과(Doppler 효과)에 따라 3D Sound 개체의 피치가 얼마나 변경되는지 결정합니다.
클라이언트에서 Sound 재생을 서버에 복제하는지 여부를 설정합니다.
3D Sound 볼륨이 얼마나 빠르게 축소되거나 '끄기'를 하는지 설정합니다.
메서드
GetListen 은 현재 SoundService 청취기 유형을 반환하고 청취기로 설정된 것을 반환합니다.
클라이언트가 이 함수를 호출할 때만 음향이 클라이언트에게만 감지됩니다. Sound
Class.SoundService 에 대한 리스너를 설정합니다.
속성
AmbientReverb
Class.SoundService 가 사용하는 환경 음향 사운드 프리셋.
이 속성은 Enum.ReverbType 이 속성이 사운드에 미치는 다양한 환경의 영향을 시뮬레이션합니다. 각 다른 옵션은 FMOD 사운드 엔진에서 사용할 수 있는 미리 설정과 일치합니다. 예를 들어, AmbientReverb를 Hangar로 설정하면 사운드가 다양하게 반응하여 대규모 ����
AmbientReverb 효과를 변경하면 Roblox의 음향 엔진에서 사용하는 다음 속성이 변경됩니다.
- 반응 쇠퇴 시간
- 초기 반사 지연 시간
- 초기 반사와 비슷한 지연 시간 대비 늦은 반응 지연 시간
- 고주파 참조
- 고주파수에서 중간 주파수 지속 시간 비율
- 반응기의 잔여 시간에 대한 반사 밀도를 제어하는 값
- 지연된 공진 폐기 시 모달 밀도를 제어하는 값
- 낮은 주파수 참조
- 낮은 주파수에서 상대적인 방 효과 수준
- 높은 주파수에서 상대적인 방 효과 수준
- 방 효과와 관련된 초기 반사 수준
- 중간 주파수에서 방의 효과 레벨
환경 리버브 프리셋을 더 알아보려는 사용자는 FMOD 문서를 참조하십시오. 그러나 대부분의 개발자는 Enum.ReverbType 이름이 복잡한 지식 없이도 이 설정을 사용할 수 있도록 충분히 설명적입니다.
코드 샘플
local Players = game:GetService("Players")
local CollectionService = game:GetService("CollectionService")
local SoundService = game:GetService("SoundService")
local localPlayer = Players.LocalPlayer
local reverbTags = {
["reverb_Cave"] = Enum.ReverbType.Cave,
}
-- collect parts and group them by tag
local parts = {}
for reverbTag, reverbType in pairs(reverbTags) do
for _, part in pairs(CollectionService:GetTagged(reverbTag)) do
parts[part] = reverbType
end
end
-- function to check if a position is within a part's extents
local function positionInPart(part, position)
local extents = part.Size / 2
local offset = part.CFrame:PointToObjectSpace(position)
return offset.x < extents.x and offset.y < extents.y and offset.z < extents.z
end
local reverbType = SoundService.AmbientReverb
while true do
task.wait()
if not localPlayer then
return
end
local character = localPlayer.Character
-- default to no reverb
local newReverbType = Enum.ReverbType.NoReverb
if character and character.PrimaryPart then
local position = character.PrimaryPart.Position
-- go through all the indexed parts
for part, type in pairs(parts) do
-- see if the character is within them
if positionInPart(part, position) then
-- if so, pick that reverb type
newReverbType = type
break
end
end
end
-- set the reverb type if it has changed
if newReverbType ~= reverbType then
SoundService.AmbientReverb = newReverbType
reverbType = newReverbType
end
end
DefaultListenerLocation
DistanceFactor
3D Sound 볼륨 손실을 계산할 때 SoundService에 의해 고려되는 스터드 수입니다.
기본적으로 DistanceFactor는 3.33입니다. 즉, 용량 조정의 목적으로 미터는 3.33 스터드로 간주됩니다. DistanceFactor가 높을수록 더 많은 음의 볼륨이 줄어듭니다.
local SoundService = game:GetService("SoundService")SoundService.DistanceFactor = 1 -- 1 meter = 1 studSoundService.DistanceFactor = 10 -- 1 meter = 10 studs
개발자는 게임에서 다른 크기를 사용하는 경우에만 이 속성을 변경해야 합니다. 예를 들어, 더 큰 사용자 캐릭터를 사용할 때 개발자는 거리 요소를 줄이려고 할 수 있습니다. 모든 다른 경우 Sound 설정 및 Sound.RollOffMode와 같은 대신 1>Class
Roblox의 3D 음향에 대해 자세히 알아보려는 경우 FMOD 문서를 참조하십시오.
DopplerScale
이 속성은 피처 변경 효과(Doppler 효과)에 따라 3D Sound 개체의 피치가 얼마나 변경되는지 결정합니다.
돌플러 효과는 음향 신호의 주파수가 원본과 관측자가 음향 신호에 더 가까이 이동하거나 멀리 이동할 때 변경되는 현상을 설명합니다. 돌플러 효과는 자동차의 사이렌이 지나가는 것과 같이 실제 생활에서 자주 볼 수 있습니다.
이 값을 증가하면 도플러 효과의 영향을 과장하지만, 줄이면 최소화됩니다. 기본적으로 이 속성의 값은 1입니다.
local SoundService = game:GetService("SoundService")SoundService.DopplerScale = 1 -- defaultSoundService.DopplerScale = 2 -- exaggerated Doppler effectSoundService.DopplerEffect = 0.5 -- subdued Doppler effect
Doppler 효과는 2D Sounds 에 영향을 주지 않습니다( Sounds 는 BasePart 또는 2>Class.Selection2> 에 부모되지 않음).
Roblox의 음향 엔진이 사용하는 다양한 설정에 대해 자세히 알아보려면 FMOD 문서를 참조하십시오.
RespectFilteringEnabled
RespectFilteringEnabled 속성은 클라이언트에서 Sound 재생이 서버로 복제되는지 여부를 결정하며, 따라서 서버에서 복제됩니다. 즉, LocalScript 가 1> Class.Sound:Play()
RolloffScale
3D Sound 볼륨이 얼마나 빠르게 축소되거나 '끄기'를 하는지 설정합니다.
참고, 이 속성은 Sounds의 속성이 Sound.RollOffMode 또는 Enum.RollOffMode로 설정된 경우에만 적용됩니다.
RolloffScale가 높을수록 청중과 음향 사이의 거리가 증가함에 따라 3D 음향의 볼륨이 더욱 빨리 감소합니다.
기본적으로 롤오프 스케일은 1로 설정되며 이는 현실 세계를 시뮬레이션합니다.
local SoundService = game:GetService("SoundService")SoundService.RolloffScale = 1 -- attenuation simulates real worldSoundService.RolloffScale = 2 -- sound attenuates twice as fast as the real world
Roblox의 음향 엔진이 사용하는 다양한 설정에 대해 자세히 알아보려면 FMOD 문서를 참조하십시오.
VolumetricAudio
메서드
GetListener
이 함수는 SoundService 현재 청취자 유형과 청취자로 설정된 내용을 반환합니다.
첫 번째 결과는 리스너의 Enum.ListenerType 이며, 두 번째 결과는 리스너 유형에 따라 다릅니다.
<tbody><tr><td><code>열거형. ListenerType.Camera</code></td><td>현재 카메라가 항상 사용되기 때문에 리스너 개체를 반환하지 않습니다. <code>Workspace/CurrentCamera</code></td></tr><tr><td><code>열거형.ListType.CFrame</code></td><td>Class.SoundService:Setlistener()에 사용된 데이터 타입 <code>Datatype.CFrame</code>을 반환합니다.</td></tr><tr><td><code>열거형.ListenType.ObjectPosition</code></td><td>Class.SoundService:Setlistener()에 사용된 클래스 베이스 파트를 반환합니다.</td></tr><tr><td><code>열거형 라이브러리 타입 개체 프레임</code></td><td>Class.SoundService:Setlistener()에 사용된 클래스 베이스 파트를 반환합니다.</td></tr></tbody>
리스너 유형 | 설명 |
---|
Class.SoundService:SetListener() 를 사용하여 수신기를 변경할 수 있습니다.
local SoundService = game:GetService("SoundService")SoundService:SetListener(Enum.ListenerType.CFrame, CFrame.new(0, 0, 0))local listenerType, listener = SoundService:GetListener()print(listenerType, listener)
리스너란 무엇입니까?
청취기는 플레이어가 게임에서 오디오를 듣는 지점을 결정합니다. 3D Sounds (음향 부모에 대한 기본 파트 또는 Attachment )의 청취기는 청취기의 볼륨을 조정하고 플레이어의 오디오 재생을 영향을
기본적으로 수신기는 현재 카메라로 설정됩니다. 하지만, 다양한 종류의 수신기를 사용할 수 있습니다.
반환
현재 Enum.ListenerType 및 청취자가 설정한 것. 청취자가 Enum.ListenerType 또는 nil인 경우 청취자는 일반 BasePart 또는 일반 2>Datatype.CFrame2>일 수 있습니다.
OpenAttenuationCurveEditor
매개 변수
반환
OpenDirectionalCurveEditor
매개 변수
반환
PlayLocalSound
이 기능은 플러그인 없이 모든 클라이언트에서 사용할 수 있습니다. Sound 로 로컬에서 사운드를 재생하려면 클라이언트가 이 함수를 호출할 때만 사운드를 들을 수 있습니다. 이 함수는 Studio 클라이언트의 모든 클라이언트에서 <
매개 변수
반환
코드 샘플
local ServerScriptService = game:GetService("ServerScriptService")
local SoundService = game:GetService("SoundService")
-- Create custom plugin button
local toolbar = plugin:CreateToolbar("Empty Script Adder")
local newScriptButton = toolbar:CreateButton("Add Script", "Create an empty Script", "rbxassetid://1507949215")
local function playLocalSound(soundId)
local sound = Instance.new("Sound")
sound.SoundId = soundId
SoundService:PlayLocalSound(sound)
sound.Ended:Wait()
sound:Destroy()
end
local function onNewScriptButtonClicked()
-- Create new empty script
local newScript = Instance.new("Script")
newScript.Source = ""
newScript.Parent = ServerScriptService
playLocalSound("rbxassetid://0") -- Insert audio asset ID here
end
newScriptButton.Click:Connect(onNewScriptButtonClicked)
SetListener
클라이언트가 사용하는 리스너를 설정합니다.
첫 번째 매개 변수는 청취기의 Enum.ListenerType 이며, 두 번째 매개 변수는 청취기 입력종속됩니다.
- 카메라 리스너 유형 - 항상 Workspace.CurrentCamera로 리스너 개체를 반환하지 않습니다.
- CFrame ListenerType - 사용할 CFrame
- ObjectPosition ListenerType - 사용할 BasePart
- ObjectCFrame ListenerType - 사용할 기본 부품
Class.SoundService:Getlistener()를 사용하여 리스너를 검색할 수 있습니다.
local SoundService = game:GetService("SoundService")SoundService:SetListener(Enum.ListenerType.CFrame, CFrame.new(0, 0, 0))local listenerType, listener = SoundService:GetListener()print(listenerType, listener)
리스너란 무엇입니까?
Class.SoundService 수신기는 플레이어가 게임에서 오디오를 어디에서 듣는지 결정합니다. 3D Sounds) (게임에 부모로 지정된 기본 부품 또는 Class.Attendance 에 연결된 오디오) 수신기는 볼륨 및 왼
기본적으로 수신기는 현재 카메라로 설정됩니다. 하지만, 다양한 종류의 수신기를 사용할 수 있습니다.
매개 변수
enum. listeners.type 의 경청기의 enum.listenerType입니다.
Class.BasePart 또는 BasePart 또는 CFrame 또는 1>Datatype.CFrame1> 또는 4>Camera4>용으로 7>ObjectPosition7> 에 대한 Enum.ListenerType0> 에 의존합니다.