I giocatori possono ora avvicinarsi a un personaggio in un gioco Unity e parlargli a voce alta. Il nuovo SDK (kit di sviluppo software) ElevenAgents per Unity collega una scena a un agente vocale ElevenLabs, che ascolta il giocatore tramite microfono, fa sentire la sua voce e gestisce la sessione tramite la Conversation API. Lo stesso codice funziona nell’editor Unity, sulle versioni desktop e in WebGL, cioè in un browser, mentre le versioni iOS, Android e XR sono in beta.
Avviare una conversazione
Una sessione richiede l’identificativo di un agente creato nella dashboard di ElevenLabs, che contiene il prompt, cioè le istruzioni date all’agente, nonché la voce. Nell’esempio GettingStarted, fornito con l’SDK, una zona di rilevamento invisibile posizionata attorno al personaggio apre la sessione quando il giocatore entra e la chiude quando esce. Il metodo StartSessionAsync non restituisce il controllo fino a quando la connessione non è aperta e i dispositivi audio sono pronti, e sceglie la modalità di trasporto adatta alla piattaforma di destinazione. EndSession non fa nulla se la sessione è già terminata.
Personaggi che parlano, ascoltano e agiscono
Per impostazione predefinita, la voce dell’agente viene riprodotta in 2D. Passando il proprio AudioSource, il componente audio di Unity, come OutputAudioSource, la voce proviene dal personaggio stesso. Il metodo GetOutputVolume() restituisce il livello sonoro attuale dell’agente, tra 0 e 1, su tutte le piattaforme. L’esempio lo utilizza per far rimbalzare un cubo mentre parla, e lo stesso principio può pilotare un’animazione della bocca.
Le variabili dinamiche riempiono spazi segnaposto come {{mood}} nel prompt e nel primo messaggio dell’agente, in modo che ogni personaggio possa inviare i propri valori all’inizio della sua sessione. Questi valori possono essere stringhe, numeri o booleani. Nell’esempio, un cubo giallo e uno rosso, con umori diversi, condividono lo stesso agente. Per cambiamenti più significativi, gli Overrides sostituiscono parte della configurazione dell’agente per una sessione, come il primo messaggio o la voce. Ciascuno deve essere preventivamente attivato nelle impostazioni di sicurezza dell’agente.
Il metodo SendContextualUpdate informa l’agente degli eventi del gioco durante una conversazione, senza interromperlo né aggiungere un turno di parola che il giocatore non ha pronunciato. Gli strumenti client, invece, permettono all’agente di attivare codice del gioco. Lo strumento viene definito nelle impostazioni dell’agente, quindi un gestore con lo stesso nome viene registrato nel gioco. L’SDK deserializza i parametri con Newtonsoft Json e restituisce all’agente ciò che il gestore restituisce. Quest’ultimo può restituire un Awaitable per le attività lunghe, e sollevare una ClientToolException per spiegare perché un’azione è fallita.
Eventi come UserTranscriptReceived, AgentResponded, ModeChanged o Interrupted vengono attivati sul thread principale di Unity, il che permette di aggiornare l’interfaccia direttamente. SendUserMessage permette di inviare testo, SetMicMuted di disattivare il microfono e SetVolume di regolare il volume. Il cambio di dispositivo di input o di output durante la sessione è anch’esso possibile.
Piattaforme e primi passi
Su iOS e Android, il giocatore deve autorizzare l’accesso al microfono prima dell’avvio di una sessione. In WebGL, l’opzione Use WebAssembly.Table deve essere attivata nelle Publishing Settings, altrimenti l’SDK fa fallire la compilazione con delle istruzioni. La modalità Play non funziona quando WebGL è il target attivo, quindi è necessario testare su un target desktop. La voce passa quindi attraverso la Web Audio API, e alcune impostazioni di AudioSource, come il routing tramite mixer o l’effetto doppler, non vengono prese in considerazione. Le sessioni WebRTC ignorano OutputAudioSource.
Per un primo test, basta creare un agente, disattivare l’Authentication nelle sue impostazioni di sicurezza, quindi installare il pacchetto dall’URL Git indicato nella documentazione, fissando la versione v0.1.0. Resta da importare l’esempio GettingStarted, incollarvi l’identificativo dell’agente e avviare il gioco. Prima di qualsiasi messa in produzione, l’Authentication deve essere riattivata: il server dello sviluppatore richiede allora un URL firmato di breve durata, trasmesso al gioco con il nome SignedUrl. La chiave API ElevenLabs non deve mai apparire in un build. Il tutorial dura circa 10 minuti e termina con un cubo che saluta il giocatore. I bug e le richieste di funzionalità vanno segnalati nelle GitHub issues del progetto.
