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 della tua esperienza.
Utilizzando il file .rbxl Gingerbread Island - Chat Vocale come riferimento, questo tutorial ti mostrerà come incorporare diverse forme di chat vocale nel tuo gameplay, inclusa la guida su:
- Suddividere i giocatori in squadre che possono usare la chat vocale solo con i loro compagni di squadra.
- Consentire ai giocatori di attivare temporaneamente il microfono mentre premono un determinato pulsante sul loro dispositivo.
- Configurare periodi di tempo in cui la chat vocale è abilitata o disabilitata.
Mentre esamini le seguenti sezioni insieme al campione, puoi adattare ciascun frammento di codice per soddisfare meglio le esigenze della tua chat vocale.
Configura le impostazioni
Affinché la chat di squadra, il push per la chat o la chat basata sul tempo funzionino correttamente, devi configurare la tua impostazione della 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 nella tua esperienza, la tua impostazione della chat vocale ora:
- Consente ai giocatori idonei alla voce di usare i loro microfoni.
- Crea e assegna un oggetto AudioDeviceInput sotto ogni oggetto Player idoneo alla voce.
- Crea e assegna un oggetto AudioEmitter sotto ogni Player.Character idoneo alla voce.
- Crea e assegna un AudioListener sotto il Workspace.CurrentCamera.
Le sezioni seguenti dettagliano tre configurazioni uniche di chat vocale utilizzando queste impostazioni. Seguendo il campione del file di gioco Gingerbread Island - Chat Vocale, puoi abilitare lo script disabilitato corrispondente nella finestra Esplora per testare il loro comportamento. Per assicurarti che ciascuno funzioni correttamente, assicurati di disabilitare di nuovo 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'uno con l'altro in un'esperienza. Integrare la chat di squadra nel tuo gameplay è utile quando desideri che i giocatori collaborino e strategizzino insieme per risolvere problemi nelle esperienze, come coordinare informazioni sulle posizioni della squadra nemica, delle risorse e degli incarichi.
Per ricreare la chat vocale di squadra nel file di gioco campione Gingerbread Island - Chat Vocale:
Nella finestra Esplora, inserisci un 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à standard per suddividere i giocatori in squadre non appena entrano nell'esperienza. 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 ogni squadra: rosso brillante per una squadra e blu brillante per l'altra.
Lo script poi definisce tre funzioni dove si svolge gran 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 il microfono fisico di un giocatore nel mondo reale.
- updateTeam - Recupera tutti gli userID da getUserIds, itera sugli oggetti AudioDeviceInput di getDevices, imposta la loro proprietà Enum.AccessModifierType su Allow in modo che solo gli userID in ciascuna squadra possano sentire i 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 si unisce all'esperienza, 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 loro rispettiva squadra rossa o blu.
- Man mano che i giocatori entrano o escono dall'esperienza, lo script si connette agli eventi PlayerAdded e PlayerRemoved per aggiornare le impostazioni di ciascuna squadra.
Fai un test dell'esperienza con un paio di amici per verificare che i compagni di squadra di ciascuna squadra possano sentirsi solo tra loro attraverso la chat vocale.
Aggiungi push to chat
Push to chat è una configurazione di chat vocale in cui i giocatori possono attivare il loro microfono all'interno di un'esperienza solo mentre premono e tengono premuto un determinato pulsante sul loro dispositivo. Integrare il push to chat nel tuo gameplay è utile quando desideri che i giocatori abbiano maggiore privacy e controllo quando vogliono essere sentiti rispetto agli altri giocatori e ai rumori ambientali.
Per ricreare la chat vocale push nel file di gioco campione Gingerbread Island - Chat Vocale:
Nella finestra Esplora, inserisci un Script in ReplicatedStorage.
Nella finestra Proprietà, 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 dell'esperienza.
- Il servizio UserInputService in modo da poter controllare quando un giocatore preme i pulsanti sul proprio dispositivo.
- L'oggetto AudioDeviceInput del giocatore locale, o il microfono fisico sul loro 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 l'audio del microfono del giocatore, e quando rilasciano il tasto V, l'evento InputEnded lo disattiva di nuovo.
Fai un test dell'esperienza per verificare che i giocatori possano sentirsi solo tramite chat vocale quando premono 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 desideri che i giocatori pianifichino attentamente come comunicano tra loro durante fasi specifiche, come durante discussioni a turni o dopo scene cinematografiche.
Per ricreare la chat vocale basata sul tempo nel file di gioco campione Gingerbread Island - Chat Vocale:
Nella finestra Esplora, inserisci un 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() -- consenti alle persone di parlare o impedisci 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 nell'esperienza. Quindi imposta un flag muteAll su false, che la successiva funzione toggleMuteAll utilizza per attivare e disattivare la chat vocale.
Esaminiamo la funzione toggleMuteAll:
- Inizia eseguendo un ciclo attraverso tutti i giocatori nell'esperienza utilizzando Players.GetPlayers.
- Per ciascun giocatore, verifica se ha un oggetto figlio AudioDeviceInput, o un microfono fisico sul loro dispositivo.
- Se lo hanno, la funzione imposta la proprietà Muted dell'oggetto AudioDeviceInput sul valore di muteAll. Ad esempio, se muteAll è true, il microfono del giocatore è disabilitato, mentre se muteAll è false, il microfono del giocatore è abilitato.
Lo script quindi entra in un ciclo infinito, aspettando 15 secondi per disattivare e riattivare tutti gli oggetti AudioDeviceInput.
Fai un test dell'esperienza per verificare che i giocatori possano sentirsi solo tramite chat vocale a intervalli di 15 secondi.