Então, você quer entrar no desenvolvimento de jogos. Ou, mais específica e simplesmente: você gostaria de se tornar um desenvolvedor de jogos trabalhando no lado técnico das coisas. Bem, qualquer um teria dúvidas sobre como fazer isso!
Por exemplo:
Há toneladas de informações sobre esses tópicos por aí – tanto que isso pode facilmente sobrecarregar seu cérebro, dificultando a tomada de decisões que valham a pena.
Meu nome é Andrey Mikheev e sou desenvolvedor backend sênior da Pixonic, MY.GAMES. Estou na indústria de jogos há 20 anos. Tentei fazer jogos pela primeira vez nos anos 90 no então popular ZX Spectrum. Neste artigo, abordarei as opções que você tem ao mudar para o desenvolvimento de jogos e explicarei como essas opções diferem.
Nesta postagem, partiremos do pressuposto de que o leitor está apenas começando sua jornada no setor. É impossível aprender tudo ao mesmo tempo e por isso você terá que priorizar e escolher como realizar seus estudos. Claro, cada pessoa tem uma experiência diferente; há mais de um caminho para se desenvolver nesta profissão.
A beleza do desenvolvimento de jogos (e de muitas outras áreas de TI) é que existem muitas áreas onde você pode aplicar suas habilidades: você pode se tornar um produtor, comerciante, artista, designer, roteirista, modelador, analista, desenvolvedor do lado do cliente, desenvolvedor principal, desenvolvedor de meta-serviços, desenvolvedor de renderização e assim por diante. Na verdade, no mundo dos jogos indie, você praticamente tem que combinar quase todas as habilidades mencionadas acima – mas isso é assunto para outro dia.
Ao pensar em iniciar uma carreira no desenvolvimento de jogos, as pessoas muitas vezes se concentram nos aspectos tecnológicos: o motor a dominar, a linguagem de programação a escolher primeiro ou as habilidades específicas nas quais trabalhar.
Mas tenha em mente que a tecnologia é apenas uma ferramenta; você não precisa construir toda a sua identidade como desenvolvedor em torno de uma coisa específica ; um mecânico não é a chave inglesa. Hoje é uma chave de fenda cruzada, amanhã é elétrica, depois de amanhã é uma ferramenta pneumática. O objetivo não é aprender a usar uma chave de fenda específica, mas entender a estrutura dos carros, como montá-los e consertá-los.
Substitua essas chaves por motores de jogos, linguagens de codificação e outras coisas – e a questão não mudará. Estas são apenas ferramentas para você utilizar
Então, na minha opinião, as competências gerais são o mais importante nesta fase. Porque você não está encarregado da tarefa de criar um “jogo”, mas de escrever um bom código .
O objetivo não é fazer um jogo de sucesso de bilhões de dólares, mas sim crescer como desenvolvedor. Fazer um jogo de um bilhão de dólares não tem tanto a ver com desenvolvimento, mas com ideias e marketing; o código é uma coisa secundária a isso. É claro que esses dois objetivos não se contradizem, mas eu não definiria um sucesso impressionante como seu primeiro objetivo – faça isso e você poderá rapidamente ficar desapontado com todo o empreendimento em geral.
Voltando ao tópico do código, um foco geral no código é importante porque código de alta qualidade sempre terá grande demanda em qualquer setor, e isso tem muitas aplicações: jogos, fintech, algoritmos de controle de robôs, lançamento de foguetes ao espaço. Alguns podem dizer que código de alta qualidade significa grandes atrasos e que o tempo é fundamental neste negócio. Não acredite. Se você conseguir escrever um bom código, não haverá tempo de inatividade.
Outra coisa é se o seu código for desleixado, para criar um produto de alta qualidade você terá que corrigir seus hábitos, e isso exigirá muito tempo e esforço.
Outro ponto muito importante diz respeito ao tempo: o tempo gasto na criação de um bom código é sempre compensado pela redução do tempo gasto em sua manutenção . Afinal, um jogo, e principalmente um multiplayer, é um produto de longa duração, e a qualidade do código é de grande importância neste caso.
Outros especialistas deverão conseguir entender facilmente o seu código , conseguir adaptá-lo, sem a necessidade de reescrevê-lo. E você também deve ser capaz de lê-lo facilmente , se de repente decidir mudar alguma coisa em alguns anos. Como um exemplo aproximado: é melhor passar alguns meses escrevendo código de alta qualidade uma vez e ser capaz de fazer algumas alterações rapidamente em alguns dias, do que escrever algo incompreensível em uma semana, então precisará de um mês para cada menor editar no futuro.
Resumindo, código limpo, arquitetura limpa, ECS, SOLID, KISS, OOP, algoritmos e estruturas de dados — todos esses tópicos devem receber atenção especial se você deseja ser um bom especialista técnico na área de desenvolvimento de jogos.
Sim, os algoritmos podem causar dores de cabeça para algumas pessoas. Mas há muito mais desses “algoritmos e estruturas” no desenvolvimento de jogos do que em projetos web típicos, e se você dominá-los, eles simplificarão muito a sua vida.
Uma compreensão mais profunda destes conceitos só virá, naturalmente, com a experiência. Com o tempo, você terá participado de vários projetos, começará a entender como outros especialistas trabalham e verá o que o incomoda pessoalmente ao trabalhar com código de jogo.
Aprender com as experiências de outras pessoas é fundamental . Estude projetos de código aberto, ouça palestras de especialistas do setor e lembre-se de que existem muitas fontes de informação disponíveis atualmente. Mas o que você não deve fazer é mergulhar no suco do seu projeto, principalmente se você não tiver um bom mentor em sua equipe. Nenhum desenvolvedor competente pode trabalhar no vácuo. O principal aqui é não exagerar e começar a usar códigos de outros projetos sem entender o que você está fazendo e por quê.
E mais um ponto importante: reescrever código é normal, não tenha medo de fazer isso . Além disso, durante o período de formação, isto é extremamente importante. Você verá como o uso de boas práticas permitirá melhorar seu código e torná-lo mais sustentável.
O processo de melhorar suas habilidades gerais de programação não é rápido. Pode levar meses – ou até anos. Então esteja preparado para isso, porque você simplesmente não pode viver sem isso.
Se você tiver a oportunidade de conseguir um estágio em um bom estúdio, isso irá acelerar muito o seu crescimento . Você terá a oportunidade de aprender vários aspectos do desenvolvimento de jogos e obter respostas de mentores às suas perguntas. Mas sejamos honestos, esta não é a forma mais comum.
Procurar do zero o primeiro emprego na indústria de jogos é outro desafio. O famoso paradoxo: para conseguir um emprego é preciso experiência, e para conseguir experiência é preciso um emprego. Neste caso, vale a pena considerar o auto-estudo . Vamos descartar imediatamente a ideia de cursos pagos: eles não são adequados para todos por vários motivos. Felizmente, existem dezenas e centenas de guias na Internet para todos os aspectos da codificação de jogos.
Depois de ter respondido a essas perguntas básicas e entendido o que e como você aprenderá, é hora de decidir com qual mecanismo de jogo você trabalhará, e isso também determinará a linguagem de programação que você terá que aprender.
Este tópico é muito amplo para ser abordado em um artigo. Além disso, como desenvolvedores, não estamos tão interessados em motores, mas sim em linguagens de programação. Se você quiser se aprofundar no assunto, aconselho que leia isto
No início de sua jornada, você não precisa escolher imediatamente algum motor grande e sério como Unreal Engine ou Unity. Se você não tem nenhuma formação teórica ou prática, algum motor para jogos web será suficiente: algo como o PlayCanvas ou seus análogos.
O mecanismo Defold também pode ser uma boa opção para começar . É mais simples que o Unity e mais focado em jogos 2D. Utiliza uma linguagem muito simples, Lua, que é fácil de aprender.
Para economizar um pouco do seu tempo, simplesmente descreverei alguns aspectos dos idiomas e os organizarei em ordem de prioridade, conforme eu os aprenderia; esta ordem não fala da qualidade da linguagem ou de seus problemas. Em vez disso, é a minha avaliação do equilíbrio entre complexidade, relevância e capacidades das linguagens.
Por exemplo, Lua é uma linguagem muito interessante, fácil de aprender, você pode escrever um jogo com ela usando o motor Defold. Mas você não pode escolhê-lo como idioma principal para sua experiência de desenvolvimento. É uma linguagem auxiliar usada em conjunto com linguagens mais populares como C++ ou C#.
Claro, esta não é uma lista completa de todas as linguagens de programação. Existem mais de uma dúzia deles. Mas é isso que quero apontar para você. Então, aqui está o que eu aprenderia e em que ordem:
C#: Se você planeja trabalhar seriamente e por muito tempo em desenvolvimento, então é melhor começar com linguagens populares de uso geral. C# é um deles. É também uma linguagem adequada para o seu plano de backup: mesmo que de repente você fique entediado com o desenvolvimento de jogos, você pode escrever uma variedade de softwares em C#, como fintech, aplicativos de negócios e assim por diante.
C# permitirá que você se familiarize com conceitos de programação padrão e implemente uma variedade de abordagens de desenvolvimento. Você aprenderá tudo sobre abreviações aparentemente assustadoras como OOP, CQRS, DDD, ECS. É claro que a maioria dessas abordagens pode ser implementada em qualquer linguagem de programação. Mas existem nuances. Por exemplo, nem todas as línguas possuem o conceito de “classe” e, consequentemente, os conceitos são implementados de forma diferente. Isso pode surpreender um desenvolvedor novato e criar vários problemas desnecessários, inclusive motivacionais. Portanto, na minha opinião, C# é a melhor (mas não mais fácil) escolha para iniciar uma carreira em desenvolvimento em comparação com, por exemplo, JavaScript.
Java : Assim como o C#, Java é uma linguagem de uso geral. Mas no desenvolvimento de jogos, é relevante principalmente em termos de servidores. Existem, é claro, mecanismos de jogos Java (por exemplo, LibGDX), mas eles não são tão populares quanto algo como o Unity para desenvolvimento de jogos.
Novamente, essas linguagens gerais são boas para uma situação em que você já conhece Java, mas trabalha, por exemplo, em Fintech — e de repente decide fazer um jogo. Você não gostaria de aprender um novo idioma do zero apenas para experimentar, certo?
JavaScript : Como disse Jeff Atwood, um dos fundadores do Stack Overflow: “Qualquer coisa que possa ser escrita em JavaScript será escrita em JavaScript. ”
É triste, mas é verdade que cada vez mais projetos de jogos estão sendo escritos nesta linguagem. O fato é que JavaScript é muito simples, principalmente para iniciantes. E se você trabalha em algum tipo de mecanismo da web, provavelmente será informado sobre onde inserir suas linhas de código.
Apesar de sua simplicidade, não acho que JavaScript seja um bom lugar para começar sua jornada no desenvolvimento de jogos. É muito diferente de outras linguagens de uso geral e isso pode enganar os desenvolvedores. Existe essa ideia de que um desenvolvedor pensa em termos dos conceitos de sua primeira linguagem de programação . Há alguma verdade nisso, então no início é melhor aprender técnicas e abordagens mais gerais. Mas se você decidir começar com jogos na web, provavelmente não conseguirá sobreviver sem JavaScript. Ele reina no mundo da web. Nesse caso, aconselho você a prestar atenção ao TypeScript. Essa linguagem é muito semelhante ao C# e facilitará a mudança para outra linguagem no futuro.
Lua/Python: Por que eu os juntei? Estas são linguagens de script, geralmente usadas para criar scripts de partes individuais da lógica do jogo. (Sim, existem mecanismos como o Defold, onde essas são as principais linguagens de desenvolvimento. Mas essas são exceções à regra.) Por exemplo, Python é uma ferramenta muito popular para scripts in-line e é usada no editor Blender 3D.
Conhecer e saber usar Lua e Python é útil, mas como mencionei anteriormente, são linguagens auxiliares e eu as guardaria para mais tarde. A menos, é claro, que você tenha escolhido o mecanismo Defold para seu primeiro projeto, então Lua é indispensável.
C++ : Alguns de vocês podem se surpreender com o fato de C++ estar no final da lista. E não é porque a língua seja ruim, mas o seu caminho é o mais difícil. Esta é a linguagem mais poderosa das apresentadas, mas também a mais complicada, com características próprias.
C++ é usado para fazer jogos AAA e permite aproveitar ao máximo o hardware. Mas eu não sugeriria isso a um desenvolvedor iniciante – as chances são altas de que você fique desapontado com o setor. Mas se você realmente sabe que C++ é o que você realmente precisa — e você não tem medo das dificuldades envolvidas e tem um plano de ação claro — então vá em frente!
Escolher uma linguagem de programação é importante, mas não se esqueça que antes de mais nada você deve aprimorar seu inglês técnico — isso o ajudará a navegar em guias, cursos e outras fontes de informações valiosas.
Na minha opinião, esta é a próxima decisão que um desenvolvedor de jogos deve tomar. (Não é algo como a escolha entre desenvolver jogos para celular, AAA ou jogos para web.) A razão é simples: logo no início de sua jornada, você quase certamente não terá a opção de fazer grandes jogos. Pense nisso, como você poderia trabalhar em algum tipo de Escape from Tarkov ou Call of Duty sem nenhuma experiência? Seu primeiro jogo não deve ser grande e complexo, caso contrário você não conseguirá terminá-lo. Você simplesmente se esgotará e abandonará o desenvolvimento de jogos.
É bom entender exatamente o que você quer fazer. Para um desenvolvedor experiente, isso não é tão importante, mas no início, a resposta a esta pergunta irá estreitar os caminhos de um possível estudo.
Em termos de single-player vs. multi-player: do ponto de vista do desenvolvimento do cliente (ou seja, a parte do jogo com a qual o jogador interage diretamente), a diferença para um desenvolvedor pode não ser tão grande. Mas o modo multijogador requer um back-end e todos os problemas associados a ele, e este também é um tópico separado e vasto.
Um jogo para um jogador é mais fácil nesse aspecto porque você não precisa se preocupar em sincronizar o estado do mundo para outros jogadores, separar a lógica do jogo ou outros problemas semelhantes.
Em termos de mecânica de jogo, um jogo single player também pode ser muito mais simples do que multiplayer — e quanto mais simples o projeto, mais fácil para você terminá-lo. E terminar o que você começou é uma habilidade crítica em qualquer negócio!
Resumindo, aconselho começar com jogos para um jogador — será mais fácil . Mas se você realmente deseja criar um jogo multijogador simples para jogar com amigos, por que não? Você só precisa entender que isso exigirá mais tempo para obter sua primeira versão funcional. Porém, o impulso interno de uma pessoa é algo muito complexo — talvez criar jogos online o motive muito mais do que jogos single-player, aumentando a chance de finalizar seu primeiro projeto.
Bem, aqui chegamos à questão principal – por onde exatamente você começa se quiser fazer jogos?
Digamos que já entendemos aproximadamente o tipo de jogo que queremos fazer. Sabemos que tipo de linguagens de programação são usadas principalmente e em quais motores elas são usadas. Esta é a fase em que este idioma e motor devem ser selecionados. (Eu recomendaria começar com C#. Você precisará de C++ para criar hits AAA, mas vamos guardar isso para mais tarde, quando ganharmos experiência.) Portanto, nossa combinação de mecanismo de linguagem pode ser C# + Unity . Estes são muito procurados e são uma excelente escolha.
Este é um ponto importante: não comece com um motor, selecione primeiro o idioma . Sem um idioma, você não conseguirá aprender o mecanismo de forma eficaz; você simplesmente não entenderá nada nos exemplos e na documentação e só ficará confuso. Idealmente, você não começaria a aprender um mecanismo de jogo antes de dominar a linguagem e poder escrever programas simples com segurança.
Para melhorar suas habilidades de programação, confira projetos como
Depois de dominar um pouco o idioma, você pode finalmente começar a estudar o motor. Em 2023, já há muita informação sobre esse assunto: a internet está cheia de recursos; dezenas de canais do YouTube para qualquer coisa que você escolher. Além disso, como eu disse, o Unity é muito popular, então não falta material.
Você pode encontrar uma solução em vídeo para qualquer problema dos criadores do mecanismo (disponível diretamente no Unity Hub, que você instalará no início),
Esses foram os três passos básicos para começar e, a partir daí, seu caminho pode continuar. Deixe-me dar um esboço aproximado.
Depois de aprender um pouco da linguagem e do motor escolhido, tente criar um jogo simples . Qualquer jogo, até mesmo jogo da velha. Faça tudo como quiser – sem limites. Você deve escrever o código sozinho. (Evite copiar e colar do Stack Overflow , que ainda assim é um recurso muito útil). O principal critério é que o jogo funcione.
A seguir, crie alguns novos recursos para o jogo e tente adicioná-los . Por exemplo, se você estiver criando um jogo de plataforma, tente criar um recurso que altere a gravidade do nível ao pressionar um botão; ou a capacidade de se teletransportar de uma parte do nível para outra.
Tente observar como foi fácil/difícil adicionar algo novo ao seu rascunho de trabalho. a quantidade necessária para alterar a estrutura do código e assim por diante. Depois disso, estude as melhores práticas, veja como outros desenvolvedores sugerem organizar o projeto e o código (OOP, SOLID, KISS), e reescreva o jogo, levando em consideração seus novos conhecimentos.
Em seguida, crie um novo recurso novamente e crie-o usando esse novo conhecimento . Leve em consideração como o código aprimorado torna mais fácil ou mais difícil adicionar um novo recurso e quantos bugs você pode encontrar.
Gradualmente, através de várias iterações, adicione complexidade ao projeto e reescreva-o com as lições aprendidas.
Supondo que você não economize, verá como as decisões tomadas interferem ou ajudam a implementar novos recursos. Um dos principais critérios para a qualidade do código é a facilidade de fazer alterações no projeto. Infelizmente, não existem leis claras para isso; tudo vem com a experiência.
Se você não quiser criar jogos simples, você pode começar codificando mecânicas individuais . Por exemplo, você poderia começar fazendo um “carro” rudimentar composto de alguns cubos colocados em alguma superfície – e então, gradualmente, adicionar outras mecânicas à mistura.
Depois disso, você pode criar um jogo mais complexo – e novamente passar por várias iterações para melhorar o projeto. Se obtiver um resultado interessante, você pode eventualmente tentar lançar este jogo nas lojas.
Você pode tentar liberar via
Posso oferecer a você um pequeno truque em relação ao lançamento de jogos: jogos para web/navegador . Embora este formato pareça ter perdido popularidade, dado que os usuários agora jogam principalmente em dispositivos móveis, PCs ou consoles, os jogos da web ainda têm um público suficiente, então você pode tentar lançar seu projeto de estreia como um só. Isso também é muito mais fácil do que lançá-lo como um jogo nativo em dispositivos móveis.
A competição de jogos para celular é acirrada e é muito provável que seu jogo passe despercebido, desde que não seja promovido – e é muito difícil promover um projeto sem um editor. Para jogos web, existem portais especiais (por exemplo: Armor Games, Newgrounds, WebGames ) que hospedam esses projetos: é muito fácil lançar lá, e você pode até ganhar alguma coisa com publicidade. Não tenha muitas esperanças, mas ainda assim, se isso acontecer, é um bônus agradável.
Agora, um pequeno aviso. Hoje em dia, a abordagem “sem código” é muito popular. É quando um projeto é criado sem escrever código. (Também é chamada de “programação com clique do mouse”). Meu conselho? Melhor ficar longe dessa abordagem.
Essas abordagens sem código são ideais para testar a mecânica do jogo ou construir um protótipo simples. Mas temos um objetivo geral diferente — e montar um jogo simples sem código não o deixará mais perto de se tornar um desenvolvedor.
Lembre-se: nenhuma leitura de artigos e visualização de guias do YouTube pode substituir a prática. Somente criando vários (e realmente vários, não apenas um) projetos você aprenderá algo significativo. Para traçar seu caminho como programador no desenvolvimento de jogos, a manta aqui é seguir passo a passo, do simples ao complexo.
Tentei dar alguns conselhos sobre como entrar no desenvolvimento de jogos e começar a programar jogos. Escolher a linguagem e o mecanismo certos, persistência e perseverança, coletar feedback e introspecção – tudo isso é muito importante. Mas há outro componente desse processo que não pode ser negligenciado: a diversão.
Se você não é apaixonado por jogos e não os joga, muito provavelmente, nada resultará dessa aventura; uma triste verdade que se aplica basicamente a qualquer trabalho criativo. Sem diversão, isso se tornará apenas uma rotina para ganhar dinheiro. Claro, você pode perder o interesse anos depois de qualquer maneira, mas esperamos que até lá você já esteja realizado e seja capaz de escolher entre algum trabalho relacionado, ou terá ganhado o suficiente para fazer algo novo e interessante para você naquele momento.
Especialmente no início de sua jornada, todo trabalho e nenhuma diversão certamente levarão ao esgotamento e à decepção.
Portanto, meu último conselho: procure o que o apaixona , aquilo que o leva a trabalhar em um projeto por dias e noites (é claro, você não deve fazer isso literalmente!) Depois de encontrar sua motivação motriz, aquilo que que de outra forma seria uma rotina típica se transformará em um desafio interessante e envolvente - e isso certamente acelerará seu crescimento profissional!
Também publicado aqui.