El chat de voz es una función 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 se alejan unos de otros en el espacio 3D. Al permitir que los jugadores hablen entre sí con sus micrófonos, pueden socializar y planificar juntos en tiempo real a lo largo del mundo para completar los objetivos de tu juego.
Usando el archivo .rbxl de Gingerbread Island - Chat de Voz como referencia, este tutorial te muestra cómo incorporar diferentes formas de chat de voz en tu jugabilidad, 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 en los que 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.
Configurar ajustes
Para que el chat de equipo, el chat por pulsación o el chat basado en tiempo funcionen adecuadamente, 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 juego, tu configuración de chat de voz ahora:
- Permite a los jugadores elegibles para voz usar sus micrófonos.
- Crea y asigna un objeto AudioDeviceInput bajo cada objeto Player elegible para voz.
- Crea y asigna un objeto AudioEmitter bajo cada Player.Character elegible para voz.
- Crea y asigna un AudioListener bajo el Workspace.CurrentCamera.
Las siguientes secciones detallan tres configuraciones únicas de chat de voz utilizando estos ajustes. A medida que sigas el archivo de lugar de ejemplo Gingerbread Island - Chat de Voz, puedes habilitar el script deshabilitado correspondiente en la ventana de 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.

Agregar chat de equipo
El chat de equipo es una configuración de chat de voz en la que solo los jugadores del mismo equipo pueden hablar o escucharse entre sí en un juego. Integrar el chat de equipo en tu jugabilidad es útil cuando deseas que los jugadores colaboren y planifiquen juntos para resolver problemas en el juego, como coordinar información sobre las posiciones del equipo enemigo, recursos y asignaciones.
Para recrear el chat de voz de equipo en el archivo de lugar de ejemplo Gingerbread Island - Chat de Voz:
En la ventana de Explorer, inserta un Script en ServerScriptService.
Renombra el script a TeamChat, 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 = 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)Explicación del códigoEl script comienza obteniendo los servicios Teams y Players para que pueda usar su funcionalidad lista para usar para clasificar a los jugadores en equipos tan pronto como se unan al juego. Por ejemplo, sin ningún esfuerzo adicional de scripting, el servicio Teams maneja acciones como:
- Clasificar y equilibrar a los jugadores de manera uniforme en cada equipo.
- Agrupar a los jugadores bajo su equipo en la tabla de clasificación.
- 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 puedan 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 estas funciones y los oyentes de eventos juntos:
- Cuando un nuevo jugador se une al juego, 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 abandonan el juego, el script se conecta a los eventos PlayerAdded y PlayerRemoved para actualizar la configuración de cada equipo.
Prueba el juego con un par de amigos para verificar que los compañeros de cada equipo solo puedan escucharse 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 un juego mientras presionan y mantienen un botón específico en su dispositivo. Integrar el chat por pulsación en tu jugabilidad es útil cuando deseas que los jugadores tengan más privacidad y control sobre cuándo quieren ser escuchados sobre otros jugadores y el ruido ambiental.
Para recrear el chat de voz por pulsación en el archivo de lugar de ejemplo Gingerbread Island - Chat de Voz:
En la ventana de Explorer, inserta un Script en ReplicatedStorage.
En la ventana de Properties, establece RunContext en Client para que el script solo controle el micrófono del jugador local.
Renombra el script a PushToChat, 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.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)Explicación del códigoEl script comienza obteniendo:
- El servicio Players para que pueda hacer referencia a todos los jugadores dentro del juego.
- El servicio UserInputService para que pueda verificar 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 oyentes de eventos para InputBegan y InputEnded de UserInputService. Cuando presionan la tecla V, el evento InputBegan desactiva el silencio del micrófono del jugador, y cuando sueltan la tecla V, el evento InputEnded vuelve a silenciar su micrófono.
Prueba el juego para verificar que los jugadores solo puedan 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 jugabilidad 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 cortas.
Para recrear el chat de voz basado en tiempo en el archivo de lugar de ejemplo Gingerbread Island - Chat de Voz:
En la ventana de Explorer, inserta un Script en ServerScriptService.
Renombra el script a TimeBasedChat, luego pega el siguiente código en el 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) -- cada 15 segundostoggleMuteAll() -- permite que las personas hablen o les impide hablarendExplicación del códigoEste script comienza obteniendo el servicio Players para que pueda hacer referencia a su funcionalidad para gestionar a todos los jugadores en el juego. Luego establece una bandera muteAll en false, que la siguiente función toggleMuteAll utiliza para alternar el chat de voz encendido y apagado.
Revisemos la función toggleMuteAll:
- Comienza iterando a través de todos los jugadores en el juego usando Players.GetPlayers.
- Para cada jugador, verifica si tiene un objeto hijo AudioDeviceInput, o 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 desilenciar todos los objetos AudioDeviceInput.
Prueba el juego para verificar que los jugadores solo puedan escucharse entre sí a través del chat de voz en incrementos de 15 segundos.