語音聊天是一項可以使您與其他玩家進行實時口頭交流的功能。此功能僅適用於最多支持100名玩家的地方。

啟用語音聊天
對於所有最多可容納100名玩家的新遊戲,已通過驗證的13歲以上用戶默認啟用語音聊天。要為現有遊戲啟用語音或禁用新遊戲的語音:
- 在Studio中打開您的遊戲。
- 打開檔案 ⟩ 體驗設置。
- 在窗口左側導航至通訊標籤。
- 切換啟用語音聊天到您想要的設置。
- 可選為了增強遊戲中玩家之間的通訊,切換開啟啟用 相機,允許符合條件的玩家根據自己的動作對其角色進行動畫表現。
- 發佈該地點以保存更改。
通過啟用此設置,符合條件的13歲以上用戶可以在您的遊戲中選擇進入語音聊天。啟用語音聊天是使用語音轉文本API的前提。
設置最大玩家數
如果您之前將某個地方的最大玩家數設置為超過100,則需要將其減少以支持語音聊天。
- 在體驗設置窗口的左側導航中,選擇地方。每個地方會在您的遊戲中顯示。
- 點擊最大玩家數超過100的地方旁的**⋯按鈕,然後選擇配置地方**。
- 在最大玩家數字段中,輸入小於或等於100的任何數字。
- 點擊保存按鈕,然後發佈以保存更改。
當您將某個地方的最大玩家數更新為少於100時,可能會有已配置為不同較高數字的伺服器。由於那些伺服器不支持語音聊天,因此建議重啟伺服器。
自訂語音行為
語音聊天默認情況下是基於距離的,根據參加者之間的距離調整音量。但是,您可以將UseAudioApi設置為Enabled,以控制遊戲中的語音設置和使用方式。
如果VoiceChatService尚未出現:
在資源管理器窗口中右鍵單擊,從上下文菜單中選擇顯示 服務…。
在彈出窗口中選擇VoiceChatService,然後點擊插入。該服務會出現在資源管理器層次中。

選擇VoiceChatService,確保UseAudioApi設置為Enabled在屬性窗口中。這可能已經為您完成。
基於團隊
要實現僅讓隊友能夠相互聽到的Team基礎聊天,可以在ServerScriptService中使用以下Script:
團隊聊天
local Teams = game:GetService("Teams")
local function findAudioInput(forPlayer : Player) : AudioDeviceInput?
-- 假設每位玩家只有一個AudioDeviceInput,屬於Player對象
-- 如果VoiceChatService.EnableDefaultVoice為true,則會為您提供
-- 如果您的地方將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)
LocalScript
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)
每地點禁用
如果您不想對遊戲中的每個地方啟用語音聊天,則可以在特定地方禁用語音聊天,這些地方本來會合格。
要在遊戲中的特定地方禁用語音聊天:
在資源管理器窗口中右鍵單擊,從上下文菜單中選擇顯示 服務…。
在彈出窗口中選擇VoiceChatService,然後點擊插入。該服務會出現在資源管理器層次中。

選擇VoiceChatService,在屬性窗口中禁用EnableDefaultVoice。
發佈該地點以保存更改,並重啟伺服器,以確保該更改對當前運行您遊戲的所有伺服器生效。
檢查狀態
您可以通過在LocalScript中調用IsVoiceEnabledForUserIdAsync()來檢查玩家是否啟用了語音聊天,或者在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