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

ボイスチャットの有効化
ボイスチャットは、最大100人のプレイヤーがいるすべての新しいゲームにおいて、電話番号確認済みの13歳以上のユーザーにデフォルトで有効になっています。既存のゲームでボイスを有効にするか、新しいゲームで無効にするには、次の手順を行います。
- スタジオでゲームを開きます。
- ファイル ⟩ エクスペリエンス設定を開きます。
- ウィンドウの左側のコミュニケーションタブに移動します。
- ボイスチャットを有効にするを希望の設定に切り替えます。
- オプショナルゲーム内のプレイヤー間のコミュニケーションを向上させるために、該当するプレイヤーが自分の動きでアバターをアニメーション化できるように、カメラを有効にするをオンにします。
- 変更を保存するために場所を公開します。
この設定を有効にすると、該当する13歳以上のユーザーはあなたのボイスチャットを選択できます。ボイスチャットを有効にすることはスピーチ-to-テキスト APIを使用するために必要です。
最大プレイヤー数を設定する
既にプレースの最大プレイヤー数を100以上に設定している場合、ボイスチャットをサポートするためにそれを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があることを想定しています。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()を呼び出すか、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