Tutoriais intermediários

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 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:

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.

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 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:

  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 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.
  3. 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:

  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 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.

  4. 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:

  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 ou impede que as pessoas falem
    end

    Este 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.

  3. 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.

©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.