语音聊天

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

语音聊天是一项功能,允许您与其他玩家进行实时的口头交流。它仅适用于支持最多100名玩家的场所。

两个用户在游戏中进行语音聊天。

启用语音聊天

对于所有经过验证的13岁及以上用户,语音聊天在所有最多100名玩家的新游戏中默认启用。要为现有游戏激活语音或为新游戏禁用语音:

  1. 在Studio中打开您的游戏。
  2. 打开文件 ⟩ 体验设置
  3. 在窗口左侧导航到通信选项卡。
  4. 切换启用语音聊天到您想要的设置。
  5. 可选
    为了在您的游戏中促进玩家之间的更好沟通,切换启用 摄像头以允许符合条件的玩家通过他们的移动来动画化他们的角色。
  6. 发布该场所以保存更改。

通过启用此设置,符合条件的13岁及以上用户可以在任何支持该功能的游戏中选择加入语音聊天。启用语音聊天是使用语音转文本API所必需的。

设置最大玩家数

如果您之前将场所的最大玩家数设置为超过100,则需要将其减少以支持语音聊天。

  1. 体验设置窗口的左侧导航中,选择场所。您游戏中的每个场所都会显示。
  2. 点击超过100名玩家的场所旁边的**⋯按钮,然后选择配置场所**。
  3. 最大玩家字段中,输入小于或等于100的任何数字。
  4. 点击保存按钮,然后发布以保存更改。

当您将场所的最大玩家数更新为少于100时,可能会有服务器已经配置为不同的、更高的数字。由于这些服务器不支持语音聊天,建议重启服务器

自定义语音行为

语音聊天默认是基于距离的,根据参与者之间的距离调整音量。然而,您可以将UseAudioApi设置为Enabled以控制游戏中语音的设置和使用方式。

如果VoiceChatService尚未出现:

  1. 资源管理器窗口中右键单击并从上下文菜单中选择显示 服务…

  2. 在弹出窗口中选择VoiceChatService并点击插入。该服务将出现在资源管理器层级中。

    资源管理器层级中的VoiceChatService
  3. 选择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)

非空间

根据您游戏的需求,听到其他人的声音可能更合理,无论他们的地理位置如何。如果您禁用默认语音聊天,则可以通过以下ScriptServerScriptService中实现非空间语音聊天:

非接近聊天
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)

按场所禁用

如果您不想为游戏中的每个场所启用语音聊天,可以在特定的本应符合语音条件的场所中禁用它。

要在游戏中的特定场所禁用语音聊天:

  1. 资源管理器窗口中右键单击并从上下文菜单中选择显示 服务…

  2. 在弹出窗口中选择VoiceChatService并点击插入。该服务将出现在资源管理器层级中。

    资源管理器层级中的VoiceChatService
  3. 选择VoiceChatService后,在属性窗口中禁用EnableDefaultVoice

  4. 发布该场所以保存更改,并重启服务器以确保更改在当前运行您游戏的所有服务器上生效。

检查状态

您可以通过在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
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。