一種服務,負責決定遊戲中 Sounds 的播放方式。SoundService 也常常用於儲存 SoundGroups,雖然這不是必須由 SoundGroups 來運行的。
SoundService 可以做什麼?
SoundService 屬性,例如 SoundService.AmbientReverb、SoundService.DistanceFactor、SoundService.DopplerScale 和 1> Class.SoundService.RolloffScale1> 可以用來變更遊戲中所有 4> Class.Sound|Sounds
Class.SoundService:SetListener() 功能可讓開發人員設置聲音從哪裡聽到的位置。
SoundService:PlayLocalSound() 可以用來在任何地方播放音效。
想要了解更多關於音效如何在 Roblox 中運作的資訊,請查閱 FMOD 音效引擎 的文档。
範例程式碼
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)
概要
屬性
方法
GetListener 返回目前的 SoundService 聆聽器類型和已設為聆聽器。
在本地播放 Sound,意味著音效只會對客戶端聽取,無論它是否屬於某個子程式。
設定聽取器為 SoundService。
屬性
AmbientReverb
Class.SoundService 使用的環境音效預設設定。
枚數.ReverbType 這個屬性模擬各種環境對音效的影響。 每個不同的選項都對應於 FMOD 音效引擎中可用的預設。 例如,當 AmbientReverb 設為 Hangar 時,音效會以不同的方式重複,以模擬在大型密閉空間中。
改變大環效果會改變 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
Class.SoundService 當計算 3D Sound 音量減少時,考慮的釋放單位數。
預設值為 3.33,這表示,對音量的減少目的來說,一英尺的長度將被視為 3.33 個單位。距離因素越大,減少的速度就越快。
local SoundService = game:GetService("SoundService")SoundService.DistanceFactor = 1 -- 1 meter = 1 studSoundService.DistanceFactor = 10 -- 1 meter = 10 studs
開發人員建議只要變更此屬性,如果他們的遊戲使用不同的比例。例如,使用大型自訂角色時,開發人員可能想減少 Sound。在所有其他情況下,Sound.RollOffMode 設定,例如 Class.Sound.RollOffMode ,應該使用。
想要了解 Roblox 中 3D 音效如何運作的人,應該閱讀 FMOD 文件。
DopplerScale
此屬性決定 3D Sound 對物件的音高由 Doppler 效果所造成的程度。
Doppler 效果是一種現象,當音速的來源和觀察者移動得越來越遠或者越來越近時,音速的高低會改變。這種 Doppler 效果通常在現實生活中看到,例如當汽車鳴響過去時。
提升這個值會增強 Doppler 效果的影響,而減少它會使它變得更小。預設值為此屬性的預設值為 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 或 1> Class.Attachment1> 。
開發人員想了解更多關於 Roblox 音效引擎使用的不同設置的文件 FMOD 文件。
RespectFilteringEnabled
RespectFilteringEnabled 屬性決定Sound 播放是否從客戶端複製到伺服器,並且從伺服器複製到伺服器。在其他 words,當LocalScript 呼叫1> Class.Sound:Play()1> 並且此
RolloffScale
設定 3D Sound 音量減速速度或「滾動關閉」。
注意,此屬性只適用於 Sounds 的屬性,其 Sound.RollOffMode 已設為 'Inverse' 或 'InverseTapered'。 'Linear
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,第二個結果取決於聽取器的 ListenerType:
<tbody><tr><td><code>枚列聽取器類型Camera</code></td><td>不會將聆聽對象作為 <code>工作區/目前攝影機</code> 使用</td></tr><tr><td><code>enum. listenersType.CFrame</code></td><td>返回 <code>Datatype.CFrame</code> 用於 <code>Class.SoundService:SetListener()</code></td></tr><tr><td><code>枚列聽取器類型對象位置</code></td><td>返回 <code>Class.BasePart</code> 用於 <code>Class.SoundService:SetListener()</code></td></tr><tr><td><code>enum. listenersType.object框架</code></td><td>返回 <code>Class.BasePart</code> 用於 <code>Class.SoundService:SetListener()</code></td></tr></tbody>
聆聽器類型 | 說明 |
---|
聆聽器可以使用 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 關聯) 的聽取器會影響音樂的音量和左/右平衡。聽取器對 2D 音效的播放沒有影響,因為它們沒有播放位置。
預設音效處理器設為 CurrentCamera ,但也可以使用不同類型的音效處理器。
返回
目前的 Enum.ListenerType 和聽取器設定。依據 Enum.ListenerType 聽取器可以是一個 BasePart ,或零。
OpenAttenuationCurveEditor
參數
返回
OpenDirectionalCurveEditor
參數
返回
PlayLocalSound
在本地播放 Sound,這意味著音效只會在客戶端呼叫此功能,無論它是否屬於任何子類。此功能對於在 Studio 客戶端播放本地 Sound 最常用,例如在 Script 中。
參數
返回
範例程式碼
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,第二個參數是依據聆聽器輸入。
- Camera ListenerType - 不會將聽取器對象作為 Workspace.CurrentCamera 使用
- CFrame ListenerType - 使用 CFrame 的 聆聽器類型
- ObjectPosition 列聽器類型 - BasePart 以使用
- ObjectCFrame 列聽器類型 - 基地零件
聆聽器可以使用 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 (與基地零件或 Attachment 關聯) 的聆聽器會影響音量的左/右平衡。聆聽器對 2D 音效的
預設音效處理器設為 CurrentCamera ,但也可以使用不同類型的音效處理器。
參數
enum. listeners.type 的聆聽器。
依賴 Enum.ListenerType 對於 BasePart 或 CFrame 的 1>Datatype.CFrame1> 對於 4>CFrame4> ,零對於 7>Camera7>。