Tutoriales intermedios

Agregar chat de voz

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

El chat de voz es una característica de chat basada en proximidad que simula una comunicación realista al ajustar el volumen de los jugadores que hablan a medida que se acercan o alejan unos de otros en el espacio 3D. Al permitir que los jugadores hablen entre sí con sus micrófonos, pueden socializar y crear estrategias juntos en tiempo real a lo largo del globe para completar los objetivos de tu experiencia.

Usando el archivo de referencia Gingerbread Island - Voice Chat .rbxl, este tutorial te muestra cómo incorporar diferentes formas de chat de voz en tu juego, incluyendo orientación sobre:

  • Clasificar a los jugadores en equipos que solo pueden usar el chat de voz con sus compañeros de equipo.
  • Permitir que los jugadores activen temporalmente su micrófono mientras presionan un botón específico en su dispositivo.
  • Configurar períodos de tiempo donde el chat de voz esté habilitado o deshabilitado.

A medida que revisas las siguientes secciones junto con el ejemplo, puedes ajustar cada muestra de código para satisfacer mejor las necesidades de tus propios requisitos de chat de voz.

Configura los ajustes

Para que el chat de equipo, el chat por pulsación o el chat basado en tiempo funcionen correctamente, debes configurar tu configuración de chat de voz para habilitar el chat de voz y crear los objetos de audio apropiados necesarios para captar y emitir audio dentro del entorno 3D.

Cuando los jugadores se unan a tu experiencia, tu configuración de chat de voz ahora:

Las siguientes secciones detallan tres configuraciones únicas de chat de voz utilizando estos ajustes. A medida que sigues el archivo de lugar de muestra Gingerbread Island - Voice Chat, puedes habilitar el script deshabilitado correspondiente en la ventana Explorer para probar su comportamiento. Para asegurarte de que cada uno funcione correctamente, asegúrate de deshabilitar el script nuevamente antes de pasar a la siguiente configuración.

Scripts deshabilitados en la ventana Explorer

Agregar chat de equipo

El chat de equipo es una configuración de chat de voz en la que solo los jugadores en el mismo equipo pueden hablar o escucharse entre ellos en una experiencia. Integrar el chat de equipo en tu juego es útil cuando deseas que los jugadores colaboren y creen estrategias para resolver problemas en las experiencias, como coordinar información sobre posiciones de equipos enemigos, recursos y asignaciones.

Para recrear el chat de voz de equipo en el archivo de lugar de muestra Gingerbread Island - Voice Chat:

  1. En la ventana Explorer, inserta un Script en ServerScriptService.

  2. Renombra el script como TeamChat, y luego pega el siguiente código en el 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 = "Equipo Rojo"
    local blueTeam = Instance.new("Team", Teams)
    blueTeam.TeamColor = BrickColor.new("Bright blue")
    blueTeam.AutoAssignable = true
    blueTeam.Name = "Equipo Azul"
    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)

    El script comienza obteniendo los servicios Teams y Players para que pueda utilizar su funcionalidad estándar para clasificar a los jugadores en equipos tan pronto como se unan a la experiencia. Por ejemplo, sin ningún esfuerzo adicional de scripting, el servicio Teams maneja acciones como:

    • Clasificar y equilibrar a los jugadores uniformemente en cada equipo.
    • Agrupar a los jugadores bajo su equipo en la tabla de posiciones.
    • Tintear los nombres de los jugadores en el espacio 3D con el color correspondiente a su equipo.

    Usando este servicio, el script crea dos objetos Team distintos con diferentes valores de propiedades Color para representar cada equipo: rojo brillante para un equipo y azul brillante para el otro.

    El script luego define tres funciones donde ocurre la mayor parte del trabajo para configurar la configuración del chat de voz del equipo:

    • getUserIds - Devuelve un array de userIDs para todos los jugadores en un equipo.
    • getDevices - Devuelve un array de objetos AudioDeviceInput para todos los jugadores en un equipo. Cada objeto AudioDeviceInput representa el micrófono físico de un jugador en el mundo real.
    • updateTeam - Recupera todos los userIDs de getUserIds, itera sobre los objetos AudioDeviceInput de getDevices, establece su propiedad Enum.AccessModifierType en Allow para que solo los userIDs de cada equipo estén permitidos para escuchar los micrófonos de sus compañeros de equipo, y luego actualiza la SetUserIdAccessList con los userIDs del equipo.

    El resto del script controla cómo funcionan juntos estas funciones y escuchadores de eventos:

    • Cuando un nuevo jugador se une a la experiencia, el script verifica si el jugador tiene un micrófono y actualiza su equipo.
    • Cuando el script detecta un nuevo objeto AudioDeviceInput, llama a updateTeam para su respectivo equipo rojo o azul.
    • A medida que los jugadores se unen o salen de la experiencia, el script se conecta a los eventos PlayerAdded y PlayerRemoved para actualizar la configuración de cada equipo.
  3. Prueba la experiencia con un par de amigos para verificar que los compañeros de cada equipo solo se pueden escuchar entre sí a través del chat de voz.

Agregar chat por pulsación

El chat por pulsación es una configuración de chat de voz en la que los jugadores solo pueden activar su micrófono dentro de una experiencia mientras presionan y mantienen un botón específico en su dispositivo. Integrar el chat por pulsación en tu juego es útil cuando deseas que los jugadores tengan más privacidad y control sobre cuándo quieren ser escuchados por otros jugadores y el ruido ambiental.

Para recrear el chat por pulsación en el archivo de lugar de muestra Gingerbread Island - Voice Chat:

  1. En la ventana Explorer, inserta un Script en ReplicatedStorage.

  2. En la ventana Properties, establece RunContext en Client para que el script solo controle el micrófono del jugador local.

  3. Renombra el script como PushToChat, y luego pega el siguiente código en el 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)

    El script comienza obteniendo:

    • El servicio Players para poder hacer referencia a todos los jugadores dentro de la experiencia.
    • El servicio UserInputService para poder comprobar cuándo un jugador presiona botones en su dispositivo.
    • El objeto AudioDeviceInput del jugador local, o el micrófono físico en su dispositivo.

    El script luego:

    • Establece la tecla V como el botón que el jugador necesita presionar y mantener para hablar en su micrófono.
    • Silencia el micrófono del jugador.

    El resto del script configura dos escuchadores de eventos para InputBegan e InputEnded del UserInputService. Cuando presionan la tecla V, el evento InputBegan activa el micrófono del jugador, y cuando sueltan la tecla V, el evento InputEnded vuelve a silenciar su micrófono.

  4. Prueba la experiencia para verificar que los jugadores solo pueden escucharse entre sí a través del chat de voz cuando están presionando la tecla V.

Agregar chat basado en tiempo

El chat basado en tiempo es una configuración de chat de voz en la que los jugadores solo pueden hablar y escucharse entre sí durante un período de tiempo establecido. Integrar el chat basado en tiempo en tu juego es útil cuando deseas que los jugadores planifiquen cuidadosamente cómo se comunican entre sí durante fases específicas, como durante discusiones por rondas o después de escenas.

Para recrear el chat de voz basado en tiempo en el archivo de lugar de muestra Gingerbread Island - Voice Chat:

  1. En la ventana Explorer, inserta un Script en ServerScriptService.

  2. Renombra el script como TimeBasedChat, y luego pega el siguiente código en el 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) -- cada 15 segundos
    toggleMuteAll() -- permite que las personas hablen, o les impide hablar
    end

    Este script comienza obteniendo el servicio Players para poder hacer referencia a su funcionalidad para gestionar a todos los jugadores en la experiencia. Luego establece una bandera muteAll en false, que la siguiente función toggleMuteAll usa para activar y desactivar el chat de voz.

    Revisemos la función toggleMuteAll:

    • Comienza recorriendo todos los jugadores en la experiencia utilizando Players.GetPlayers.
    • Para cada jugador, verifica si tiene un objeto AudioDeviceInput hijo, o el micrófono físico en su dispositivo.
    • Si lo tienen, la función establece la propiedad Muted del objeto AudioDeviceInput en el valor de muteAll. Por ejemplo, si muteAll es true, el micrófono del jugador está deshabilitado, y si muteAll es false, el micrófono del jugador está habilitado.

    El script luego entra en un bucle infinito, esperando 15 segundos para silenciar y activar todos los objetos AudioDeviceInput.

  3. Prueba la experiencia para verificar que los jugadores solo pueden escucharse entre sí a través del chat de voz en incrementos de 15 segundos.

©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.