Chat de voz é um recurso de chat baseado em proximidade que simula comunicação realista ao ajustar o volume dos jogadores que falam conforme se aproximam ou se afastam uns dos outros no espaço 3D. Ao permitir que os jogadores conversem entre si com seus microfones, eles conseguem socializar e elaborar estratégias juntos em tempo real ao redor do mundo para completar os objetivos da sua experiência.
Usando o arquivo Gingerbread Island - Chat de Voz .rbxl como referência, este tutorial mostra como incorporar diferentes formas de chat de voz em sua jogabilidade, incluindo orientações sobre:
- Classificar jogadores em equipes que podem usar chat de voz apenas com seus colegas de equipe.
- Permitir que os jogadores ativem temporariamente seu microfone enquanto pressionam um botão específico em seu dispositivo.
- Configurar períodos de tempo em que o chat de voz é ativado ou desativado.
À medida que você revisa as seções a seguir junto com o exemplo, pode ajustar cada amostra de código para atender melhor às necessidades do seu próprio chat de voz.
Configurar configurações
Para que o chat em equipe, o push to chat ou o chat baseado em tempo funcionem adequadamente, você deve configurar sua configuração de chat de voz para habilitar o chat de voz e criar os objetos de áudio apropriados necessários para captar e emitir áudio dentro do ambiente 3D.
Quando os jogadores entram em sua experiência, sua configuração de chat de voz agora:
- Permite que jogadores elegíveis para voz usem seus microfones.
- Cria e coloca um objeto AudioDeviceInput sob cada objeto Player elegível para voz.
- Cria e coloca um objeto AudioEmitter sob cada Player.Character elegível para voz.
- Cria e coloca um AudioListener sob o Workspace.CurrentCamera.
As seções a seguir detalham três configurações exclusivas de chat de voz usando essas configurações. Ao seguir junto com o arquivo de lugar de exemplo Gingerbread Island - Chat de Voz, você pode habilitar o script desativado correspondente na janela Explorer para testar seu comportamento. Para garantir que cada um funcione corretamente, certifique-se de desativar o script novamente antes de passar para a próxima configuração.

Adicionar chat em equipe
Chat em equipe é uma configuração de chat de voz na qual apenas jogadores da mesma equipe podem falar ou ouvir uns aos outros em uma experiência. Integrar o chat em equipe à sua jogabilidade é útil quando você deseja que os jogadores colaborem e elaborem estratégias juntos para resolver problemas nas experiências, como coordenar informações sobre posições da equipe adversária, recursos e atribuições.
Para recriar o chat de voz em equipe no arquivo de lugar de exemplo Gingerbread Island - Chat de Voz:
Na janela Explorer, insira um Script em ServerScriptService.
Renomeie o script para TeamChat, e cole o seguinte código no script:
local Teams = game:GetService("Teams")local Players = game:GetService("Players")local redTeam = Instance.new("Team", Teams)redTeam.TeamColor = BrickColor.new("Bright red")redTeam.AutoAssignable = trueredTeam.Name = "Red Team"local blueTeam = Instance.new("Team", Teams)blueTeam.TeamColor = BrickColor.new("Bright blue")blueTeam.AutoAssignable = trueblueTeam.Name = "Blue Team"local function getUserIds(team : Team) : {number}local userIds = {}for _, player : Player in team:GetPlayers() dotable.insert(userIds, player.UserId)endreturn userIdsendlocal function getDevices(team : Team) : {AudioDeviceInput}local devices = {}for _, player : Player in team:GetPlayers() dolocal device : AudioDeviceInput = player:FindFirstChild("AudioDeviceInput")if not device thencontinueendtable.insert(devices, device)endreturn devicesendlocal function updateTeam(team : Team)local users = getUserIds(team)for _, device in getDevices(team) dodevice.AccessType = Enum.AccessModifierType.Allowdevice:SetUserIdAccessList(users)endendlocal function onDeviceAdded(device : AudioDeviceInput)local player : Player = device.Parentif player.Team thenupdateTeam(player.Team)endendlocal function onPlayerAdded(player : Player)local device = player:FindFirstChild("AudioDeviceInput")if device thenonDeviceAdded(device)endplayer.ChildAdded:Connect(function(child)if child.Name == "AudioDeviceInput" thenonDeviceAdded(child)endend)endupdateTeam(blueTeam)updateTeam(redTeam)for _, player in Players:GetPlayers() doonPlayerAdded(player)endPlayers.PlayerAdded:Connect(onPlayerAdded)blueTeam.PlayerAdded:Connect(function() updateTeam(blueTeam) end)blueTeam.PlayerRemoved:Connect(function() updateTeam(blueTeam) end)redTeam.PlayerAdded:Connect(function() updateTeam(redTeam) end)redTeam.PlayerRemoved:Connect(function() updateTeam(redTeam) end)Explicação do códigoO script começa obtendo os serviços Teams e Players para que possa usar sua funcionalidade integrada para classificar jogadores em equipes assim que eles entrarem na experiência. Por exemplo, sem esforço adicional de script, o serviço Teams lida com ações como:
- Classificar e equilibrar os jogadores uniformemente em cada equipe.
- Agrupar jogadores sob sua equipe no placar.
- Tingir os nomes dos jogadores no espaço 3D com a cor correspondente à sua equipe.
Usando esse serviço, o script cria dois objetos Team distintos com diferentes valores nas propriedades Color para representar cada equipe: vermelho brilhante para uma equipe e azul brilhante para a outra.
O script então define três funções onde ocorre a maior parte do trabalho para configurar a configuração do chat de voz em equipe:
- getUserIds - Retorna um array de userIDs para todos os jogadores em uma equipe.
- getDevices - Retorna um array de objetos AudioDeviceInput para todos os jogadores em uma equipe. Cada objeto AudioDeviceInput representa o microfone físico de um jogador no mundo real.
- updateTeam - Recupera todos os userIDs de getUserIds, itera sobre os objetos AudioDeviceInput de getDevices, define sua propriedade Enum.AccessModifierType como Allow para que apenas os userIDs em cada equipe possam ouvir os microfones de seus colegas de equipe, e então atualiza a SetUserIdAccessList com os userIDs da equipe.
O restante do script controla como essas funções e ouvintes de eventos trabalham juntas:
- Quando um novo jogador entra na experiência, o script verifica se o jogador tem um microfone e atualiza sua equipe.
- Quando o script detecta um novo objeto AudioDeviceInput, ele chama updateTeam para sua respectiva equipe vermelha ou azul.
- À medida que os jogadores entram ou saem da experiência, o script se conecta aos eventos PlayerAdded e PlayerRemoved para atualizar as configurações de cada equipe.
Teste a experiência com alguns amigos para verificar se os colegas de equipe de cada equipe podem ouvir uns aos outros apenas por meio do chat de voz.
Adicionar push to chat
Push to chat é uma configuração de chat de voz na qual os jogadores só podem ativar seu microfone dentro de uma experiência enquanto pressionam e seguram um botão específico em seu dispositivo. Integrar o push to chat à sua jogabilidade é útil quando você deseja que os jogadores tenham mais privacidade e controle sobre quando querem ser ouvidos em relação a outros jogadores e a ruído ambiente.
Para recriar o chat por push to voice no arquivo de lugar de exemplo Gingerbread Island - Chat de Voz:
Na janela Explorer, insira um Script em ReplicatedStorage.
Na janela Properties, defina RunContext como Client para que o script controle apenas o microfone do jogador local.
Renomeie o script para PushToChat, e cole o seguinte código no script:
local Players = game:GetService("Players")local UserInputService = game:GetService("UserInputService")local audioIn: AudioDeviceInput = Players.LocalPlayer:WaitForChild("AudioDeviceInput")local pushToTalkKey = Enum.KeyCode.VaudioIn.Muted = trueUserInputService.InputBegan:Connect(function(input: InputObject)if input.KeyCode == pushToTalkKey thenaudioIn.Muted = falseendend)UserInputService.InputEnded:Connect(function(input: InputObject)if input.KeyCode == pushToTalkKey thenaudioIn.Muted = trueendend)Explicação do códigoO script começa obtendo:
- O serviço Players para que possa referenciar todos os jogadores dentro da experiência.
- O serviço UserInputService para que possa verificar quando um jogador pressiona botões em seu dispositivo.
- O objeto AudioDeviceInput do jogador local, ou o microfone físico em seu dispositivo.
O script então:
- Define a tecla V como o botão que o jogador precisa pressionar e segurar para falar em seu microfone.
- Muta o microfone do jogador.
O restante do script configura dois ouvintes de eventos para InputBegan e InputEnded do UserInputService. Quando o jogador pressiona a tecla V, o evento InputBegan desmuta o microfone do jogador, e quando eles soltam a tecla V, o evento InputEnded muta novamente seu microfone.
Teste a experiência para verificar se os jogadores só podem ouvir uns aos outros por meio do chat de voz quando estão pressionando a tecla V.
Adicionar chat baseado em tempo
Chat baseado em tempo é uma configuração de chat de voz na qual os jogadores só podem falar e ouvir uns aos outros durante um período definido. Integrar o chat baseado em tempo à sua jogabilidade é útil quando você deseja que os jogadores planejem com cuidado como se comunicam entre si durante fases específicas, como durante discussões baseadas em rodadas ou após cenas cortadas.
Para recriar o chat de voz baseado em tempo no arquivo de lugar de exemplo Gingerbread Island - Chat de Voz:
Na janela Explorer, insira um Script em ServerScriptService.
Renomeie o script para TimeBasedChat, e cole o seguinte código no script:
local Players = game:GetService("Players")local muteAll = falselocal function toggleMuteAll()muteAll = not muteAllfor _, player in Players:GetPlayers() dolocal device : AudioDeviceInput = player:FindFirstChild("AudioDeviceInput")if not device thencontinueenddevice.Muted = muteAllendendwhile true dotask.wait(15) -- a cada 15 segundostoggleMuteAll() -- permite ou impede que as pessoas falemendExplicação do códigoEste script começa obtendo o serviço Players para que possa referenciar sua funcionalidade para gerenciar todos os jogadores na experiência. Em seguida, ele define uma flag muteAll como false, que a função toggleMuteAll usa para alternar o chat de voz ativado e desativado.
Vamos revisar a função toggleMuteAll:
- Ela começa iterando por todos os jogadores na experiência usando Players.GetPlayers.
- Para cada jogador, verifica se ele possui um objeto filho AudioDeviceInput, ou microfone físico em seu dispositivo.
- Se tiver, a função define a propriedade Muted do objeto AudioDeviceInput como o valor de muteAll. Por exemplo, se muteAll for true, o microfone do jogador é desativado, e se muteAll for false, o microfone do jogador é ativado.
O script então entra em um loop infinito, esperando 15 segundos para mutar e desmutar todos os objetos AudioDeviceInput.
Teste a experiência para verificar se os jogadores só podem ouvir uns aos outros através do chat de voz em incrementos de 15 segundos.