ボイスチャットは、あなたと他のプレイヤーとの間でリアルタイムの音声コミュニケーションを可能にする機能です。この機能は、最大100人のプレイヤーをサポートする場所でのみ利用可能です。

ボイスチャットを有効にする
ボイスチャットは、最大100人のプレイヤーを持つすべての新しいゲームに対して、確認済みの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?
-- プレイヤーごとに1つのAudioDeviceInputが存在することを前提としています
-- 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を無効にします。
変更を保存するために場所を公開し、すべてのサーバーで変更が適用されるようにサーバーを再起動します。
ステータスを確認する
プレイヤーがボイスチャットを有効にしているかどうかは、IsVoiceEnabledForUserIdAsync()をLocalScript内で呼び出すか、RunContextがEnum.RunContext.Clientに設定されたScript内で呼び出すことで確認できます。
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