Audio 3D è suono direzionale che emette da una posizione particolare nello spazio 3D, aumentando o diminuendo in 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.
Utilizzando il file Gingerbread House - Start .rbxl come punto di partenza e Gingerbread House - Complete Audio come riferimento, questo tutorial ti mostra come aggiungere sia audio 3D in loop che audio one shot alle tue esperienze, inclusa la guida su:
- Suoni ambientali in loop che si attivano non appena i giocatori si connettono al server.
- Attivare audio per informare i giocatori su eventi situazionali chiave che sono importanti per il loro gameplay.
- Attivare audio per fornire feedback uditivo ai giocatori quando interagiscono con oggetti 3D.
- Riprodurre suoni dei personaggi che coinvolgono e guidano i giocatori verso punti di interesse all'interno del loro ambiente.
Se in qualsiasi momento ti trovi bloccato nel processo, puoi utilizzare Gingerbread House - Complete Audio come riferimento per confrontare i tuoi progressi.
Oggetti audio
Per creare audio direzionale, è importante comprendere gli oggetti audio con cui lavorerai durante questo tutorial. Ci sono sei tipi principali di oggetti audio per audio 3D:
- L'oggetto AudioPlayer carica e riproduce il file audio.
- L'oggetto AudioEmitter è un altoparlante virtuale che emette audio nell'ambiente 3D.
- L'oggetto AudioListener è un microfono virtuale che raccoglie audio dall'ambiente 3D.
- L'oggetto AudioDeviceOutput è un dispositivo hardware fisico nel mondo reale, come un altoparlante o delle cuffie.
- L'oggetto AudioDeviceInput è un microfono fisico nel mondo reale.
- Wires trasportano flussi audio da un oggetto all'altro.
Tutti questi oggetti audio lavorano insieme per emettere suono proprio come i loro omologhi nel mondo reale. Diamo un'occhiata a come funziona questo in pratica utilizzando un esempio di un giocatore che indossa un auricolare mentre gioca con il proprio laptop:
- Il AudioPlayer carica l'ID dell'asset audio 1516791621 nell'esperienza per una traccia di pioggia.
- Il AudioEmitter emette un flusso di audio della traccia di pioggia nell'ambiente 3D.
- Un Wire trasporta il flusso dal AudioPlayer all'AudioEmitter in modo che il flusso esca dall'altoparlante 3D.
- L'oggetto AudioListener figlio del personaggio ascolta quel suono nell'ambiente 3D e lo restituisce alle loro cuffie.
- L'oggetto AudioDeviceOutput porta il suono dall'AudioListener all'altoparlante fisico del giocatore, o in questo caso, alle loro cuffie.
- L'oggetto AudioDeviceInput cattura il suono dal mondo reale e lo restituisce nell'esperienza per la chat vocale.


Le sezioni seguenti approfondiscono e fanno riferimento a questi oggetti mentre impari a riprodurre sia audio 3D in loop che audio one shot. Mentre esamini questi oggetti con le tecniche imminenti, puoi prevedere più accuratamente come catturare e restituire il suono dall'esperienza al giocatore e viceversa.
Audio in loop
Audio 3D in loop, o audio direzionale che si ripete senza soluzione di continuità non appena i giocatori si connettono al server, è una tecnica comune di design del suono per migliorare l'atmosfera dello spazio 3D facendolo sembrare vivo e dinamico. Inoltre, l'audio 3D in loop mantiene le sorgenti sonore ambientali coerenti, come la staticità di un televisore o il ruggito di una cascata; se questi suoni dovessero fermarsi all'improvviso, l'ambiente apparirebbe irrealistico.
Per dimostrare questo concetto, esamina come il seguente audio 3D per due grandi cascate si interrompe non appena la traccia audio non in loop è completa. Mentre i suoni dell'acqua immergono inizialmente i giocatori nell'ambiente esterno, il cambiamento uditivo improvviso è scioccante e innaturale rispetto a come si comporta una cascata nel mondo reale.
Allo stesso modo, il campione utilizza questa tecnica per la cascata di cioccolato che scorre e regola il volume in base alla distanza del giocatore dall'emittente audio. Quando il giocatore si trova a meno di 20 studs di distanza, l'emittente riproduce il suono a volume massimo. Man mano che il giocatore si allontana, l'audio dell'acqua diminuisce di volume ogni 20 studs di distanza dall'emittente audio. Questo emula il suono del mondo reale che diminuisce di volume man mano che ci si allontana dalla sorgente.
Per ricreare l'audio 3D in loop nel file di esempio Gingerbread House - Complete Audio:
Abilita un ascoltatore predefinito allegato al tuo personaggio giocatore.
- Nella finestra Explorer, seleziona SoundService.
- Nella finestra Properties, imposta DefaultListenerLocation su Character. Quando esegui l'esperienza, il motore crea automaticamente:
- Un AudioListener sotto la Humanoid.RootPart di ogni personaggio giocatore affinché tu possa sentire i suoni spostarsi nei tuoi altoparlanti reali in base alla posizione e alla scala delle sorgenti sonore all'interno dell'esperienza.
- Un AudioDeviceOutput sotto SoundService.
Nella finestra Explorer, naviga a Workspace ⟩ WaterfallAudioObject, poi:
- Inserisci un oggetto AudioPlayer per creare una sorgente audio per la cascata.
- Inserisci un oggetto AudioEmitter per emettere un flusso posizionale da WaterfallAudioObject.
- Inserisci un oggetto Wire per trasportare il flusso dall'audio player all'audio emitter.

Seleziona l'AudioPlayer, poi nella finestra Properties,
- Imposta AssetID su rbxassetid://1516791621 per riprodurre una traccia audio di pioggia.
- Abilita Looping in modo che l'audio si ripeta senza soluzione di continuità.
Seleziona l'AudioEmitter, poi nella finestra Properties, imposta DistanceAttenuation su {0: 1}, {20: 0.8}, {40: 0.4}, {80: 0} in modo che il suono diminuisca progressivamente di volume ogni 20 studs di distanza dall'emittente audio.
Seleziona il Wire, poi nella finestra Properties,
- Imposta SourceInstance sul tuo nuovo AudioPlayer per specificare che desideri che il filo trasporti audio da questo specifico audio player.
- Imposta TargetInstance sul tuo nuovo AudioEmitter per specificare che desideri che il filo trasporti audio a questo specifico audio emitter all'interno della cascata.
Tornando alla finestra Explorer, inserisci uno Script in WaterfallAudioObject, rinominalo LoopWaterfallMusic, imposta la sua proprietà RunContext su Client, poi incolla il seguente codice nello script:
local audioPlayer = script.ParentaudioPlayer:Play()Spiegazione del codiceLo script inizia dichiarando una variabile per rappresentare il genitore dello script AudioPlayer. Lo script quindi imposta la sorgente audio per riprodurre a partire dal momento in cui il giocatore si unisce all'esperienza fino a quando non esce dall'esperienza.
Esegui il test dell'esperienza per ascoltare 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 nei tuoi altoparlanti reali in base alla posizione dell'emittente nello spazio 3D.
Audio one shot
Audio 3D one shot, o audio direzionale che viene riprodotto una sola volta in un momento e in una posizione specifica a meno che un giocatore non lo attivi di nuovo, fornisce ai giocatori un contesto sulle loro azioni, sull'ambiente e su qualsiasi personaggio attorno a loro. Utilizzare questo tipo di feedback uditivo nelle tue esperienze è essenziale perché consente ai giocatori di prendere decisioni strategiche, come evitare nemici in arrivo o raccogliere oggetti utili.
Le sezioni seguenti forniscono dettagli sull'implementazione per scenari di gioco comuni in cui i giocatori hanno bisogno di un feedback direzionale tempestivo, inclusi eventi di gioco situazionali, interazione con oggetti e dialogo dei personaggi non giocanti.
Feedback degli eventi
Quando i giocatori attivano eventi situazionali chiave all'interno del loro ambiente, come sbloccare nuove aree di gioco o attivare il fuoco nemico, è essenziale che capiscano dove nello spazio 3D devono indirizzare il loro focus e attenzione. Se non ricevono un feedback uditivo immediato, potrebbero perdere informazioni importanti per il loro gameplay, portando a frustrazione per non sapere dove andare o cosa fare dopo.
Per dimostrare perché questo è importante, rivediamo l'audio 3D one shot dal modello Laser Tag che viene riprodotto da ogni blaster del giocatore:
- Un suono profondo di esplosione si riproduce per ogni colpo che il giocatore spara dal proprio blaster.
- Un suono di clic e un beep robotico si riproducono ogni volta che il giocatore ricarica il proprio blaster con un nuovo colpo.
Entrambi questi suoni forniscono consapevolezza situazionale avvertendo tutti i giocatori vicini sulla direzione da cui provengono i colpi in modo che possano prendere decisioni informate per unirsi al divertimento o evitare potenziali pericoli.
Il campione utilizza questa stessa tecnica per fornire ai giocatori consapevolezza situazionale riguardo alla loro ricompensa per aver completato l'obiettivo principale all'interno dell'esperienza. Dopo aver raccolto tutti e tre i gomitoli, la porta della casa di pan di zenzero si apre per consentire ai giocatori di accedere al regalo all'interno.
Poiché non c'è un ordine specifico in cui i giocatori devono raccogliere i gomitoli, è importante che i giocatori siano a conoscenza dell'apertura della porta indipendentemente da quale gomitolo raccolgono per ultimo. Il suono posizionale rende tutto questo possibile affinché i giocatori siano consapevoli del loro successo e di dove devono andare successivamente, indipendentemente dalla loro distanza e direzione relativa dalla porta.
Per ricreare il feedback audio 3D one shot negli eventi nel file di esempio Gingerbread House - Complete Audio:
Nella finestra Explorer, vai a Workspace ⟩ Door, poi:
- Inserisci un oggetto AudioPlayer per creare una sorgente audio per il volume.
- Inserisci un oggetto AudioEmitter per emettere un flusso posizionale da Door.
- Inserisci un oggetto Wire per trasportare il flusso dall'audio player all'audio emitter.

Seleziona l'AudioPlayer, poi nella finestra Properties, imposta AssetID su rbxassetid://5930776613 per riprodurre una traccia audio di una porta di metallo scorrevole.
Seleziona il Wire, poi nella finestra Properties,
- Imposta SourceInstance sul tuo nuovo AudioPlayer per specificare che desideri che il filo trasporti audio da questo specifico audio player.
- Imposta TargetInstance sul tuo nuovo AudioEmitter per specificare che desideri che il filo trasporti audio a questo specifico audio emitter all'interno del volume.
Tornando alla finestra Explorer, vai a ServerScriptService, poi inserisci uno Script, rinominalo GumdropService, imposta la sua proprietà RunContext su Server, poi incolla il seguente codice nello 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 dei gomitolilocal newGumdropAmount = PlayerData.updateValue(player, GUMDROP_KEY_NAME, updateFunction)-- Aggiorna la leaderboard dei gomitoliLeaderboard.setStat(player, GUMDROP_KEY_NAME, newGumdropAmount)-- Controlla se il giocatore ha raccolto tre gomitoliif newGumdropAmount >= 3 then-- Riproduci l'audio dell'evento della porta quando il giocatore raccoglie tre gomitolilocal audioPlayer = Workspace.Door.AudioPlayeraudioPlayer:Play()-- Anima 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 la funzione di gestione dell'eventolocal function onGumdropTouched(otherPart, gumdrop)if gumdrop:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Il giocatore ha toccato un gomitololocal audioPlayer = gumdrop.AudioPlayeraudioPlayer:Play()gumdrop.Transparency = 1gumdrop:SetAttribute("Enabled", false)updatePlayerGumdrops(player, function(oldGumdropAmount)oldGumdropAmount = oldGumdropAmount or 0return oldGumdropAmount + GUMDROP_AMOUNT_TO_ADDend)print("Il giocatore ha raccolto un gomitolo")endendend-- Imposta i listener per gli eventifor _, gumdrop in gumdrops dogumdrop:SetAttribute("Enabled", true)gumdrop.Touched:Connect(function(otherPart)onGumdropTouched(otherPart, gumdrop)end)endSpiegazione del codiceLo script inizia inizializzando i servizi Workspace, Players, ServerStorage, e TweenService in modo da poter fare riferimento ai loro figli e funzionalità. Quindi, richiede i moduli Leaderboard e PlayerData in ServerStorage ; questi moduli sono responsabili della creazione e dell'aggiornamento di una leaderboard nell'angolo in alto a destra dello schermo che tiene traccia della quantità di gomitoli che un giocatore raccoglie nell'ambiente.
La funzione updatePlayerGumdrops dello script è dove avviene gran parte del lavoro per attivare l'audio 3D per il feedback degli eventi, e prende due argomenti:
- player - Un giocatore che raccoglie un gomitolo.
- updateFunction - Una funzione di callback che aggiorna la quantità di gomitoli raccolti dal giocatore.
Quando un giocatore collide con un gomitolo, lo script:
- Ottiene il nuovo valore della quantità di gomitoli raccolti dal giocatore chiamando la funzione PlayerData.updateValue.
- Aggiorna la leaderboard con questo nuovo importo chiamando la funzione Leaderboard.setStat.
- Controlla se la quantità è maggiore o uguale a 3.
Quando questo valore è maggiore o uguale a 3, lo script:
- Riproduce la traccia audio 3D dall'audio player all'audio emitter.
- Muove la porta linearmente 15 studs sotto la sua posizione attuale.
Il resto dello script è in gran parte responsabile di rilevare qualsiasi cosa che collide con il gomitolo sia un giocatore in modo che possa attivare un suono non posizionale per il feedback di raccolta. Per ulteriori informazioni su questa parte dello script, consulta Aggiungi audio 2D - Feedback di gameplay.
Esegui il test dell'esperienza per ascoltare il suono della porta scorrevole dopo aver raccolto tutti e tre i gomitoli nell'ambiente. Quando ruoti la camera, il suono si sposta dinamicamente nei tuoi altoparlanti reali in modo che tu lo senta in base alla posizione dell'emittente nello spazio 3D.
Interazione con gli oggetti
Quando i giocatori interagiscono con oggetti 3D all'interno del loro ambiente, come accendere un interruttore della luce o raccogliere un'arma, è importante fornire un feedback istantaneo affinché comprendano intuitivamente come stanno interagendo con l'oggetto. L'abbinamento di feedback visivo e uditivo rafforza la relazione di causa ed effetto tra le azioni del giocatore e la risposta ambientale.
Per espandere questo concetto, rivediamo il seguente audio 3D one shot dal campione Plant per il flusso di utenti di giardinaggio di un cavolo:
- Un suono delicato di scintillio viene riprodotto quando il giocatore pianta un seme.
- Un suono di splash bagnato viene riprodotto quando il giocatore annaffia la propria pianta in crescita.
- Un suono di clic viene riprodotto quando il giocatore raccoglie la pianta completamente cresciuta.
- Un suono morbido di colpo viene riprodotto quando il giocatore mette il cavolo nel carro.
Tutti questi suoni rafforzano la richiesta di prossimità delle interazioni chiave del giocatore con l'oggetto che cambiano forma nello spazio 3D. Per i giocatori con disabilità visive in cui i cambiamenti di colore o le animazioni sono più difficili da decifrare da soli, fornire queste più forme di feedback sensoriale aiuta le tue interazioni con oggetti 3D a rimanere accessibili e intuitive per quanti più giocatori possibile.
Per dare un altro esempio di come puoi configurare l'interazione con gli oggetti con più forme di feedback sensoriale, il campione fornisce sia feedback visivo che uditivo ogni volta che i giocatori calpestano il pulsante 3D alla menta 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 calpestano il pulsante, il campione:
- Riproduce una traccia audio di jingle celebrativo.
- Tinge i lati del pulsante con una sfumatura verde.
- Muove il pulsante nel terreno.
Da qui, puoi collegare questa interazione a tutti i tipi di azioni di gioco uniche, come sbloccare un elemento o attivare un'abilità speciale.


Per ricreare l'audio 3D one shot per l'interazione con oggetti nel file di esempio Gingerbread House - Complete Audio:
Nella finestra Explorer, vai a Workspace ⟩ 3DAudioButton, poi:
- Inserisci un oggetto AudioPlayer per creare una sorgente audio per il pulsante.
- Inserisci un oggetto AudioEmitter per emettere un flusso posizionale da 3DAudioButton.
- Inserisci un oggetto Wire per trasportare il flusso dall'audio player all'audio emitter.

Seleziona l'AudioPlayer, poi nella finestra Properties, imposta AssetID su rbxassetid://1846248593 per riprodurre una traccia audio allegra e festosa.
Seleziona il Wire, poi nella finestra Properties,
- Imposta SourceInstance sul tuo nuovo AudioPlayer per specificare che desideri che il filo trasporti audio da questo specifico audio player.
- Imposta TargetInstance sul tuo nuovo AudioEmitter per specificare che desideri che il filo trasporti audio a questo specifico audio emitter all'interno del pulsante.
Tornando alla finestra Explorer, inserisci uno Script in 3DAudioButton, rinominalo PlayAudioWhenPressed, poi incolla il seguente codice nello 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 = {-- Premuto[true] = TweenService:Create(buttonPart, tweenInfo, {Size = buttonPart.Size / Vector3.new(2, 1, 1),Color = Color3.fromRGB(75, 151, 75),}),-- Predefinito[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 affinché possa animare la parte del pulsante che sporge dal terreno.
- Il modello genitore dello script 3DAudioButton.
- La parte del pulsante che sporge dal terreno.
- L'audio player rilevante con la traccia audio di celebrazione.
Lo script definisce quindi:
- Un oggetto TweenInfo che specifica che l'animazione del pulsante verrà eseguita con uno stile di animazione esponenziale.
- Due tween che rappresentano lo stato premuto o non premuto del pulsante.
- Lo stato premuto true muove il pulsante leggermente verso il basso nel terreno e tinge i lati della parte con una sfumatura verde.
- Lo stato non premuto false riporta il pulsante alla sua posizione originale e rimuove la sfumatura precedente.
Il resto dello script è dove avviene gran parte del lavoro per il feedback delle interazioni degli oggetti, quindi esaminiamo come la funzione onIsPlayingChanged e i listener degli eventi lavorano insieme:
- buttonPart.Touched ascolta un giocatore toccare il pulsante, quindi chiama la funzione Play() per iniziare a riprodurre l'audio associato dall'audio player. Questo processo cambia la proprietà AudioPlayer.IsPlaying da false a true.
- buttonPressedAudioPlayer:GetPropertyChangedSignal("IsPlaying") ascolta il cambiamento della proprietà IsPlaying dell'audio player, quindi chiama la funzione onIsPlayingChanged.
- La funzione onIsPlayingChanged utilizza queste informazioni per attivare il tween che cambia il suo aspetto visivo nello spazio 3D.
- Per impedire che il giocatore riavvii accidentalmente l'audio se saltasse rapidamente sul pulsante in rapida successione, buttonPressedAudioPlayer.Ended ascolta l'audio player terminare la riproduzione prima di chiamare nuovamente la funzione onIsPlayingChanged.
È importante notare che l'evento onIsPlayingChanged viene attivato solo quando cambia da false a true, il che significa che non si attiva quando cambia da true a false. Questo è un comportamento previsto a causa delle complicazioni con il timing nella replicazione delle proprietà dal server al client. Per questo motivo, l'evento Ended è fornito e ascoltato in questo esempio per coprire entrambi i casi.
Esegui il test dell'esperienza per ascoltare il suono di celebrazione quando il tuo personaggio giocatore tocca il pulsante 3D nella casa di pan di zenzero. Quando ti allontani dal pulsante, il volume del suono diminuisce.
Dialogo dei personaggi
Fornire audio direzionale dai tuoi personaggi non giocanti (NPC) è utile per guidare i giocatori verso punti di interesse all'interno del loro ambiente e aggiungere profondità alle loro interazioni con altri personaggi. Infatti, nelle esperienze guidate da una narrativa, molti designer utilizzano strategicamente il dialogo dei personaggi per insegnare indirettamente ai giocatori riguardo il loro personaggio, i personaggi alleati e nemici, o il mondo stesso.
Esempi comuni di questa tecnica includono:
- Stile di dialogo per impostare il tono della tua esperienza.
- Banter per insegnare ai giocatori riguardo le relazioni tra i personaggi.
- Conversazioni tra nemici per confessare motivazioni o la loro posizione rispetto al giocatore.
- I personaggi giocanti che esprimono i loro pensieri ad alta voce per guidare dolcemente il giocatore su cosa dovrebbero fare dopo, come curarsi, muoversi in un'altra posizione o trovare un oggetto.
- I personaggi alleati che parlano con il personaggio giocante per rivelare dettagli sul mondo di esperienza come la sua storia, cultura e questioni sociali.
Per dimostrare come può apparire questo in pratica, rivediamo il seguente audio 3D one shot dalla demo Beyond the Dark che viene riprodotto periodicamente quando i giocatori si trovano nell'area principale della stazione spaziale.
Utilizzando la stazione spaziale come personaggio, questo clip di dialogo fornisce ai giocatori importanti contesti e lore sul setting complessivo. Ad esempio, da questa singola frase i giocatori apprendono:
- Si trovano nello spazio esterno, specificamente su una stazione spaziale chiamata Kerr-Newman Deep Space Relay 14.
- Il loro ambiente è futuristico e accogliente.
- Sono dei visitatori e probabilmente partiranno presto.
Questi dettagli insieme immergono i giocatori nel loro ambiente e aggiungono un senso di urgenza alla loro missione. Tuttavia, se i giocatori non sanno quale sia la loro missione principale, puoi anche utilizzare il dialogo dei personaggi per informare i giocatori su cosa vuoi che facciano all'interno della tua esperienza.
Per illustrare, il campione utilizza un volume, o regione invisibile all'interno dello spazio 3D, per attivare il dialogo dei personaggi dal pupazzo di neve per guidare i giocatori a raccogliere tre gomitoli per aprire la porta della sua casa. Essendo uno delle prime cose che i giocatori vedono all'ingresso dell'esperienza, è più probabile che attivino il dialogo e sappiano cosa devono fare per avere successo.

Per ricreare l'audio 3D one shot del dialogo dei personaggi nel file di esempio Gingerbread House - Complete Audio:
Nella finestra Explorer, vai a Workspace ⟩ DialogueVolume, poi:
- Inserisci un oggetto AudioPlayer per creare una sorgente audio per il volume.
- Inserisci un oggetto AudioEmitter per emettere un flusso posizionale da DialogueVolume.
- Inserisci un oggetto Wire per trasportare il flusso dall'audio player all'audio emitter.

Seleziona l'AudioPlayer, poi nella finestra Properties, imposta AssetID su rbxassetid://92917410841704 per riprodurre una traccia audio istruttiva per l'obiettivo dell'esperienza.
Seleziona il Wire, poi nella finestra Properties,
- Imposta SourceInstance sul tuo nuovo AudioPlayer per specificare che desideri che il filo trasporti audio da questo specifico audio player.
- Imposta TargetInstance sul tuo nuovo AudioEmitter per specificare che desideri che il filo trasporti audio a questo specifico audio emitter all'interno del volume.
Tornando alla finestra Explorer, vai a StarterPlayer ⟩ StarterCharacterScripts, inserisci uno LocalScript, rinominalo PlayAudioWhenInVolume, e incolla il seguente codice nello 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 da poter fare riferimento ai loro figli e funzionalità. Per ogni personaggio giocatore che si carica o rinasce all'interno dell'esperienza, lo script aspetta:
- L'oggetto volume nel workspace chiamato DialogueVolume.
Quando qualsiasi cosa collide con il volume, la funzione del gestore del Touched ottiene il primo antenato che è un Model, che dovrebbe essere il personaggio se il BasePart che è colliso con il volume è un discendente di un modello di personaggio. Se lo è, la funzione quindi:
- Imposta debounce su true.
- Riproduce e attende che l'audio finisca.
- Riporta debounce a false.
Impostare debounce da false a true a false di nuovo dopo che l'audio ha terminato di riprodursi è un modello di debounce che impedisce all'audio di attivarsi ripetutamente mentre i giocatori collidono continuamente con il volume. Per ulteriori informazioni su questo modello di debounce, consulta Debounce - Rileva collisioni.
Esegui il test dell'esperienza per ascoltare il dialogo istruttivo del personaggio quando il tuo personaggio giocante tocca il volume attorno al pupazzo di neve.