SoundService
*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่
บริการที่กำหนดต่างๆ ของวิธีการที่ Sounds เล่นในเกม บริการนี้ยังมักใช้เพื่อเก็บ SoundGroups แม้ว่าจะไม่ได้เป็นสิ่งที่จำเป็นสำหรับ Class.SoundGroup|SoundGroups
SoundService สามารถทำอะไรได้บ้าง?
คุณสมบัติ SoundService เช่น SoundService.AmbientReverb , SoundService.DistanceFactor , SoundService.DopplerScale และ 1> Class.SoundService.RolloffScale1> สามารถใช้เพื่อเปลี่ยนว
คุณสมบัติ 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)
สรุป
คุณสมบัติ
สภาพแวดล้อมเสียงสภาพแวดล้อมที่ใช้โดย SoundService
จำนวนช่องเป็นตัวชี้วัดที่จะได้รับการพิจารณาโดย SoundService เมื่อคำนวณ 3D Sound ระดับการลดลง
สมบัตินี้กำหนดว่าจะปรับแก้ความสูงของวัตถุ 3D Sound ตามผลกระทบของ Doppler
ตั้งค่าว่าจะเล่นเสียงจากลูกค้า Sound จากเซิร์ฟเวอร์หรือไม่
ตั้งค่าความเร็วที่เสียไปของเสียง 3D Sound หรือ 'ปิด'
วิธีการ
GetListen รับคืนประเภทผู้ฟังปัจจุบันของ SoundService และสิ่งที่กำหนดเป็นผู้ฟัง
เล่นเสียง Sound ในพื้นที่จัดเก็บข้อมูลท้องถิ่น หมายถึงเสียงเฉพาะกับลูกค้าที่โทรหาคุณสมบัตินี้ ไม่ว่ามันจะอยู่ในระดับโครงสร้างหรือไม่
ตั้งผู้ฟังสำหรับ SoundService
คุณสมบัติ
AmbientReverb
สภาพแวดล้อมเสียงสภาพแวดล้อมที่ใช้โดย SoundService
Enum.ReverbType สมบัตินี้จะจำลองผลกระทบของสภาพแวดล้อมต่างๆ ต่อเสียง แต่ละตัวเลือกที่แตกต่างกันจะตรงกับลักษณะล่วงหน้าที่มีอยู่ในเครื่องเสียง FMOD
การเปลี่ยนแปลงเอฟเฟกต์ AmbientReverb จะเปลี่ยนแปลงสิ่งต่อไปนี้ที่ใช้โดยเครื่องเสียงของ Roblox
- เวลาการลดลงของการระเบิด
- เวลาการสะท้อนแสงเริ่มต้น
- เวลาลดลงเรื่อย ๆ เมื่อเทียบกับเวลาเริ่มต้น
- อ้างอิงความถี่สูง
- อัตราการลดลงของความถี่สูงถึงความถี่ปานกลาง
- มูลค่าที่ควบคุมความหนาแน่นของเสียงในการลดลงของเสียงในภายหลัง
- มูลค่าที่ควบคุมความหนาแน่นของโมดัลในการลดลงของ Reverb
- อ้างอิงความถี่ต่ำ
- ระดับเอฟเฟกต์ห้องที่เกี่ยวข้องที่ต่ำในความถี่ต่ำ
- ระดับเอฟเฟกต์ห้องที่เกี่ยวข้องในความถี่สูง
- ระดับการสะท้อนแสงเริ่มต้นเมื่อเปรียบเทียบกับผลลัพธ์ห้อง
- ระดับเอฟเฟกต์ห้องในความถี่กลาง
ผู้ที่สนใจต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่าเสียงรีเบิร์ทรอบแห่งสภาพแวดล้อมควรดูที่ เอกสาร 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
DefaultListenerLocation
DistanceFactor
จำนวนช่องเป็นตัวชี้วัดที่จะได้รับการพิจารณาโดย SoundService เมื่อคำนวณ 3D Sound ระดับการลดลง
โดยปกติ DistanceFactor คือ 3.33 หมายถึง, สำหรับวัตถุประสงค์ของการปรับปรุงความดัง, เมตรจะถูกพิจารณาว่า 3.33 สตุด ยิ่ง DistanceFactor มากเท่าไหร่, เสียงจะยิ่งปรับปรุง
local SoundService = game:GetService("SoundService")SoundService.DistanceFactor = 1 -- 1 meter = 1 studSoundService.DistanceFactor = 10 -- 1 meter = 10 studs
ผู้พัฒนาจะได้รับคำแนะนำให้เปลี่ยนแป้นนี้เฉพาะในกรณีที่เกมของพวกเขาใช้เครื่องชี้วัดที่แตกต่างกัน เช่นเมื่อใช้ตัวละครใหญ่ขึ้น ผู้พัฒนาอาจต้องการลด DistanceFactor
ผู้ที่ต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของเสียง 3D ใน Roblox ควรอ่าน คู่มือ 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.Configuration1> )
ผู้พัฒนาที่ต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเครื่องมือเสียงที่ใช้งานต่างๆ ของ Roblox ควรอ่าน คู่มือ FMOD
RespectFilteringEnabled
สมบัติทรัพย์ การเคารพการกรองเปิดใช้งาน ระบุว่า Sound การเล่นจะถูกเล่นจากลูกค้าไปยังเซิร์ฟเวอร์
RolloffScale
ตั้งค่าความเร็วที่เสียไปของเสียง 3D Sound หรือ 'ปิด'
หมายเหตุ, สมบัตินี้ใช้ได้กับ Sounds ที่มีสมบัติ Sound.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 ของผู้ฟัง ผลลัพธ์ที่สองขึ้นอยู่กับ ListenerType:
<tbody><tr><td><code>Enum.ListenType.Camera</code></td><td>ไม่ส่งตัวเองผู้ใช้เป็น <code>Workspace/CurrentCamera</code> เสมอ</td></tr><tr><td><code>Enum.ListenType.CFrame</code></td><td>กลับ <code>โครงสร้างข้อมูล.CFrame</code> ที่ใช้ใน <code>Class.SoundService:Setlistener()</code></td></tr><tr><td><code>Enum.ListenType.ObjectPosition</code></td><td>กลับ <code>Class.BasePart</code> ที่ใช้ใน <code>Class.SoundService:Setlistener()</code></td></tr><tr><td><code>Enum.ListenType.ObjectCFrame</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 (เสียงที่เกี่ยวข้องกับ BasePart หรือ Attachment ) ผู้ฟังจะ
โดยปกติผู้ฟังจะติดตั้งไว้ที่ Camera ปัจจุบัน อย่างไรก็ตาม สามารถใช้ระยะได้หลากหลายของผู้ฟัง
ส่งค่ากลับ
ปัจจุบัน Enum.ListenerType และสิ่งที่ผู้ฟังได้รับการตั้งค่า ขึ้นอยู่กับ Enum.ListenerType ผู้ฟังอาจเป็น BasePart หรือ nil
OpenAttenuationCurveEditor
พารามิเตอร์
ส่งค่ากลับ
OpenDirectionalCurveEditor
พารามิเตอร์
ส่งค่ากลับ
PlayLocalSound
เล่นเสียง Sound ในพื้นที่จัดเก็บข้อมูลท้องถิ่น หมายถึงเสียงเฉพาะกับลูกค้าที่โทรหาคุณ ไม่ว่ามันจะอยู่ในพื้นที่ใด ฟังได้เหมาะ
พารามิเตอร์
Class.Sound ที่จะเล่น
ส่งค่ากลับ
ตัวอย่างโค้ด
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 - The CFrame ที่จะใช้
- ObjectPosition ListenerType - BasePart ที่จะใช้
- ObjectCFrame ListenerType - ส่วนประกอบพื้นฐานที่จะใช้
ผู้ฟังสามารถดึงได้โดยใช้ 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 (เสียงที่เกี่ยวข้องกับ BasePart หรือ Class.Attach
โดยปกติผู้ฟังจะติดตั้งไว้ที่ Camera ปัจจุบัน อย่างไรก็ตาม สามารถใช้ระยะได้หลากหลายของผู้ฟัง
พารามิเตอร์
Menu.ListenType ของผู้ฟัง
ขึ้นอยู่กับ Enum.ListenerType สำหรับ 'ObjectPosition' หรือ 'ObjectCFrame' Datatype.CFrame สำหรับ 'CFrame' หรือ nil สำหรับ 'Camera'