語音聊天 是一項功能,允許您與其他玩家進行實時的語音交流。它僅適用於支持最多 100 名玩家的地方。

啟用語音聊天
對於所有新遊戲,經過驗證的 13 歲以上用戶默認啟用語音聊天,並且最多支持 100 名玩家。啟用語音聊天是使用語音轉文本 API 的必要條件。
要為現有遊戲啟用語音或為新遊戲禁用語音:
- 在 Studio 中打開您的遊戲。
- 打開 文件 ⟩ 體驗設置。
- 在窗口左側導航到 通信 標籤。
- 切換 啟用語音聊天 到您想要的設置。
- 可選為了促進玩家之間的更好交流,切換 啟用相機 以允許符合條件的玩家根據他們的動作來動畫化他們的角色。
- 發布 該地方以保存更改。
設置最大玩家數
如果您之前將地方的最大玩家數設置為超過 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)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