Chat vocale è una funzione di chat basata sulla prossimità che simula una comunicazione realistica regolando il volume dei giocatori che parlano man mano che si avvicinano o si allontanano l'uno dall'altro nello spazio 3D. Permettendo ai giocatori di parlare tra loro con i loro microfoni, possono socializzare e strategizzare insieme in tempo reale in tutto il mondo per completare gli obiettivi del tuo gioco.
Utilizzando il file .rbxl Gingerbread Island - Voice Chat come riferimento, questo tutorial ti mostra come incorporare diverse forme di chat vocale nel tuo gameplay, inclusa la guida su:
- Ordinare i giocatori in squadre che possono utilizzare la chat vocale solo con i loro compagni di squadra.
- Consentire ai giocatori di attivare temporaneamente il loro microfono mentre premono un pulsante specifico sul loro dispositivo.
- Configurare periodi di tempo in cui la chat vocale è abilitata o disabilitata.
Mentre rivedi le sezioni seguenti insieme al campione, puoi adattare ciascun campione di codice per soddisfare meglio le esigenze della tua chat vocale.
Configura le impostazioni
Affinché la chat di squadra, la chat attivata da un pulsante o la chat basata sul tempo funzionino correttamente, devi configurare la tua impostazione di chat vocale per abilitare la chat vocale e creare gli oggetti audio appropriati necessari per catturare ed emettere audio all'interno dell'ambiente 3D.
Quando i giocatori entrano nel tuo gioco, la tua impostazione di chat vocale ora:
- Consente ai giocatori idonei alla chat vocale di utilizzare i loro microfoni.
- Crea e genitore un oggetto AudioDeviceInput sotto ciascun oggetto Player idoneo alla chat vocale.
- Crea e genitore un oggetto AudioEmitter sotto ciascun Player.Character idoneo alla chat vocale.
- Crea e genitore un AudioListener sotto il Workspace.CurrentCamera.
Le sezioni seguenti dettagliano tre configurazioni uniche di chat vocale utilizzando queste impostazioni. Mentre segui il file di esempio Gingerbread Island - Voice Chat, puoi abilitare lo script disabilitato corrispondente nella finestra Explorer per testarne il comportamento. Per assicurarti che ciascuno funzioni correttamente, assicurati di disabilitare nuovamente lo script prima di passare alla configurazione successiva.

Aggiungi chat di squadra
Chat di squadra è una configurazione di chat vocale in cui solo i giocatori della stessa squadra possono parlare o sentirsi l'un l'altro in un gioco. Integrare la chat di squadra nel tuo gameplay è utile quando vuoi che i giocatori collaborino e strategizzino insieme per risolvere problemi nel gioco, come coordinare informazioni sulle posizioni della squadra nemica, risorse e incarichi.
Per ricreare la chat vocale di squadra nel file di esempio Gingerbread Island - Voice Chat:
Nella finestra Explorer, inserisci uno Script in ServerScriptService.
Rinomina lo script in TeamChat, quindi incolla il seguente codice nello 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)Spiegazione del codiceLo script inizia ottenendo i servizi Teams e Players in modo da poter utilizzare la loro funzionalità predefinita per ordinare i giocatori in squadre non appena entrano nel gioco. Ad esempio, senza alcuno sforzo di scripting aggiuntivo, il servizio Teams gestisce azioni come:
- Ordinare e bilanciare i giocatori uniformemente in ciascuna squadra.
- Raggruppare i giocatori sotto la loro squadra nella classifica.
- Colorare i nomi dei giocatori nello spazio 3D con il colore corrispondente alla loro squadra.
Utilizzando questo servizio, lo script crea due distinti oggetti Team con diversi valori delle proprietà Color per rappresentare ciascuna squadra: rosso brillante per una squadra e blu brillante per l'altra.
Lo script definisce quindi tre funzioni in cui avviene la maggior parte del lavoro per impostare la configurazione della chat vocale di squadra:
- getUserIds - Restituisce un array di userID per tutti i giocatori in una squadra.
- getDevices - Restituisce un array di oggetti AudioDeviceInput per tutti i giocatori in una squadra. Ogni oggetto AudioDeviceInput rappresenta un microfono fisico di un giocatore nel mondo reale.
- updateTeam - Recupera tutti gli userID da getUserIds, itera sugli oggetti AudioDeviceInput da getDevices, imposta la loro proprietà Enum.AccessModifierType su Allow in modo che solo gli userID di ciascuna squadra siano autorizzati a sentire dai microfoni dei loro compagni di squadra, quindi aggiorna la SetUserIdAccessList con gli userID della squadra.
Il resto dello script controlla come queste funzioni e i listener di eventi lavorano insieme:
- Quando un nuovo giocatore entra nel gioco, lo script verifica se il giocatore ha un microfono e aggiorna la sua squadra.
- Quando lo script rileva un nuovo oggetto AudioDeviceInput, chiama updateTeam per la rispettiva squadra rossa o blu.
- Man mano che i giocatori entrano o escono dal gioco, lo script si connette agli eventi PlayerAdded e PlayerRemoved per aggiornare le impostazioni di ciascuna squadra.
Fai un test di gioco con un paio di amici per verificare che i compagni di squadra di ciascuna squadra possano sentirsi solo tra loro tramite la chat vocale.
Aggiungi chat attivata da un pulsante
Chat attivata da un pulsante è una configurazione di chat vocale in cui i giocatori possono attivare il loro microfono all'interno di un gioco solo mentre premono e tengono premuto un pulsante specifico sul loro dispositivo. Integrare la chat attivata da un pulsante nel tuo gameplay è utile quando vuoi che i giocatori abbiano maggiore privacy e controllo su quando vogliono essere ascoltati rispetto ad altri giocatori e al rumore ambientale.
Per ricreare la chat vocale attivata da un pulsante nel file di esempio Gingerbread Island - Voice Chat:
Nella finestra Explorer, inserisci uno Script in ReplicatedStorage.
Nella finestra Properties, imposta RunContext su Client in modo che lo script controlli solo il microfono del giocatore locale.
Rinomina lo script in PushToChat, quindi incolla il seguente codice nello 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)Spiegazione del codiceLo script inizia ottenendo:
- Il servizio Players in modo da poter fare riferimento a tutti i giocatori all'interno del gioco.
- Il servizio UserInputService in modo da poter controllare quando un giocatore preme i pulsanti sul proprio dispositivo.
- L'oggetto AudioDeviceInput del giocatore locale, o microfono fisico sul proprio dispositivo.
Lo script quindi:
- Imposta il tasto V come il pulsante che il giocatore deve premere e tenere premuto per parlare nel proprio microfono.
- Muta il microfono del giocatore.
Il resto dello script imposta due listener di eventi per InputBegan e InputEnded da UserInputService. Quando premono il tasto V, l'evento InputBegan attiva il microfono del giocatore, e quando rilasciano il tasto V, l'evento InputEnded disattiva nuovamente il loro microfono.
Fai un test di gioco per verificare che i giocatori possano sentirsi solo tra loro tramite la chat vocale quando stanno premendo il tasto V.
Aggiungi chat basata sul tempo
Chat basata sul tempo è una configurazione di chat vocale in cui i giocatori possono parlare e sentirsi solo durante un periodo di tempo stabilito. Integrare la chat basata sul tempo nel tuo gameplay è utile quando vuoi che i giocatori pianifichino attentamente come comunicano tra loro durante fasi specifiche, come durante discussioni a turni o dopo scene di intermezzo.
Per ricreare la chat vocale basata sul tempo nel file di esempio Gingerbread Island - Voice Chat:
Nella finestra Explorer, inserisci uno Script in ServerScriptService.
Rinomina lo script in TimeBasedChat, quindi incolla il seguente codice nello 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) -- ogni 15 seconditoggleMuteAll() -- consente alle persone di parlare o impedisce loro di parlareendSpiegazione del codiceQuesto script inizia ottenendo il servizio Players in modo da poter fare riferimento alla sua funzionalità per gestire tutti i giocatori nel gioco. Imposta quindi un flag muteAll su false, che la funzione toggleMuteAll successiva utilizza per attivare e disattivare la chat vocale.
Rivediamo la funzione toggleMuteAll:
- Inizia iterando su tutti i giocatori nel gioco utilizzando Players.GetPlayers.
- Per ogni giocatore, controlla se ha un oggetto figlio AudioDeviceInput, o microfono fisico sul proprio dispositivo.
- Se ce l'hanno, la funzione imposta la proprietà Muted dell'oggetto AudioDeviceInput sul valore di muteAll. Ad esempio, se muteAll è true, il microfono del giocatore è disabilitato, e se muteAll è false, il microfono del giocatore è abilitato.
Lo script entra quindi in un ciclo infinito, aspettando 15 secondi per disattivare e riattivare tutti gli oggetti AudioDeviceInput.
Fai un test di gioco per verificare che i giocatori possano sentirsi solo tra loro tramite la chat vocale in incrementi di 15 secondi.