Os jogadores podem agora aproximar-se de uma personagem num jogo Unity e falar com ela em voz alta. O novo SDK (kit de desenvolvimento de software) ElevenAgents para Unity liga uma cena a um agente de voz ElevenLabs, que ouve o jogador através do microfone, faz ouvir a sua voz e gere a sessão através da Conversation API. O mesmo código funciona no editor Unity, nas versões desktop e em WebGL, ou seja, num navegador, enquanto as versões iOS, Android e XR estão em beta.
Iniciar uma conversa
Uma sessão requer o identificador de um agente criado no painel de controlo do ElevenLabs, que contém o prompt, ou seja, as instruções dadas ao agente, bem como a voz. No exemplo GettingStarted, fornecido com o SDK, uma zona de deteção invisível colocada à volta da personagem abre a sessão quando o jogador entra e fecha-a quando sai. O método StartSessionAsync só retorna o controlo uma vez que a ligação está aberta e os dispositivos de áudio estão prontos, e escolhe o modo de transporte adequado à plataforma de destino. EndSession não faz nada se a sessão já tiver terminado.
Personagens que falam, ouvem e agem
Por predefinição, a voz do agente é transmitida em 2D. Ao passar o seu próprio AudioSource, o componente de áudio do Unity, como OutputAudioSource, a voz provém da própria personagem. O método GetOutputVolume() devolve o nível sonoro atual do agente, entre 0 e 1, em todas as plataformas. O exemplo usa-o para fazer um cubo saltar enquanto fala, e o mesmo princípio pode controlar uma animação de boca.
As variáveis dinâmicas preenchem espaços como {{mood}} no prompt e na primeira mensagem do agente, de modo que cada personagem pode enviar os seus próprios valores no início da sua sessão. Estes valores podem ser cadeias de caracteres, números ou booleanos. No exemplo, um cubo amarelo e um cubo vermelho, cujos humores diferem, partilham o mesmo agente. Para alterações mais significativas, os Overrides substituem uma parte da configuração do agente para uma sessão, como a primeira mensagem ou a voz. Cada um deve ser previamente ativado nas definições de segurança do agente.
O método SendContextualUpdate informa o agente sobre eventos do jogo durante uma conversa, sem o interromper nem adicionar uma vez de fala que o jogador não pronunciou. As ferramentas de cliente, por sua vez, permitem que o agente dispare código do jogo. A ferramenta é definida nas configurações do agente, depois um gestor com o mesmo nome é registado no jogo. O SDK desserializa os parâmetros com Newtonsoft Json e devolve ao agente o que o gestor retorna. Este último pode devolver um Awaitable para tarefas longas, e lançar uma ClientToolException para explicar porque é que uma ação falhou.
Eventos como UserTranscriptReceived, AgentResponded, ModeChanged ou Interrupted são acionados na thread principal do Unity, o que permite atualizar a interface diretamente. SendUserMessage permite enviar texto, SetMicMuted corta o microfone e SetVolume ajusta o volume. A mudança de dispositivo de entrada ou de saída durante a sessão também é possível.
Plataformas e primeiros passos
Em iOS e Android, o jogador deve autorizar o acesso ao microfone antes do início de uma sessão. Em WebGL, a opção Use WebAssembly.Table deve estar ativada nas Publishing Settings, caso contrário o SDK faz falhar a compilação com instruções. O modo Play não funciona quando o WebGL é o alvo ativo, pelo que é necessário testar num alvo desktop. A voz passa então pela Web Audio API, e alguns ajustes de AudioSource, como o encaminhamento por mixer ou o efeito doppler, não são considerados. As sessões WebRTC ignoram OutputAudioSource.
Para um primeiro teste, basta criar um agente, desativar a Authentication nas suas definições de segurança, depois instalar o pacote a partir do URL Git indicado na documentação, fixando a versão v0.1.0. Resta importar o exemplo GettingStarted, colar o identificador do agente e iniciar o jogo. Antes de qualquer implementação em produção, a Authentication deve ser reativada: o servidor do programador solicita então um URL assinado de curta duração, transmitido ao jogo com o nome SignedUrl. A chave de API ElevenLabs nunca deve figurar numa build. O tutorial dura cerca de 10 minutos e termina com um cubo a cumprimentar o jogador. Os bugs e pedidos de funcionalidades devem ser reportados nas GitHub issues do projeto.
