การสนทนาด้วยเสียง เป็นฟีเจอร์ที่ช่วยให้การสื่อสารด้วยเสียงแบบเรียลไทม์ระหว่างคุณและผู้เล่นคนอื่น ๆ เป็นไปได้ ฟีเจอร์นี้มีให้บริการเฉพาะในสถานที่ที่รองรับผู้เล่นสูงสุด 100 คน

เปิดใช้งานการสนทนาด้วยเสียง
การสนทนาด้วยเสียงจะเปิดใช้งานโดยอัตโนมัติสำหรับผู้ใช้ที่ได้รับการตรวจสอบอายุ 13 ปีขึ้นไปในเกมใหม่ทั้งหมดที่มีผู้เล่นสูงสุด 100 คน การเปิดใช้งานการสนทนาด้วยเสียงเป็นสิ่งจำเป็นเพื่อใช้ API แปลงเสียงเป็นข้อความ
ในการเปิดใช้งานเสียงสำหรับเกมที่มีอยู่หรือปิดใช้งานสำหรับเกมใหม่:
- เปิดเกมของคุณใน Studio
- เปิด ไฟล์ ⟩ การตั้งค่าประสบการณ์
- ไปที่แท็บ การสื่อสาร ที่ด้านซ้ายของหน้าต่าง
- เปลี่ยน เปิดใช้งานการสนทนาด้วยเสียง เป็นการตั้งค่าที่คุณต้องการ
- ทางเลือกเพื่อการสื่อสารที่ดีกว่าระหว่างผู้เล่นภายในเกมของคุณ ให้เปิดใช้งาน เปิดใช้งานกล้อง เพื่อให้ผู้เล่นที่มีสิทธิ์สามารถเคลื่อนไหวอวตารของตนได้
- เผยแพร่ สถานที่เพื่อบันทึกการเปลี่ยนแปลง
ตั้งค่าผู้เล่นสูงสุด
หากคุณตั้งค่าจำนวนผู้เล่นสูงสุดในสถานที่มากกว่า 100 คุณจะต้องลดจำนวนลงเพื่อรองรับการสนทนาด้วยเสียง
- เลือกสถานที่ที่ต้องการและไปที่การเข้าถึงในคอลัมน์ด้านซ้าย
- สำหรับ จำนวนผู้เข้าชมสูงสุด ให้ป้อนหมายเลขที่น้อยกว่าหรือเท่ากับ 100
- คลิกที่ปุ่ม บันทึกการเปลี่ยนแปลง
เมื่อคุณอัปเดตจำนวนผู้เล่นสูงสุดในสถานที่ให้ต่ำกว่า 100 อาจมีเซิร์ฟเวอร์ที่กำหนดค่าไว้แล้วเป็นจำนวนที่สูงกว่า เนื่องจากเซิร์ฟเวอร์เหล่านั้นจะไม่รองรับการสนทนาด้วยเสียง จึงแนะนำให้ รีสตาร์ทเซิร์ฟเวอร์
ปรับแต่งพฤติกรรมเสียง
การสนทนาด้วยเสียงจะเป็น ตามระยะทาง โดยค่าเริ่มต้น ปรับระดับเสียงของผู้เข้าร่วมตามระยะห่างระหว่างกัน อย่างไรก็ตาม คุณสามารถตั้งค่า UseAudioApi เป็น Enabled เพื่อควบคุมวิธีการตั้งค่าและการใช้งานเสียงในเกมของคุณ
หาก VoiceChatService ไม่ปรากฏอยู่แล้ว:
คลิกขวาในหน้าต่าง Explorer และเลือก แสดง บริการ… จากเมนูบริบท
เลือก VoiceChatService ในหน้าต่างป๊อปอัปและคลิก แทรก บริการจะปรากฏในลำดับชั้น Explorer

เมื่อเลือก VoiceChatService ให้ตรวจสอบว่า UseAudioApi เป็น Enabled ในหน้าต่าง คุณสมบัติ ซึ่งอาจทำให้คุณเสร็จสิ้นแล้ว
ตามทีม
ในการดำเนินการสนทนาที่อิงตาม Team ซึ่งผู้เล่นในทีมเท่านั้นที่สามารถได้ยินกันและกัน คุณสามารถใช้ Script ต่อไปนี้ภายใน ServerScriptService:
local Teams = game:GetService("Teams")
local function findAudioInput(forPlayer : Player) : AudioDeviceInput?
-- สมมติว่ามี AudioDeviceInput เพียงหนึ่งตัวต่อผู้เล่น ซึ่งเป็นลูกของวัตถุ Player
-- สิ่งนี้จะถูกจัดเตรียมให้คุณหาก VoiceChatService.EnableDefaultVoice เป็นจริง
-- อาจต้องปรับปรุงเพื่อความทั่วไปหากสถานที่ของคุณวาง AudioDeviceInput ไว้ที่อื่น
return forPlayer:FindFirstChildWhichIsA("AudioDeviceInput")
end
local function onTeamChanged(player : Player)
local team = player.Team
if not team then return end
local device = findAudioInput(player)
if not device then return end
-- อนุญาตให้สมาชิกในทีมได้ยินกันเท่านั้น
device.AccessType = Enum.AccessModifierType.Allow
local allowed = {}
for _, player : Player in team:GetPlayers() do
table.insert(allowed, player.UserId)
end
device:SetUserIdAccessList(allowed)
end
local function onTeamAdded(team : Team)
team.PlayerAdded:Connect(onTeamChanged)
team.PlayerRemoved:Connect(onTeamChanged)
end
for _, team : Team in Teams:GetTeams() do
onTeamAdded(team)
end
Teams.ChildAdded:Connect(function(child : Instance)
if child:IsA("Team") then
onTeamAdded(child)
end
end)ไม่ตามพื้นที่
ขึ้นอยู่กับความต้องการของเกมของคุณ อาจทำให้การได้ยินเสียงของผู้อื่นด้วยระดับเสียงที่เท่ากันมีความหมายมากกว่า ไม่ว่าตำแหน่งทางภูมิศาสตร์ของพวกเขาจะเป็นอย่างไร หากคุณ ปิดใช้งานการสนทนาด้วยเสียงเริ่มต้น คุณสามารถดำเนินการสนทนาด้วยเสียงที่ไม่ตามพื้นที่ผ่าน Script ต่อไปนี้ภายใน ServerScriptService:
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local function wireUp(source : Instance, target : Instance)
local wire = Instance.new("Wire")
wire.SourceInstance = source
wire.TargetInstance = target
wire.Parent = source
end
-- ตั้งค่าตัวควบคุมระดับเสียงทั่วโลกสำหรับเสียงของทุกคน
local volumeSlider = Instance.new("AudioFader", Workspace)
local output = Instance.new("AudioDeviceOutput", Workspace)
wireUp(volumeSlider, output)
local function onPlayerAdded(player : Player)
local device = Instance.new("AudioDeviceInput", player)
device.Player = player
-- ส่งข้อมูลไมโครโฟนของผู้เล่นใหม่แต่ละคนไปยังตัวควบคุมระดับเสียงทั่วโลก
wireUp(device, volumeSlider)
end
for _, player in Players:GetPlayers() do
onPlayerAdded(player)
end
Players.PlayerAdded:Connect(onPlayerAdded)local Players = game:GetService("Players")
local player = Players.LocalPlayer
local function onDescendantAdded(descendant : Instance)
if descendant:IsA("Wire") then
descendant:Destroy()
end
end
for _, descendant in player:GetDescendants() do
onDescendantAdded(descendant)
end
player.DescendantAdded:Connect(onDescendantAdded)ปิดใช้งานต่อสถานที่
หากคุณไม่ต้องการเปิดใช้งานการสนทนาด้วยเสียงสำหรับทุกสถานที่ภายในเกมของคุณ คุณสามารถปิดใช้งานในสถานที่เฉพาะที่อาจมีสิทธิ์ในการสนทนาด้วยเสียง
ในการปิดใช้งานการสนทนาด้วยเสียงสำหรับสถานที่เฉพาะภายในเกม:
คลิกขวาในหน้าต่าง Explorer และเลือก แสดง บริการ… จากเมนูบริบท
เลือก VoiceChatService ในหน้าต่างป๊อปอัปและคลิก แทรก บริการจะปรากฏในลำดับชั้น Explorer

เมื่อเลือก VoiceChatService ให้ปิดใช้งาน EnableDefaultVoice ในหน้าต่าง คุณสมบัติ
เผยแพร่สถานที่เพื่อบันทึกการเปลี่ยนแปลงและ รีสตาร์ทเซิร์ฟเวอร์ เพื่อให้แน่ใจว่าการเปลี่ยนแปลงมีผลกับเซิร์ฟเวอร์ทั้งหมดที่กำลังรันเกมของคุณอยู่
ตรวจสอบสถานะ
คุณสามารถตรวจสอบว่าผู้เล่นเปิดใช้งานการสนทนาด้วยเสียงหรือไม่โดยการเรียกใช้ IsVoiceEnabledForUserIdAsync() ใน LocalScript หรือใน Script ที่มี RunContext ตั้งค่าเป็น Enum.RunContext.Client
local Players = game:GetService("Players")
local VoiceChatService = game:GetService("VoiceChatService")
local localPlayer = Players.LocalPlayer
local success, enabled = pcall(function()
return VoiceChatService:IsVoiceEnabledForUserIdAsync(localPlayer.UserId)
end)
if success and enabled then
print("การสนทนาด้วยเสียงเปิดใช้งานแล้ว!")
end