Como tutoriais me fizeram perder semanas de trabalho
Buenas, povo!
Embora eu já esteja na área téc. há quase 1 década e meia, sempre há coisas pra aprender e velhos erros a se repetir.
Durante a pandemia, eu visitei a minha antiga vontade de desenvolver jogos e desde aí decidi migrar 100% para esta área, tanto que em 2024 fundei a POPI Games Studio para desenvolver jogos que façam as pessoas jogarem e falarem "uaau" 😱. E aí comecei a criação de um jogo que vai um pouco além do escopo básico e bem limitado que você cria enquanto está no processo de aprendizagem.
Só que ao fazer isso uma série de novos problemas que não existem na criação de jogos de pequeno escopo surgem. E um desses problemas é o processo de tomada de decisão na escolha de assets.
Na época em que eu comecei a aprender a programar (lá por 2009), só tinha dois jeitos: apostilas ou cursos (técnicos e superiores). Mas hoje, a gente vive hoje na era da informação, né? Então temos o bom e velho YouTube que hospeda muitos vídeos tutoriais de desenvolvimento de jogos.
Mas um dos grandes problemas está justamente nestes tutoriais. A maioria deles, por serem focados em um público que ainda está aprendendo desde o básico, costuma usar apenas a engine e criar tudo do absoluto zero. E está tudo bem, afinal, eles cumprem o seu papel educacional.
Mas eles não ensinam ninguém a lidar com uma situação de produção real onde você precisa de agilidade, produtividade e ferramentas maduras. Essas características são difíceis de alcançar, pois precisam de tempo para serem lapidadas. A infelicidade é que os produtores de vídeos tutoriais mais conhecidos e divulgados pelo YouTube não levam isso em consideração, e por tabela os consumidores, mesmo os mais experientes, criam um "mindset" de que todas as ferramentas precisam ser produzidas do zero.
Isso é assim até você entender que não vai funcionar. E aí você procura por assets que possam implementar essas funcionalidades que estão fora do core game loop do seu jogo!
Ao abrir qualquer loja de assets, uma infinidade de recursos gratuitos e pagos vai surgir. Vou exemplificar com o meu caso: eu precisava de um asset que lidasse com a movimentação do personagem em diversas situações.
Nisso, entre o mar de assets deste estilo, eu encontrei a Flare Engine (além de ter visto a indicação de um amigo no Discord, o que aumentou a minha curiosidade sobre ela).
A Flare Engine é o que você pode chamar de um asset horizontal, muito similar a ferramentas famosas como a Corgi Engine. Ela faz a gerência e implementação de uma série de coisas, tais como: movimentação completa do personagem, física, animações, salvamento, interações, interações de folhagens, sistemas de IA, pathfinding, diálogo, combate corpo a corpo, combate a distância e várias outras coisas.
Tudo funciona muito bem e você praticamente nem precisa programar. Depois que você passa um tempo aprendendo a como lidar e a se adaptar com a ferramenta, é incrível como você consegue evoluir e ganhar produtividade, afinal, está tudo previamente pronto para o uso. Porém, só funciona enquanto você segue exatamente o que o asset predefiniu. Assim que você precisar implementar uma mecânica diferente e necessitar criar uma integração entre a ferramenta e o seu sistema, os problemas começam a acontecer.
Essas ferramentas não foram desenvolvidas pensando em integrações com outras soluções e isso resulta em dificuldades na hora de fazer uma integração. Os grandes processos internos dessas ferramentas não funcionam através da lógica padrão da engine que você já dominou e também não são transparentes. Para fazer a integração correta é necessário você entendê-los completamente e sem a ajuda de uma documentação muito detalhada e algumas semanas de estudo é uma tarefa quase impossível.
Recomendados pelo LinkedIn
Basicamente, a arquitetura horizontal de funcionamento é similar à frameworks também horizontais que encontramos na programação web, como o Django Web Service que já implementa uma "opinião" definida que deve ser seguida. Entretanto, um sistema web simples possui muito menos componentes e os fluxos são simples, permitindo integrações com outras ferramentas com mais facilidade.
Depois que eu comecei a ter problemas por conta dessas limitações, decidi buscar outro asset.
Foi aí que eu achei o Character Controller Pro (CCP), por indicação de um amigo que conheci na comunidade de desenvolvedores de jogos brasileira.
Agora, com o aprendizado de todos os problemas oriundos da Flare, criei um pipeline de testes para entender como o CCP funciona e se ele seria o suficiente para resolver os meus problemas.
Esses testes passando por: ler a documentação, entender o fluxo e ciclo de vida do projeto, avaliar o uso da ferramenta com sprites (o CPP divulga muito mais o 3D do que o 2D, levantando certas suspeitas de que talvez pudesse não ser tão bom para o 2D), testar a integração e funcionamento de animações, validar os diferentes tipos de colisão e se funcionam fora do escopo do CPP, avaliar a capacidade de sobrescrever as suas funcionalidades, criar novos estados de movimentação, mudar os tipos de gerenciamento de inputs do player ao personagem, entre outras coisas.
Ao testar esse asset, foi possível notar a diferença logo no começo. O nível de acoplamento é baixo até mesmo entre os elementos que compõem o sistema. É possível substituir qualquer parte dele por partes que você mesmo tenha criado, basta seguir algumas convenções muito bem definidas na documentação.
Esse asset é o que eu chamaria de framework vertical no desenvolvimento web. O framework vertical é aquele tipo de tecnologia que faz uma única coisa muito bem feita e não tem "opiniões" sobre como você irá integrá-lo com outras funcionalidades do sistema. Nesses casos, a tecnologia funciona focada em entregar o básico muito bem feito e você e a comunidade são responsáveis por integrá-la a outras ferramentas. Geralmente esse processo é mais fácil do que em frameworks horizontais justamente por conta da sua filosofia focada em uma única ou em poucas coisas.
Além disso, todo o sistema funciona em conformidade com o que se esperava do processo "padrão" da engine para a qual ele foi feito, sem sobrescrever a física e outros comportamentos padrão, o que facilita o desenvolvimento sem a necessidade de criar outros recursos para que o asset funcione.
Acho que dei sorte e encontrei o asset ideal logo após a primeira tentativa frustrada. Mas estou grato por ter tido esse problema. Por conta dele, entendi que a pré-produção não se baseia apenas em questões relacionadas ao processo criativo, artístico e mercadológico, mas também envolve questões de viabilidade técnica que na minha concepção viriam apenas depois.
Esse tipo de problema entre ferramentas horizontais vs verticais foi algo que eu já havia encarado anos atrás, mas em situações completamente diferentes. Achei que tinha aprendido a lição com esses erros do passado, mas acho que esquecer o que aprendeu também faz parte do ser humano.
Se você quiser saber mais sobre o jogo que estou desenvolvendo, vou deixar esse devlog abaixo onde falo sobre a base do jogo 🤘
Software engineer | JavaScript | PHP | MySQL | Flutterflow | Python
7 mGostei muito do artigo!! Pra mim ser dev é entender que um problema vai ter mil soluções e cada solução vai te trazer mil problemas, você só tem que escolher qual vai ser melhor pra você kkkkkkkkkk.