Adicionar chat de voz

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Chat de voz é um recurso de chat baseado em proximidade que simula comunicação realista ajustando o volume dos jogadores que falam à medida que se aproximam ou se afastam uns dos outros no espaço 3D. Ao permitir que os jogadores conversem entre si com seus microfones, eles podem socializar e planejar juntos em tempo real ao redor do mundo para completar os objetivos do seu jogo.

Usando o arquivo .rbxl Gingerbread Island - Chat de Voz 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 companheiros 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 está habilitado ou desabilitado.

À medida que você revisa as seções a seguir junto com o exemplo, pode ajustar cada exemplo de código para atender melhor às suas próprias necessidades de 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 no seu jogo, sua configuração de chat de voz agora:

As seções a seguir detalham três configurações únicas de chat de voz usando essas configurações. À medida que você acompanha o arquivo de lugar de exemplo Gingerbread Island - Chat de Voz, pode habilitar o script correspondente desativado 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.

Scripts desativados na janela Explorer

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 um jogo. Integrar o chat em equipe em sua jogabilidade é útil quando você deseja que os jogadores colaborem e planejem juntos para resolver problemas no jogo, como coordenar informações sobre posições da equipe inimiga, recursos e atribuições.

Para recriar o chat de voz em equipe no arquivo de lugar de exemplo Gingerbread Island - Chat de Voz:

  1. Na janela Explorer, insira um Script em ServerScriptService.

  2. 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 = true
    redTeam.Name = "Red Team"
    local blueTeam = Instance.new("Team", Teams)
    blueTeam.TeamColor = BrickColor.new("Bright blue")
    blueTeam.AutoAssignable = true
    blueTeam.Name = "Blue Team"
    local function getUserIds(team : Team) : {number}
    local userIds = {}
    for _, player : Player in team:GetPlayers() do
    table.insert(userIds, player.UserId)
    end
    return userIds
    end
    local function getDevices(team : Team) : {AudioDeviceInput}
    local devices = {}
    for _, player : Player in team:GetPlayers() do
    local device : AudioDeviceInput = player:FindFirstChild("AudioDeviceInput")
    if not device then
    continue
    end
    table.insert(devices, device)
    end
    return devices
    end
    local function updateTeam(team : Team)
    local users = getUserIds(team)
    for _, device in getDevices(team) do
    device.AccessType = Enum.AccessModifierType.Allow
    device:SetUserIdAccessList(users)
    end
    end
    local function onDeviceAdded(device : AudioDeviceInput)
    local player : Player = device.Parent
    if player.Team then
    updateTeam(player.Team)
    end
    end
    local function onPlayerAdded(player : Player)
    local device = player:FindFirstChild("AudioDeviceInput")
    if device then
    onDeviceAdded(device)
    end
    player.ChildAdded:Connect(function(child)
    if child.Name == "AudioDeviceInput" then
    onDeviceAdded(child)
    end
    end)
    end
    updateTeam(blueTeam)
    updateTeam(redTeam)
    for _, player in Players:GetPlayers() do
    onPlayerAdded(player)
    end
    Players.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)

    O script começa obtendo os serviços Teams e Players para que possa usar sua funcionalidade pronta para uso para classificar jogadores em equipes assim que eles entram no jogo. Por exemplo, sem nenhum esforço adicional de script, o serviço Teams lida com ações como:

    • Classificar e equilibrar 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 este serviço, o script cria dois objetos Team distintos com diferentes valores de 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 a maior parte do trabalho ocorre para configurar a configuração de 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 de cada equipe sejam permitidos ouvir os microfones de seus companheiros 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 no jogo, 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 do jogo, o script se conecta aos eventos PlayerAdded e PlayerRemoved para atualizar as configurações de cada equipe.
  3. Teste o jogo com alguns amigos para verificar se os companheiros de equipe de cada equipe podem ouvir uns aos outros apenas através 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 um jogo enquanto pressionam e seguram um botão específico em seu dispositivo. Integrar o push to chat em 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 ao ruído ambiente.

Para recriar o chat de voz por push no arquivo de lugar de exemplo Gingerbread Island - Chat de Voz:

  1. Na janela Explorer, insira um Script em ReplicatedStorage.

  2. Na janela Properties, defina RunContext como Client para que o script controle apenas o microfone do jogador local.

  3. 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.V
    audioIn.Muted = true
    UserInputService.InputBegan:Connect(function(input: InputObject)
    if input.KeyCode == pushToTalkKey then
    audioIn.Muted = false
    end
    end)
    UserInputService.InputEnded:Connect(function(input: InputObject)
    if input.KeyCode == pushToTalkKey then
    audioIn.Muted = true
    end
    end)

    O script começa obtendo:

    • O serviço Players para que possa referenciar todos os jogadores dentro do jogo.
    • O serviço UserInputService para que possa verificar quando um jogador pressiona botões em seu dispositivo.
    • O objeto AudioDeviceInput do jogador local, ou 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 eles pressionam 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.

  4. Teste o jogo para verificar se os jogadores só podem ouvir uns aos outros através 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 de tempo definido. Integrar o chat baseado em tempo em sua jogabilidade é útil quando você deseja que os jogadores planejem cuidadosamente como se comunicam 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:

  1. Na janela Explorer, insira um Script em ServerScriptService.

  2. Renomeie o script para TimeBasedChat, e cole o seguinte código no script:

    local Players = game:GetService("Players")
    local muteAll = false
    local function toggleMuteAll()
    muteAll = not muteAll
    for _, player in Players:GetPlayers() do
    local device : AudioDeviceInput = player:FindFirstChild("AudioDeviceInput")
    if not device then
    continue
    end
    device.Muted = muteAll
    end
    end
    while true do
    task.wait(15) -- a cada 15 segundos
    toggleMuteAll() -- permite que as pessoas falem ou as impede de falar
    end

    Este script começa obtendo o serviço Players para que possa referenciar sua funcionalidade para gerenciar todos os jogadores no jogo. Em seguida, define uma flag muteAll como false, que a função toggleMuteAll a seguir usa para alternar o chat de voz ligado e desligado.

    Vamos revisar a função toggleMuteAll:

    • Ela começa percorrendo todos os jogadores no jogo usando Players.GetPlayers.
    • Para cada jogador, verifica se ele tem um objeto filho AudioDeviceInput, ou microfone físico em seu dispositivo.
    • Se tiver, a função define a propriedade Muted do objeto AudioDeviceInput para 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, aguardando 15 segundos para mutar e desmutar todos os objetos AudioDeviceInput.

  3. Teste o jogo para verificar se os jogadores só podem ouvir uns aos outros através do chat de voz em incrementos de 15 segundos.

©2026 Roblox Corporation, Roblox, o logotipo Roblox e Powering Imagination estão entre nossas marcas registradas e não registradas nos EUA e em outros países.