Audio 3D è un suono direzionale che emette da una posizione particolare nello Spazio3D, aumentando o diminuendo il volume a seconda della distanza e dell'orientamento tra l'emittente audio e l'ascoltatore.Questo significa che mentre gli ascoltatori o gli emittenti si muovono nell'Ambiente, i giocatori possono sentire dinamicamente quell'audio da diverse direzioni e livelli di volume.
Usando il file Gingerbread House - Start.rbxl come luogo di partenza e Gingerbread House - Complete Audio come riferimento, questo tutorial ti mostra come aggiungere sia l'audio in loop che un colpo 3D alle tue esperienze, inclusa la guida su:
- Riproduzione dei suoni ambientali che si riproducono non appena i giocatori si connettono al Server.
- Attivare l'audio per informare i giocatori su eventi situazionali chiave che sono importanti per il loro Partita.
- Attivazione dell'audio per fornire ai giocatori feedback audio quando interagiscono con oggetti 3D.
- Riproducendo morsi di suono del personaggio che coinvolgono e guidano i giocatori verso punti di interesse all'interno del loro Ambiente.
Se a un certo punto ti blocchi nel processo, puoi usare Gingerbread House - Complete Audio come riferimento per confrontare i tuoi progressi.
Oggetti audio
Per creare l'audio/suonodirezionale, è importante comprendere gli oggetti audio con cui lavorerai durante questo Tutoriale.Ci sono sei tipi principali di oggetti audio:
- L'oggetto AudioPlayer carica e riproduce il file audio .
- L'oggetto AudioEmitter è un oratore virtuale che emette audio nell'Ambiente3D.
- L'oggetto AudioListener è un microfono virtuale che raccoglie l'audio dall'Ambiente3D.
- L'oggetto AudioDeviceOutput è un dispositivo hardware fisico all'interno del Mondoreale , come un altoparlante o cuffie.
- L'oggetto AudioDeviceInput è un microfono fisico all'interno del Mondoreale.
- Wires trasporta gli stream audio da un oggetto all'altro.
Tutti questi oggetti audio lavorano insieme per emettere suono proprio come i loro omologhi del mondo reale.Diamo un'occhiata a come funziona in pratica usando un esempio di un giocatore che indossa un auricolare mentre gioca un'esperienza con il suo laptop:
- Il AudioPlayer carica l'audio assetID 1516791621 nella esperienza per una pista di pioggia.
- Il AudioEmitter emette uno stream dell'audio della pista di pioggia nell'Ambiente3D.
- Un Wire trasporta lo stream dal AudioPlayer al AudioEmitter in modo che lo stream esca dall'altoparlante 3D.
- L'oggetto figlio del personaggio AudioListener ascolta quel suono all'interno dell'ambiente 3D e lo ripassa al loro auricolare.
- L'oggetto AudioDeviceOutput trasporta il suono dal AudioListener al diffusore fisico del Giocatore, o in questo caso, ai suoi auricolari.
- L'oggetto AudioDeviceInput cattura il suono dal mondo reale e lo ripropone nell'esperienza per la Chat vocale.


Le seguenti sezioni vanno più in profondità e fanno riferimento a questi oggetti mentre impari a giocare sia con il looping che con un colpo 3D audio/suono.Mentre esamini questi oggetti con le tecniche in arrivo, puoi prevedere più accuratamente come catturare e alimentare il suono dall'esperienza al giocatore e viceversa.
Riproduzione audio/suonoin loop
Looping audio 3D , o audio direzionale che si ripete senza soluzione di continuità non appena i giocatori si connettono al Server, è una tecnica comune di progettazione audio per migliorare l'atmosfera dello spazio 3D rendendolo vivo e dinamico.Inoltre, il ripetere l'audio 3D mantiene le tue fonti sonore ambientali coerenti, come lo statico di una televisione o il rumore di una cascata; se questi suoni dovessero improvvisamente fermarsi, l'ambiente si sentirebbe irrealistico.
Per dimostrare questo concetto, rivisita come l'audio 3D seguente per due cascate grandi si ferma non appena la traccia audio non loopata è completa.Mentre l'acqua sembra immergere i giocatori nell'Ambienteesterno inizialmente, il cambiamento auditorio improvviso è scioccante e innaturale per come una cascata si comporta nel Mondoreale.
Allo stesso modo, il campione usa questa tecnica per la cascata di acqua al cioccolato in movimento e regola il suo volume in base alla distanza del Giocatoredall'emittente audio.Quando il giocatore è a meno di 20 studs di distanza, l'emittente emette il suono a pieno volume.Mentre il giocatore si muove più lontano, l'audio sloshing diminuisce di volume ogni 20 studs lontano dall'emittente audio.Questo emula il suono del mondo reale che diminuisce di volume più sei lontano dalla Sorgente.
Per ricreare l'audio in loop 3D nella campionatura Gingerbread House - Complete Audio file posto:
Abilita un ascoltatore predefinito che è allegato al personaggio del tuo giocatore.
- Nella finestra Explorer , seleziona il SoundService .
- Nella finestra Proprietà , imposta DefaultListenerLocation a Personaggio .Quando esegui l'esperienza, il motore automaticamente:
- Crea un AudioListener sotto ogni personaggio giocatore Humanoid.RootPart in modo che tu possa sentire i suoni spostarsi nei tuoi altoparlanti del mondo reale in base alla posizione e alla scala delle fonti sonore all'interno dell'esperienza.
- Crea un AudioDeviceOutput sotto SoundService .
Nella finestra Explorer , naviga verso Workspace > WaterfallAudioObject , quindi:
- Inserisci un oggetto Lettore audio per creare una fonte audio per la cascata.
- Inserisci un oggetto Emittente audio per emettere uno stream posizionale da WaterfallAudioObject .
- Inserisci un oggetto Cavo per trasportare lo stream dall'audio player all'emittente audio.
Seleziona il Lettore audio , quindi nella finestra Proprietà ,
- Imposta AssetID a rbxassetid://1516791621 per riprodurre una traccia audio piovosa.
- Abilita Looping in modo che l'audio si ripeta senza interruzioni.
Seleziona il Emittente audio , quindi nella finestra Proprietà , imposta Attenuazione distanza a {0: 1}, {20: 0.8}, {40: 0.4}, {80: 0} in modo che il suono diminuisca progressivamente di volume ogni 20 studs lontano dall'emittente audio.
Seleziona il Cavo , quindi nella finestra Proprietà ,
- Imposta SourceInstance al tuo nuovo AudioPlayer per specificare che vuoi che il cavo trasporti l'audio da questo specifico Giocatoreaudio.
- Imposta TargetInstance al tuo nuovo AudioEmitter per specificare che vuoi che il cavo porti l'audio a questo emittente audio specifico all'interno della cascata.
Torna nella finestra Explorer , inserisci un Script in WaterfallAudioObject , rinominalo LoopWaterfallMusic , imposta la sua proprietà RunContext a Client , quindi incolla il seguente codice nel script:
local audioPlayer = script.ParentaudioPlayer:Play()Spiegazione del codiceLo script inizia dichiarando una variabile per rappresentare il padre dello script AudioPlayer .Lo script quindi imposta la fonte audio da riprodurre dal momento in cui il giocatore si unisce all'esperienza al momento in cui esce dall'esperienza.
Prova l'esperienza per sentire il suono della pioggia di cioccolato in loop quando il tuo avatar è vicino alla cascata.Quando ruoti la testa del tuo personaggio per guardare in una direzione diversa, il suono si sposta dinamicamente negli altoparlanti del mondo reale in base alla posizione dell'emittente nello Spazio3D.
audio/suonoa colpo unico
Un colpo di 3D audio direzionale , o audio direzionale che suona una volta a un momento e a una posizione specifici a meno che un giocatore non lo riattivi, fornisce ai giocatori un contesto sulle loro azioni, sull'Ambientee su qualsiasi personaggio intorno a loro.Utilizzare questo tipo di feedback audio nelle tue esperienze è essenziale perché consente ai giocatori di prendere decisioni strategiche come evitare i nemici in arrivo o raccogliere oggetti utili.
Le seguenti sezioni forniscono dettagli di implementazione per scenari di gioco comuni in cui i giocatori hanno bisogno di Riscontro/Replicatempestivi e direzionali, inclusi eventi di gioco situazionali, l'interazione con oggetti e il dialogo del personaggio non giocabile.
Riscontro/Replicadell'evento
Poiché i giocatori attivano eventi situazionali chiave all'interno del loro Ambiente, come sbloccare nuove aree di gioco o richiedere il Lanciarenemico, è essenziale che comprendano dove nello spazio 3D devono dirigere il loro focus e attenzione.Se non ricevono un feedback acustico immediato, potrebbero perdere informazioni importanti per il loro Partita, con la conseguente frustrazione di non sapere dove andare o cosa fare dopo.
Per dimostrare perché questo è importante, rivediamo l'audio 3D a un colpo dal modello Laser Tag che viene riprodotto dal blaster di ogni Giocatore:
- Un suono pop profondo suona per ogni esplosione che il giocatore spara dal suo blaster.
- Un suono di clic e beep robotico si riproduce ogni volta che il giocatore ricarica il suo blaster con un nuovo round.
Entrambi questi suoni forniscono consapevolezza situazionale allertando tutti i giocatori vicini alla direzione da cui provengono le esplosioni in modo che possano prendere decisioni informate per unirsi al divertimento o evitare un potenziale pericolo.
L'esempio utilizza la stessa tecnica per fornire ai giocatori consapevolezza situazionale della loro ricompensa per aver completato l'obiettivo principale all'interno dell'esperienza.Dopo aver raccolto tutti e tre i gumdrop, la porta della casa di pan di zenzero si apre per consentire ai giocatori l'accesso al presente all'interno.
Poiché non esiste un ordine specifico che i giocatori devono raccogliere le gumdrops, è importante che i giocatori siano consapevoli dell'apertura della porta non importa quale gumdrop ultimo hanno raccolto.Il suono posizionale rende questo possibile in modo che i giocatori siano consapevoli del loro successo e dove devono andare dopo a seconda della loro distanza e direzione rispetto alla porta.
Per ricreare il feedback audio 3D dell'evento a colpo unico nel file di esempio Gingerbread House - Complete Audio:
Nella finestra Explorer , naviga verso Workspace > Door , quindi:
- Inserisci un oggetto Lettore audio per creare una fonte audio per il volume.
- Inserisci un oggetto Emittente audio per emettere uno stream posizionale da Porta .
- Inserisci un oggetto Cavo per trasportare lo stream dall'audio player all'emittente audio.
Seleziona il Lettore audio , quindi nella finestra Proprietà , imposta ID risorsa a rbxassetid://5930776613.
Seleziona il Cavo , quindi nella finestra Proprietà ,
- Imposta SourceInstance al tuo nuovo AudioPlayer per specificare che vuoi che il cavo trasporti l'audio da questo specifico Giocatoreaudio.
- Imposta TargetInstance al tuo nuovo AudioEmitter per specificare che vuoi che il cavo porti l'audio a questo emittente audio specifico all'interno del volume.
Torna nella finestra Explorer , naviga verso ServerScriptService , quindi inserisci un Script , rinominalo GumdropService , imposta la sua proprietà RunContext a Server , quindi incolla il seguente codice nel script:
-- Inizializzazione delle variabililocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local ServerStorage = game:GetService("ServerStorage")local TweenService = game:GetService("TweenService")-- Modulilocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Variabililocal gumdropsFolder = Workspace.Gumdropslocal gumdrops = gumdropsFolder:GetChildren()local GUMDROP_KEY_NAME = PlayerData.GUMDROP_KEY_NAMElocal GUMDROP_AMOUNT_TO_ADD = 1local function updatePlayerGumdrops(player, updateFunction)-- Aggiorna la tabella gumdroplocal newGumdropAmount = PlayerData.updateValue(player, GUMDROP_KEY_NAME, updateFunction)-- Aggiorna la ClassificagumdropLeaderboard.setStat(player, GUMDROP_KEY_NAME, newGumdropAmount)-- Verifica se il giocatore ha raccolto tre gummidropsif newGumdropAmount >= 3 then-- Riproduci l'audio dell'evento della porta quando il giocatore raccoglie tre gumdroplocal audioPlayer = Workspace.Door.AudioPlayeraudioPlayer:Play()-- Animare la porta per muoversi verso il bassolocal doorPart = Workspace.Doorlocal tweenInfo = TweenInfo.new(2, Enum.EasingStyle.Linear)local tween = TweenService:Create(doorPart, tweenInfo, {Position = doorPart.Position + Vector3.new(0, -15, 0)})tween:Play()endend-- Definire il gestore eventilocal function onGumdropTouched(otherPart, gumdrop)if gumdrop:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Il giocatore ha toccato un gumdroplocal audioPlayer = gumdrop.AudioPlayeraudioPlayer:Play()gumdrop.Transparency = 1gumdrop:SetAttribute("Enabled", false)updatePlayerGumdrops(player, function(oldGumdropAmount)oldGumdropAmount = oldGumdropAmount or 0return oldGumdropAmount + GUMDROP_AMOUNT_TO_ADDend)print("Player collected gumdrop")endendend-- Configurazione dei lettori di eventifor _, gumdrop in gumdrops dogumdrop:SetAttribute("Enabled", true)gumdrop.Touched:Connect(function(otherPart)onGumdropTouched(otherPart, gumdrop)end)endSpiegazione del codiceQuesto script inizia con l'初始化 di Workspace , Players , ServerStorage e TweenService servizi in modo che possa fare riferimento ai loro figli e alla loro funzionalità.Quindi, richiede i moduli Classifica e Dati di gioco in ; questi moduli sono responsabili della creazione e dell'aggiornamento di una classifica nell'angolo in alto a destra dello schermo che traccia la quantità di gomme che un giocatore raccoglie nell'Ambiente.
La funzione updatePlayerGumdrops dello script è dove si svolge la maggior parte del lavoro per l'attivazione dell'audio 3D per il Riscontro/Replicadell'evento e richiede due argomenti:
- player - Un giocatore che raccoglie un gumdrop.
- updateFunction - Una funzione di richiamo che aggiorna la quantità di gumdrop raccolta dal Giocatore.
Quando un giocatore si scontra con un gumdrop, lo script:
- Ottiene il valore della nuova collezione di gumdrop del Giocatorechiamando la funzione PlayerData.updateValue.
- Aggiorna la classifica con questa nuova quantità chiamando la funzione Leaderboard.setStat.
- Controlla se l'importo è maggiore o uguale a 3 .
Quando questo valore è maggiore o uguale a 3, lo script:
- Riproduce la traccia audio 3D dal player audio all'emittente audio.
- Sposta la linea della porta linearmente 15 studs sotto la sua posizione attuale.
Il resto dello script è in gran parte responsabile del rilevamento di tutto ciò che collide con il gumdrop è un giocatore in modo che possa attivare un suono non posizionale per il Riscontro/Replicadi raccolta.Per ulteriori informazioni su questa parte dello script, vedi Aggiungi audio 2D - Feedback sul gameplay.
Prova l'esperienza per sentire il suono della porta scorrevole dopo aver raccolto tutti e tre i gumdrop nell'Ambiente.Quando ruoti la Telecamera, il suono si sposta dinamicamente negli altoparlanti del mondo reale in modo che tu lo senta secondo la posizione dell'emittente nello Spazio3D.
Interazione dell'oggetto
Quando i giocatori interagiscono con oggetti 3D all'interno del loro Ambiente, come l'attivazione di un interruttore di luce o il raccoglimento di un'arma, è importante fornire un feedback istantaneo in modo che comprendano intuitivamente come stanno interagendo con l'oggetto.La coppia di feedback visivi e auditivi rafforza la relazione causa-effetto tra le azioni del Giocatoree la risposta ambientale.
Per estendere questo concetto, rivediamo il seguente audio 3D a colpo unico dall'esempio Pianta per il flusso di lavoro di giardinaggio di un cavolo:
- Un suono di clic lieve si riproduce quando il giocatore pianta un seme.
- Un suono bagnato, simile a uno scoppio, si riproduce quando il giocatore annaffia la sua pianta in crescita.
- Un suono di clip si riproduce quando il giocatore raccoglie la pianta completamente cresciuta.
- Un suono morbido thud si riproduce quando il giocatore mette il cavolo nel vagone.
Tutti questi suoni rafforzano le interazioni della chiave prossimità del Giocatorecon l'oggetto che cambia forma nelle 3D nello Spazio.Per i giocatori con disabilità visive in cui i cambiamenti di colore o le animazioni sono più difficili da decifrare da Proprio, fornire queste molteplici forme di feedback sensoriale aiuta le interazioni dell'oggetto 3D a rimanere accessibili e intuitive per il maggior numero di giocatori possibile.
Per dare un esempio diverso di come puoi configurare l'interazione dell'oggetto con più forme di Riscontro/Replicasensoriale, il campione fornisce sia feedback visivi che audio ogni volta che i giocatori passano sul pulsante 3D di menta piperita all'interno della casa di pan di zenzero.Quando i giocatori non interagiscono con il pulsante, appare come una tipica caramella alla menta, ma quando si posizionano sul pulsante, il campione:
- Riproduce una traccia audio celebrativa.
- Tinge i lati del pulsante con una tonalità verde.
- Sposta il pulsante nel terreno.
Da qui, puoi connettere questa interazione a ogni sorta di azione di gioco unica, come sbloccare un oggetto o attivare una capacità speciale.


Per ricreare l'interazione audio 3D di un solo colpo dell'oggetto nella campionatura Casa di pan di zenzero - Audio completo posto file:
Nella finestra Explorer , naviga verso Workspace > 3DAudioButton , quindi:
- Inserisci un oggetto AudioPlayer per creare una fonte audio per il pulsante.
- Inserisci un oggetto Emittente audio per emettere uno stream posizionale da 3DAudioButton .
- Inserisci un oggetto Cavo per trasportare lo stream dall'audio player all'emittente audio.
Seleziona il Lettore audio , quindi nella finestra Proprietà , imposta AssetID a rbxassetid://1846248593 per riprodurre una traccia audio festiva e celebrativa.
Seleziona il Cavo , quindi nella finestra Proprietà ,
- Imposta SourceInstance al tuo nuovo AudioPlayer per specificare che vuoi che il cavo trasporti l'audio da questo specifico Giocatoreaudio.
- Imposta TargetInstance al tuo nuovo AudioEmitter per specificare che vuoi che il cavo porti l'audio a questi specifici emittenti audio all'interno del pulsante.
Torna nella finestra Explorer , inserisci un Script in 3DAudioButton , rinominalo PlayAudioWhenPressed e poi incolla il seguente codice nel script:
local TweenService = game:GetService("TweenService")local buttonModel = script.Parent.Parentlocal buttonPart = buttonModel.ButtonPartlocal buttonPressedAudioPlayer = buttonModel.ButtonPressedAudioPlayerlocal tweenInfo = TweenInfo.new(.2, Enum.EasingStyle.Exponential)local buttonTweenByIsPressed = {-- Pressionato[true] = TweenService:Create(buttonPart, tweenInfo, {Size = buttonPart.Size / Vector3.new(2, 1, 1),Color = Color3.fromRGB(75, 151, 75),}),-- Basilare[false] = TweenService:Create(buttonPart, tweenInfo, {Size = buttonPart.Size,Color = Color3.fromRGB(196, 40, 28),}),}local function onIsPlayingChanged()local isPlaying = buttonPressedAudioPlayer.IsPlayinglocal tween = buttonTweenByIsPressed[isPlaying]tween:Play()endonIsPlayingChanged()buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying"):Connect(onIsPlayingChanged)buttonPressedAudioPlayer.Ended:Connect(onIsPlayingChanged)buttonPart.Touched:Connect(function(_hit)buttonPressedAudioPlayer:Play()end)Spiegazione del codiceLo script inizia ottenendo:
- Il TweenService in modo che possa animare la parte del pulsante che sporge dal terreno.
- Il modello padre dello script 3DAudioButton .
- La parte del pulsante che sporge dal terreno.
- Il lettore audio pertinente con la traccia audio della tua celebrazione.
Lo script poi definisce:
- Un oggetto TweenInfo che specifica che l'animazione del pulsante si giocherà con uno stile di animazione esponenziale.
- Due adolescenti che rappresentano lo stato della pressione o non pressione del pulsante.
- Lo stato premuto true sposta il pulsante leggermente verso il basso nel terreno e tinge i lati della parte con una tonalità verde.
- Lo stato non compresso false sposta il pulsante indietro alla sua posizione originale e rimuove il tint precedente.
Il resto dello script è dove si verifica la maggior parte del lavoro per il Riscontro/Replicadell'interazione dell'oggetto, quindi rivediamo come funziona la funzione onIsPlayingChanged e gli ascoltatori di eventi:
- buttonPart.Touched ascolta un giocatore per toccare il pulsante, quindi chiama la funzione Play() per iniziare a riprodurre l'audio associato dal Giocatoreaudio.Questo processo cambia la proprietà AudioPlayer.IsPlaying da false a true .
- buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying") ascolta la proprietà IsPlaying dell'audio giocatoreper cambiare, quindi chiama la funzione onIsPlayingChanged.
- La funzione onIsPlayingChanged utilizza queste informazioni per attivare il tween che cambia il suo aspetto visivo nello Spazio3D.
- Per impedire al giocatore di riavviare accidentalmente l'audio se dovesse saltare rapidamente sul pulsante in rapida successione, buttonPressedAudioPlayer.Ended ascolta il lettore audio per terminare di riprodurre prima di chiamare nuovamente la funzione onIsPlayingChanged.
È importante notare che l'evento onIsPlayingChanged si attiva solo quando cambia da false a true, il che significa che non si attiva quando cambia da true a false .Questo è il comportamento previsto a causa di complicazioni con il timing della replicazione delle proprietà dal server al client.A causa di ciò, l'evento Ended viene fornito e ascoltato in questo esempio per coprire entrambi i casi.
Prova l'esperienza per sentire il suono di celebrazione quando il tuo personaggio di giocatore tocca il pulsante 3D nella casa di pan di zenzero.Quando ti allontani dal pulsante, il volume del suono diminuisce.
Dialogo del personaggio
Fornire l'audio direzionale dai tuoi personaggi non giocabili (NPC) è utile per guidare i giocatori verso punti di interesse all'interno del loro Ambientee aggiungere profondità alle loro interazioni con altri personaggi.In effetti, nei giochi guidati dalla narrazione, molti progettisti di giochi usano strategicamente il dialogo dei personaggi per insegnare ai giocatori indirettamente il loro personaggio, il loro alleato e il loro nemico o il mondo stesso.
Esempi comuni di questa tecnica includono:
- Stile di dialogo per impostare il tono del tuo Gioco.
- Banter per insegnare ai giocatori le relazioni dei personaggi.
- Conversazioni nemiche per confessare motivazioni o la loro posizione rispetto al Giocatore.
- Personaggi del giocatore che parlano a voce alta i loro pensieri per guidare dolcemente il giocatore a ciò che dovrebbe fare dopo, come guarire se stesso, spostarsi in un'altra posizione o trovare un Articolo.
- Personaggi alleati che parlano con il personaggio del giocatore per rivelare dettagli del mondo in-experience come la sua storia, cultura e problemi sociali.
Per dimostrare come questo può apparire in pratica, rivediamo il seguente audio 3D a un colpo da Beyond the Dark esibizione che si riproduce periodicamente quando i giocatori sono nell'area principale della lobby della stazione spaziale.
Usando la stazione spaziale come personaggio, questo dialogo fornisce ai giocatori un contesto e una storia importanti sull'impostazione Configurazione.Ad esempio, da questa singola frase i giocatori imparano:
- Sono nello Spazio, specificamente su una stazione spaziale chiamata Kerr-Newman Deep Space Relay 14.
- Il loro ambiente è futuristico e accogliente.
- Sono un visitatore e probabilmente se ne andrà presto.
Questi dettagli insieme immergono i giocatori nel loro Ambientee aggiungono un senso di urgenza alla loro missione.Tuttavia, se i giocatori non sanno quale sia la loro missione principale, puoi anche usare il dialogo dei personaggi per informare i giocatori di ciò che vuoi che facciano nella tua esperienza.
Per illustrare, l'esempio utilizza un volume , o regione invisibile all'interno dello Spazio3D, per attivare il dialogo del personaggio dall'uomo di neve per guidare i giocatori a raccogliere tre gomme da masticare per aprire la porta della sua Inizio.Come una delle prime cose che i giocatori vedono quando si uniscono all'esperienza, i giocatori sono più probabili a attivare il dialogo e sapere cosa devono fare per avere successo.

Per ricreare il dialogo del personaggio a colpo unico 3D audio nel file di esempio Gingerbread House - Complete Audio:
Nella finestra Explorer , naviga verso Workspace > Volume di dialogo , quindi:
- Inserisci un oggetto Lettore audio per creare una fonte audio per il volume.
- Inserisci un oggetto Emittente audio per emettere uno stream posizionale da Volume di dialogo .
- Inserisci un oggetto Cavo per trasportare lo stream dall'audio player all'emittente audio.
Seleziona il Lettore audio, quindi nella finestra Proprietà, imposta ID risorsa a per riprodurre un audio istruttivo per l'obiettivo dell'esperienza.
Seleziona il Cavo , quindi nella finestra Proprietà ,
- Imposta SourceInstance al tuo nuovo AudioPlayer per specificare che vuoi che il cavo trasporti l'audio da questo specifico Giocatoreaudio.
- Imposta TargetInstance al tuo nuovo AudioEmitter per specificare che vuoi che il cavo porti l'audio a questo emittente audio specifico all'interno del volume.
Torna nella finestra Explorer , naviga verso StarterPlayer > StarterCharacterScripts , inserisci un LocalScript , rinominalo PlayAudioWhenInVolume , e incolla il seguente codice nel script locale:
local Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local humanoid = script.Parent:WaitForChild("Humanoid")local volumeDetector = Workspace.DialogueVolumelocal trigger = humanoid:WaitForChild("Animator")local debounce = falselocal localPlayer = Players.LocalPlayervolumeDetector.Touched:Connect(function(hit)if debounce thenreturnendlocal hitCharacter = hit:FindFirstAncestorWhichIsA("Model")local hitPlayer = Players:GetPlayerFromCharacter(hitCharacter)if hitPlayer ~= localPlayer thenreturnenddebounce = truelocal audioPlayer = Workspace.DialogueVolume.AudioPlayeraudioPlayer:Play()audioPlayer.Ended:Wait()debounce = falseend)Spiegazione del codiceQuesto script inizia ottenendo i servizi Workspace e Players in modo che possa fare riferimento ai loro figli e alla loro funzionalità.Per ogni personaggio giocatore che si carica o respawna nuovamente nell'esperienza, lo script attende:
- L'oggetto volume nell'area di lavoro chiamata DialogueVolume .
Quando qualcosa si scontra con il volume, la funzione del gestore eventi Touched ottiene il primo antenato che è un Model , che dovrebbe essere il personaggio se il BasePart che si è scontrato con il volume è un discendente di un modello di personaggio.Se lo è, la funzione quindi:
- Imposta il debounce a true .
- Gioca e aspetta che l'audio Terminare.
- Imposta il debounce di nuovo a false .
Impostare il debounce da false a true a false di nuovo dopo che l'audio finisce di suonare è un modello di debounce che impedisce all'audio di essere ripetutamente attivato come i giocatori continuano a scontrarsi con il volume.Per ulteriori informazioni su questo modello di debounce, vedi Rilevamento delle collisioni .
Prova l'esperienza per sentire il dialogo del personaggio istruttivo quando il tuo personaggio del giocatore tocca il volume intorno all' pupazzo di neve.