Apresentamos o Eleven v4Conheça o Eleven v4, nosso modelo mais expressivo até agora.

Pular para o conteúdo

Dê voz aos NPCs do seu jogo Unity com o ElevenAgents

Escrito por
Tadas Petra
Publicado
Última atualização

OuvirOuça este artigo

Agora, os jogadores podem se aproximar de um personagem no seu jogo Unity e falar com ele em voz alta. O novo SDK do ElevenAgents para Unity conecta uma cena a um agente de voz da ElevenLabs. Ele escuta pelo microfone do jogador, reproduz a voz do agente por meio de um AudioSource e executa a sessão pela API Conversation.

O mesmo código funciona no Editor, em builds para desktop e no WebGL, enquanto iOS, Android e XR estão em beta.

Inicie uma conversa

Uma sessão precisa do ID de um agente que você criou no painel da ElevenLabs, que contém o prompt e a voz. No nosso exemplo GettingStarted, incluído no SDK, um collider de gatilho ao redor do personagem abre a sessão quando o jogador entra e a encerra quando ele sai:

private Conversation activeConversation;

private void OnTriggerEnter(Collider other) => _ = StartTalkingAsync();
private void OnTriggerExit(Collider other) => _ = StopTalkingAsync();

private async Awaitable StartTalkingAsync()
{
    var options = new ConversationOptions { AgentId = agentId };
    activeConversation = await Conversation.StartSessionAsync(options);
}

private async Awaitable StopTalkingAsync()
{
    if (activeConversation == null)
        return;
    await activeConversation.EndSession();
    activeConversation = null;
}

StartSessionAsync retorna quando a conexão está aberta e os dispositivos de áudio estão prontos, além de escolher o transporte adequado para o destino do build. EndSession não faz nada se a sessão já tiver sido encerrada.

O que vem no SDK

Vozes que vêm do personagem

Por padrão, a voz do agente é reproduzida em 2D. Passe seu próprio AudioSource como OutputAudioSource e a voz virá do personagem.

GetOutputVolume() retorna o nível atual do agente, de 0 a 1, em todas as plataformas. O exemplo o usa para fazer o cubo subir e descer enquanto fala, e ele também pode controlar uma animação da boca.

Um agente, muitos personagens

As variáveis dinâmicas preenchem espaços reservados como {{mood}} no prompt e na primeira mensagem do agente, para que cada personagem possa enviar seus próprios valores quando a sessão começar. Os valores podem ser strings, números ou booleanos. No exemplo, um cubo amarelo e feliz e um cubo vermelho e irritado compartilham um agente:

var options = new ConversationOptions
{
    AgentId = agentId,
    OutputAudioSource = audioSource,
    DynamicVariables = new Dictionary<string, object>
    {
        ["color"] = "red",
        ["mood"] = "angry",
    },
};

Para alterações maiores, Overrides substituem parte da configuração do agente em uma sessão, como a primeira mensagem ou a voz. Primeiro, cada substituição precisa ser ativada nas configurações de Segurança do agente.

Personagens que sabem o que está acontecendo

SendContextualUpdate informa o agente sobre eventos do jogo durante a conversa, sem interrompê-lo nem adicionar uma fala que o jogador não disse:

activeConversation.SendContextualUpdate("The player picked up the cellar key.");

Personagens que agem no jogo

As ferramentas do cliente permitem que o agente acione código do jogo. Defina a ferramenta nas configurações do agente e registre um manipulador com o mesmo nome:

activeConversation.RegisterTool<OpenDoorParams, string>("open_door", parameters =>
{
    DoorRegistry.Open(parameters.DoorId);
    return $"Door {parameters.DoorId} is open.";
});

O SDK desserializa os parâmetros da ferramenta com Newtonsoft Json e envia ao agente o que o manipulador retornar. Os manipuladores podem retornar um Awaitable para tarefas que levam tempo e lançar uma ClientToolException para informar ao agente por que algo falhou.

Eventos e controles

Eventos como UserTranscriptReceived, AgentResponded, ModeChanged e Interrupted são disparados na thread principal do Unity, para que você possa atualizar a interface diretamente a partir deles. Os métodos abrangem entrada de texto com SendUserMessage, silenciamento com SetMicMuted, SetVolume, dados de frequência para visualizadores e troca de dispositivos de entrada ou saída durante a sessão. A documentação do SDK para Unity lista todos eles.

Suporte a plataformas

O SDK escolhe o transporte para cada destino.

Platform
Status
Transport
Editor and desktop (macOS, Windows, Linux)
Supported
WebSocket
WebGL
Supported
WebSocket or WebRTC
iOS, Android, XR
Beta
WebSocket
  • iOS e Android: solicite permissão para usar o microfone antes de iniciar uma sessão.
  • WebGL: ative Use WebAssembly.Table em Publishing Settings. Se estiver desativado, o SDK falhará o build com instruções. O Play Mode não funciona enquanto o WebGL for o destino de build ativo, então teste em um destino para desktop.
  • Áudio no WebGL: a voz é reproduzida pela Web Audio API, portanto algumas configurações de AudioSource, como roteamento do mixer e doppler, não são mantidas. As sessões WebRTC ignoram OutputAudioSource.

As notas de compatibilidade trazem a lista completa.

Comece agora

  1. Crie um agente no painel da ElevenLabs. Para um primeiro teste, desative a Autenticação nas configurações de Segurança, para que o jogo possa se conectar apenas com o ID do agente.
  2. No Unity, abra Window > Package Manager > + > Install package from git URL e fixe a versão: https://github.com/elevenlabs/unity.git#v0.1.0
  3. Importe o exemplo GettingStarted, cole o ID do seu agente e pressione Play.

Aviso: antes de lançar seu jogo, ative a Autenticação novamente. Seu próprio servidor solicitará uma URL assinada de curta duração, e o jogo a passará como SignedUrl em vez de AgentId. Nunca inclua sua chave de API da ElevenLabs em um build do jogo.

O guia de introdução leva cerca de 10 minutos e termina com um cubo que cumprimenta você quando você se aproxima. Para todo o restante, leia a documentação do SDK para Unity e envie bugs e solicitações de recursos para as issues do GitHub.

Escrito por

Tadas é engenheiro de Relações com Desenvolvedores e ajuda desenvolvedores a criar com o conjunto de produtos da ElevenLabs. Antes, foi fundador de uma plataforma de educação para desenvolvedores, Lead Developer Advocate na Agora, instrutor na Zero To Mastery e criou uma audiência no YouTube ensinando desenvolvedores.

Artigos relacionados

Crie com o áudio de IA da mais alta qualidade