Echo Weaver: Construindo um metroidbrainia de loop temporal no Unity 6

Oct 8, 2026|8 Min
Fergus Baird
Fergus Baird - Unity Technologies
Senior Content Marketing Manager
Made with UnityGame design
Arte chave de Echo Weaver por Moonlight Kids e Akupara Games, Made with Unity. Uma imagem de desenho animado banhada em neon de uma figura de olhos brancos e cabelos brancos, do ombro para cima. Eles são flanqueados por vários personagens, incluindo (no sentido horário) um gato com uma pizza, uma pessoa de cabelo azul, um homem-lagarto, um inseto esquelético, uma velha com cabelo grisalho e óculos, uma figura mascarada e um alienígena com o cérebro exposto.

Esta página da Web foi automaticamente traduzida para sua conveniência. Não podemos garantir a precisão ou a confiabilidade do conteúdo traduzido. Se tiver dúvidas sobre a precisão do conteúdo traduzido, consulte a versão oficial em inglês da página da Web.

Echo Weaver, o metroidbrainia esperado de Moonlight Kids e Akupara Games, lança hoje no PC e consoles. Entrevistamos o designer de jogos Chris Sumsky e o programador Ankit Trivedi para falar sobre design com portões de conhecimento, arquitetura de reinicialização de loop e as lições que passariam a outras pequenas equipes que fazem jogos com Unity.

Quando o estúdio indie de três pessoas Moonlight Kids começou a trabalhar em Echo Weaver, eles pensaram que haviam encontrado uma brecha em um dos sistemas mais notórios do desenvolvimento de jogos: o estado de salvamento.

"Se alguém perder o save, você se torna o inimigo número um dela," diz Chris. A equipe havia tido dificuldades com erros de salvamento no seu estreia, o colecionador de criaturas O Selvagem no Coração, então a premissa de loop temporal para Echo Weaver parecia um sonho realizado: Nós estávamos tipo, sem salvação! Viagem no tempo! Tudo reinicia!

Claro, as coisas no desenvolvimento de jogos raramente são tão diretas. Echo Weaver transmite seu mundo interconectado sem telas de carregamento, o que significa que o jogo deve carregar e descarregar constantemente pedaços do mapa à medida que o jogador navega pelo mundo. Isso cria situações como: O jogador quebrou a parede de atalho neste loop? Eles falaram com aquele NPC? O mundo de Echo Weaver tem que manter algum nível de persistência, pelo menos até que o jogador acabe o tempo e o loop reinicie. "Então acabou que nós só tínhamos que salvar tudo de qualquer maneira", diz Chris. "Mas é menos prejudicial quando algo dá errado, porque o jogador sempre pode reiniciar o ciclo."

Echo Weaver

Um jogo de detetive de parkour espacial

Em Echo Weaver, não há portões de habilidade. O mundo está totalmente aberto desde o primeiro minuto de jogo, mas cabe ao jogador descobrir como explorá-lo completamente. "Nosso pitch interno foi 'detetive de parkour espacial'", diz Ankit.

"Imagine que você teria que fazer um jogo onde nada persistisse," diz Chris. "Todo senso de progresso que o jogador precisa sentir já está lá, está apenas enterrado sob camadas de segredos." Esta é a coisa grande e estranha que estamos fazendo com Echo Weaver. É a coisa mais legal para mim e o maior desafio, porque alguém pode tropeçar em qualquer habilidade a qualquer momento."

Durante as fases iniciais de desenvolvimento, a equipe posicionou o projeto como uma reação deliberada a The Wild at Heart. Na época, não tinha vendido bem – felizmente isso mudou mais tarde – e então estávamos tentando fazer tudo em oposição a esse projeto. "Pensamos em fazer algo um pouco mais escuro, um pouco mais difícil", diz Chris. "Claro, isso significava que estávamos indo contra o que sabíamos fazer bem – e rapidamente vimos o erro do nosso caminho!"

Echo Weaver | Moonlight Kids | Akupara Games

Muitos dos elementos herdados de Echo Weaver de The Wild at Heart são fundamentais para a identidade da Moonlight Kids como estúdio, desde o estilo desenhado à mão do cofundador e diretor criativo Justin Baldwin (“até as mesmas pinceladas e paletas”) até espaços grandes e interconectados repletos de segredos, e um compromisso com narrativas matizadas em gêneros onde isso nem sempre é o foco.

No lado técnico, a biblioteca de ferramentas internas da equipe também deu o salto de The Wild at Heart, incluindo o sistema de diálogo, a camada de interface FMOD, o código do controlador e de ícone de entrada dinâmica, e o tremor de tela.

Echo Weaver | Moonlight Kids | Akupara Games

Princípios de design centrais: O Tecelão lembra

Sem portões de habilidade e um mundo que reinicia a cada loop, Moonlight Kids precisava estabelecer regras sobre o que persiste entre as rodadas. Eles chegaram a uma solução narrativa que não quebraria a imersão: O personagem jogador, o Tecelão, retém suas memórias através dos loops. "Qualquer coisa que eles se lembrassem em seu próprio cérebro, nós somos permitidos a trazer para o loop." "Se o Tecelão vê, o jogador deve ver," explica Chris. "Isso não quebra a regra da metroidbrainia."

Esta decisão informa todo o jogo, desde a tela de progresso que rastreia o conhecimento que o jogador desbloqueou, até a apresentação do nível. Quando uma área oculta é revelada, a arte em primeiro plano desaparece. Durante os testes de jogabilidade, isso não era persistente entre os loops, mas a equipe descobriu que os jogadores continuavam esquecendo quais atalhos haviam descoberto, então fizeram uma concessão e desvaneceram permanentemente o primeiro plano nas áreas que os jogadores revisitariam com mais frequência.

Echo Weaver | Moonlight Kids | Unity

Design de nível sem atalhos permanentes

Escolher restringir o progresso usando o conhecimento do jogador em vez de atualizações específicas remove uma ferramenta importante do kit do designer de níveis padrão. Metroidvanias geralmente se apoiam em paredes de mão única e atalhos permanentes – quebrar uma parede abre aquele caminho para o resto do jogo. "Em um jogo de loop temporal como Echo Weaver, quando você quebra uma parede e reinicia o loop, essa parede simplesmente volta," diz Chris. "Isso não estava necessariamente na minha caixa de ferramentas."

A solução da equipe para este problema funciona em duas escalas. Dentro de um único loop – que pode rodar por vários minutos dependendo de quanto tempo o jogador acumulou – Chris conseguiu executar truques de design metroidvania tradicional, porque qualquer coisa contida em um loop pode render frutos naquele mesmo loop. A equipe projetou cada um dos ramos e áreas do jogo com esta restrição em mente.

Para atalhos maiores e mais complexos – “Pense no Santuário Firelink em Dark Souls,” diz Ankit – a única opção real é o ocultamento. Uma passagem pode ser escondida atrás de arte em primeiro plano em uma extremidade e posicionada em primeiro plano na outra, criando um segredo escondido à vista de todos. "Jogos como Tunic fazem isso muito bem com perspectiva," ele acrescenta.

Echo Weaver | Moonlight Kids | Akupara Games

Gerenciando o tempo do jogador

O relógio do Echo Weaver é seu sistema mais proeminente e é visível para o jogador o tempo todo. Cada ciclo começa com 1 minuto de tempo no relógio. Os jogadores podem procurar cristais de tempo para estendê-lo, ou podem sacrificar cristais para curar; encontrar o equilíbrio certo aqui é crucial para o sucesso.

Nas versões iniciais do jogo, o cronômetro diminuía segundo a segundo, mas os testadores odiavam isso. "Isso criou muito estresse", diz Chris. "Um dia nós pensamos, e se tirássemos o relógio?" Você não precisa realmente segundos – tudo o que você precisa saber são os minutos.”

O HUD final é uma linha de blocos de tempo, cada um representando um minuto – no jogo, eles são chamados de "sinos" porque NPCs dizendo coisas como, "Volte no minuto 8" quebraram a fantasia. Quase tudo no mundo é cuidadosamente cronometrado em torno desses compassos de um minuto. Os testadores responderam positivamente a este novo sistema e logo inventaram "Sequences de inicialização" – rotas de abertura altamente otimizadas que economizam grandes quantidades de tempo nos primeiros segundos de um loop.

Echo Weaver | Moonlight Kids | Akupara Games

Como o loop de tempo funciona

Então, o que acontece quando um loop de tempo reinicia em Echo Weaver? A arquitetura de Ankit divide o mundo do jogo em pedaços, cada um marcado com um script de pedaço, com um processo de construção personalizado que remove conteúdo caro com antecedência.

A camada pesada e imutável – toda a geometria do mundo e marcadores de transição – é incorporada às cenas e permanece carregada permanentemente. Uma cena leve de "essenciais" armazena o estado volátil: o gerenciador do jogo, o jogador e os dados específicos da execução. Em um reset, o jogo descarrega os chunks ativos, descarta completamente a cena essenciais e a recarrega, transmitindo de volta apenas os chunks necessários para a sequência de abertura do loop.

"Essa é uma grande maneira de mitigarmos o que persiste e o que não deveria – nós simplesmente jogamos fora e refazemos," diz Ankit. "É uma cena tão leve de qualquer maneira que estragar e refazer não é uma grande preocupação."

O estado específico da execução vive em um dicionário de memória com chaves de string; limpar esse dicionário faz parte do reset. Qualquer coisa que deva sobreviver entre os loops – a contagem de loops, as habilidades que viram, os personagens com quem falaram – é serializada para o disco. Cada objeto verifica sua própria chave quando seu bloco é transmitido, muitas vezes apenas lendo um booleano ou um inteiro.

A abordagem não tem sido completamente livre de bugs. Ankit descobriu que as portas de transição persistentes não estavam redefinindo completamente seu estado de interface entre os loops, então ele simplesmente parou de persisti-las. Agora, o componente interativo de cada porta é um clone que é reinstanciado a cada reinicialização. "Para talvez 20 objetos, não importa – não tem impacto no desempenho", ele explica.

Itens transportáveis como chaves apresentavam um problema mais sutil: um item que vive em um bloco pode ser levado para qualquer lugar no mundo do jogo, e a propriedade em nível de bloco significava que esses objetos estavam desaparecendo dos inventários dos jogadores ou sendo duplicados. Para corrigir isso, a equipe moveu os itens para a camada de cena persistente.

Ativos de ambiente em camadas do Echo Weaver no Editor

Otimizando um mundo detalhado, desenhado à mão

Como The Wild at Heart, Echo Weaver é denso com arte desenhada à mão personalizada – que, embora visualmente deslumbrante, pode ser caro de carregar e renderizar. A equipe implementou várias correções para maximizar o desempenho.

Compressão de ativos

A solução para o primeiro grande obstáculo de desempenho deles foi anticlimática. "Nenhum dos nossos Atlases tinha compressão," ri Ankit. Habilitar compressão reduziu tudo na memória para cerca de 1 GB.

Uma olhada nas animações do Weaver no Editor Unity

Carregando cena

Carregar o jogo apresentou um problema mais difícil. A instanciação ocorre no thread principal de forma síncrona, então os ativos decorativos são removidos dos chunks no tempo de compilação (com ManualOverrides para tamanho, rotação e configurações de sprite preservados) e reinstanciados de forma assíncrona, em lotes de alguns objetos por quadro. Combinado com um sistema de vizinhança que sempre mantém os blocos adjacentes carregados, o pop-in permanece fora de vista.

Agrupamento

Como a arte desenhada à mão de Justin evita padrões repetitivos, as oportunidades de agrupamento eram raras, então Ankit escreveu uma ferramenta que achata grupos de sprites em uma única imagem (e uma única chamada de desenho). Por exemplo, o céu em um dos biomas de Echo Weaver é construído com dezenas de plataformas quase idênticas; usando a ferramenta, eles o colapsaram em dois sprites compostos juntamente com um punhado de acentos únicos.

Iluminação

A configuração de iluminação inicial do Echo Weaver foi cara. Sprites originalmente carregavam até quatro tipos de luz diferentes cada (variantes de fundo, jogador, item e chão), e em um momento, 16 texturas de iluminação distintas estavam sendo renderizadas ao mesmo tempo. Consolidando seis camadas leves em três cortes que reduzem drasticamente, "e eu não acho que os visuais tenham sofrido por isso", diz Ankit.

Efeitos de água

Água veio da Unity Asset Store: Kit de Água 2D, rodando no Universal Render Pipeline. "Muito flexível, produz resultados muito bons", diz Ankit – mas cada corpo d'água renderiza a câmera, e o custo escala com o número de grupos de camadas refratando sob a superfície. A equipe consolidou as camadas subaquáticas, e a equipe interna de portabilidade da Akupara Games foi além para hardware de baixo custo, separando o efeito de perspectiva de entrada de superfície falsa do seu ajuste de refração para que dispositivos mais fracos mantenham o visual sem o redesenho.

Echo Weaver | Moonlight Kids | Akupara Games

Depuração

O Frame Debugger da Unity desempenhou um papel central em grande parte deste trabalho de otimização, permitindo que Ankit percorresse a chamada de desenho do quadro por chamada de desenho e visse exatamente onde o agrupamento estava falhando – e por quê. A partir daí, o trabalho era consolidar: unificar materiais, converter sprites soltos e verificar novamente até que o máximo possível do quadro fosse agrupado. "Você ainda pode ver que o agrupamento falha aqui e ali," ele diz, "Mas é muito menos do que era." O conselho de Ankit às outras equipes é simples: "comecem a usar o Frame Debugger livremente, imediatamente!"

Echo Weaver | Moonlight Kids | Akupara Games

De 2021 LTS para Unity 6

The Wild at Heart foi lançado no Unity 2021; Echo Weaver será lançado no Unity 6, travado em uma versão pouco antes do lançamento. Perguntado o que mudou dia a dia entre as versões, Chris não hesitou: "Prefabs Aninhados e modo de edição – esses foram transformadores na vida."

Ankit diz que a equipe usou Composite Collider 2D livremente e o pool de objetos nativo do Unity, o que significou que ele finalmente poderia parar de manter o pool de objetos personalizado que havia escrito para The Wild at Heart. "É bom usar recursos integrados sempre que for aplicável", ele observa.

Echo Weaver | Moonlight Kids | Akupara Games

Conselhos de despedida para pequenas equipes

Ao encerrar a entrevista, perguntamos a Chris e Ankit quais dicas eles dariam a outros desenvolvedores que procuram fazer jogos com Unity.

"Provavelmente vou ser ridicularizado por isso", começa Ankit, "Mas o senso comum diz para não otimizar no início. Eu não acho que isso seja necessariamente verdade. Você pode arquitetar de uma forma que seja performática desde o início, e isso pode realmente economizar muito tempo depois.

A equipe implementou o sistema de streaming de blocos do Echo Weaver no início do projeto. Partículas foram coletadas desde o primeiro dia. Ankit sempre tenta ser cuidadoso com a conveniência do C#, porque a pressão da coleta de lixo pode aumentar rapidamente. Se você está tentando enviar um jogo, ele tem que ser performático no final. Por que se colocar em um canto onde isso parece impossível? Tornar as coisas performáticas mais tarde significa grandes mudanças disruptivas.”

Chris ofereceu alguns conselhos sobre design e a importância de se apoiar na identidade criativa do seu estúdio. "Fazer um jogo com acesso restrito ao conhecimento como este depende muito do panorama geral", ele diz. Passamos anos iterando em partes que só podíamos terminar quando o projeto inteiro se juntou. Muito disso poderia ter sido roteirizado no início, no estilo de cinema, enquanto ainda deixava muito espaço para iteração."

Mas a uma coisa que ele faria diferente é confiar no instinto e continuar fazendo o que é familiar e parece certo. Em retrospecto, foi errado da nossa parte dizer, bem, ninguém queria The Wild at Heart, então faremos algo totalmente diferente. O que as pessoas querem? Não – jogue nos seus pontos fortes, de verdade. Perdemos muito tempo descobrindo como jogar para o mercado. Eventualmente, nós estávamos tipo, o que estamos fazendo? Faça o que você faz bem. Faça o jogo que você quer fazer.

Echo Weaver lança hoje no Steam, PlayStation®5, Nintendo Switch™ 2, Nintendo Switch e Xbox Series X|S. Explore mais jogos Made with Unity em nossa página Steam Curator, e confira mais histórias de desenvolvedores da Unity no Unity Blog e no Resource Hub.


Nintendo Switch é uma marca registrada da Nintendo.