Como otimizar a duração da bateria no Monster Walk

Confira nossa entrevista com Jenny Xu, CEO da Talofa Games, na qual ela explica os desafios técnicos e as decisões de desenvolvimento por trás da criação de uma experiência em segundo plano sem interrupções, incluindo como a equipe utiliza os hooks do Unity para OnApplicationFocus e OnApplicationPause para salvar o estado do jogo.
JENNY XU:Quando concebemos o Monster Walk pela primeira vez, o principal desafio de design que tentávamos resolver era a seguinte questão: como fazer com que os passos, assim como os passos que você dá na vida real, pareçam parte de um jogo? Não parece uma tarefa chata, não dá a sensação de ser algo forçado, não parece um aplicativo de fitness e um jogo — duas coisas diferentes —, mas sim um jogo de verdade que você joga ao levar uma vida mais saudável na vida real.
O maior desafio técnico foi fazer com que esses elementos em tempo real, como os dados ao vivo, parecessem realmente naturais e integrados à experiência do jogo, apesar de todas essas diferentes restrições da plataforma, como a transmissão em segundo plano e a duração da bateria. Para nós, o desafio era o recurso de monitoramento de passos em tempo real e como fazer com que isso não parecesse nem muito punitivo nem muito gratificante para os jogadores, de forma a realmente mantê-los comprometidos com sua boa forma física.
CONSOLIDAÇÃO DE FLUXOS DE DADOS DE ETAPAS
Como usamos o Unity, isso facilitou muito a integração com os plug-ins nativos do Android e do iOS. E estamos lidando com o Android Health Connect, o Google Fit, a Garmin e todas essas fontes de dados que chegam ao nosso jogo. E precisamos consolidar tudo isso e informar ao jogador quantos passos achamos que ele deu desde a última vez que entrou no jogo até a próxima vez que o abriu.
Felizmente, o Unity nos oferece a possibilidade de acessar APIs nativas. Então, tipo, chegamos até a criar nosso próprio contador de passos em determinado momento, porque não podíamos presumir que eles teriam o Health Connect. Não podíamos presumir que eles tivessem o Google Fit. Talvez eles não tivessem nada. E criamos esse plugin nativo integrado a Unity que funciona perfeitamente, contando os passos em segundo plano, mesmo quando o aplicativo está fechado.
Então, tivemos que criar uma solução com quase três camadas dentro do nosso projeto do Unity para dar suporte a isso. E, ao mesmo tempo, não consumir muita bateria nem ficar constantemente em segundo plano, para que os jogadores não acabem querendo desinstalar o jogo.
E o mesmo se aplicava ao equilíbrio de todos os dados que estávamos recebendo. Porque, no caso da Apple, você tem o Apple Health, que conta os passos em tempo real, como quando o aplicativo está aberto e o celular está sendo agitado — talvez o usuário esteja dando um passo —, mas o Apple Health também está registrando um passo nesse momento.
Então, como se faz a consolidação dos dados redundantes? Como fazer com que não pareça nem muito gratificante, nem muito punitivo? Encontrar esse ponto ideal, conseguir atender às necessidades do jogador independentemente do modelo de dispositivo que ele tivesse e fazer com que isso parecesse mágico: esse foi o maior desafio técnico.
OTIMIZANDO A DURAÇÃO DA BATERIA
Como o Monster Walk é um jogo que ficava rodando em segundo plano o dia inteiro, tivemos que criar sistemas que permitissem o andamento do jogo sem sobreaquecer o celular. Mesmo entre o iOS e o Android, o comportamento em segundo plano é bem diferente.
Por isso, tivemos que ser extremamente cuidadosos ao salvar o estado do jogador e, basicamente, como realizamos tantos processos em segundo plano relacionados a passos e dados de saúde, tivemos que dar aos jogadores a sensação de que, enquanto estavam ausentes, seus monstros continuavam caminhando com eles, mesmo que o aplicativo estivesse fechado.
Então, eu diria que grande parte disso se deve à estrutura do design; além disso, também somos bastante cuidadosos ao encerrar processos, garantindo que as threads em segundo plano não estejam em execução, para que o usuário não veja o aplicativo aberto e consumindo bateria.
Então, aproveitamos vários dos ganchos do Unity, como OnApplicationFocus e OnApplicationPause, e simplesmente usamos esses momentos para salvar rapidamente o estado. E então, sempre que eles voltam, a gente dá uma olhada no último ponto salvo, continua o jogo e confere a contagem de passos deles, e dizemos: “Ei, vocês acabaram de andar essa distância toda com o seu amiguinho monstro”. Tipo, bem-vindo de volta.
Confira mais histórias de desenvolvedores do Unity no Blog do Unity e no Centro de Recursos.
