Guia de Programação de Jogos - Dicas, Ferramentas e Carreiras

por Connor Taylor

Um programador de jogos é a pessoa que transforma a visão de um designer em algo que realmente funciona no motor de jogo que usamos. Eu trabalho na equipe de programação de jogos móveis na Kwalee, então para nós é principalmente Unity. Por exemplo, se o designer quer que um dado role de uma maneira específica, eu escrevo o script para lidar com a lógica. Nós também colaboramos com artistas de jogos para garantir que nossos jogos não só pareçam incríveis, mas também alcancem um ótimo desempenho no dispositivo.

Neste blog, vou compartilhar minha experiência de cinco anos trabalhando na Kwalee para fornecer insights essenciais e conselhos sobre ser um programador de jogos. Vou guiá-lo através de algumas das linguagens, ferramentas e princípios que usamos, meu conselho de carreira, bem como dicas para iniciantes e avançados.

O Que Faz Um Programador De Jogos?

Escrevemos o código e ajudamos o jogo a se tornar realidade. Enquanto os designers de jogos criam os conceitos e os artistas criam os ativos, um programador criará a experiência funcional e jogável. Criamos e otimizamos o desempenho do jogo e resolvemos quaisquer problemas identificados.

Garantimos que um jogo tenha uma ótima sensação e funcione com alto desempenho. Para fazer isso, temos que garantir que o próprio código seja limpo e expansível, o que é mais difícil do que você pensa. Usamos padrões de codificação para manter uma qualidade consistente em todas as nossas equipes - um documento que pode conter padrões de nomenclatura, formatação etc. Porém, às vezes as coisas não são tão diretas e de tempos em tempos você pode precisar pensar fora da caixa para concluir as tarefas a tempo.

Nossas responsabilidades também incluem garantir que o jogo funcione bem no hardware do usuário final. Por exemplo, em nossos jogos móveis, precisamos evitar que dispositivos mais antigos fiquem muito quentes, por isso trabalhamos com artistas para otimizar o número de chamadas de desenho. Uma chamada de desenho é um comando enviado da Unidade Central de Processamento (CPU) para a Unidade de Processamento Gráfico (GPU) para renderizar um objeto na tela - ele instrui a GPU a desenhar elementos gráficos como texturas, malhas ou shaders. Precisamos minimizar o número dessas chamadas de desenho em nosso jogo porque ter muitas pode causar problemas como quedas na taxa de quadros ou gagueiras. Existem muitas maneiras de resolver isso, mas coisas como agrupar vários objetos em uma única chamada de desenho ou reduzir o número de texturas e materiais exclusivos podem ajudar. Isso é especialmente importante para dispositivos móveis, já que existem tantos dispositivos diferentes no mercado, todos com especificações técnicas variadas.

Quais São As Principais Linguagens De Programação De Jogos?

A maior parte do nosso tempo como programadores de jogos do dia a dia é gasto escrevendo scripts em uma variedade de linguagens de programação - afinal, somos desenvolvedores de software de um tipo diferente. Há muitas linguagens para escolher. Algumas parecem mais fáceis que outras, mas uma vez que você aprendeu e dominou uma, pode definitivamente aprender outras - o principal desafio é conseguir entrar no mercado.

Aqui está uma introdução a algumas das linguagens de programação de jogos mais populares:

  • C# - uma linguagem de programação versátil e popular amplamente usada no desenvolvimento de jogos. É uma das mais fáceis de aprender se você for iniciante. Uma de suas melhores características é a coleta automática de lixo - ela gerencia a alocação de memória para você - muito útil para programadores ocupados como nós.
  • C++ - em contraste, é uma linguagem não gerenciada, então você precisa alocar e desalocar a memória manualmente, o que a torna um passo maior em complexidade e dificuldade. No entanto, ela permite maior velocidade, controle e desempenho.
  • Java - assim como C#, Java tem sua própria gestão de memória e coleta de lixo, tornando mais fácil para os desenvolvedores lidarem com a memória sem se perderem nos detalhes. É amplamente utilizado no desenvolvimento web e em aplicações empresariais, e embora possa (discutivelmente) não ser a primeira escolha para desenvolvimento de jogos, continua sendo uma opção sólida para criar aplicativos escaláveis e eficientes.
  • Swift - esta é a linguagem nativa da Apple para construir apps e jogos para iOS e macOS. No entanto, isso significa que é menos útil para desenvolvimento multiplataforma - já que buscamos sempre publicar nossos jogos móveis tanto no Android quanto no iOS.

Como Você Se Torna Um Programador De Jogos?

Existem várias maneiras de se tornar um programador de jogos. Meu caminho é bastante convencional - estudei Design e Programação de Jogos na University of Staffordshire. Originalmente, pensei que iria trabalhar com arte de jogos - sempre fui muito apaixonado por arte quando criança, além de ter gostado muito dos módulos de arte na universidade, mas enquanto estive lá descobri que realmente gostava de criar jogabilidade. Podia levar vários dias para criar um único modelo de alta poligonagem, mas podia fazer um pato voar e explodir em metade do tempo. Prototipagem me permite ver o resultado rapidamente bem na minha frente.

No entanto, a beleza de programar jogos é que é acessível para a maioria das pessoas, mesmo se você não seguir um caminho tradicional. Tive amigos na universidade com mais de 50 anos - nunca é tarde para experimentar algo novo. Na Kwalee, até contratamos alguém que aprendeu principalmente através de vídeos no YouTube e fez um jogo por diversão. Existem tantas oportunidades para talentos novos e entusiasmados hoje. Olhando para portfólios de novos estudantes, eles têm muito mais experiência. Vemos talentos fantásticos surgindo e é um momento empolgante na indústria.

Uma pergunta que você provavelmente está ansioso para fazer - a IA afetará a programação como carreira? Pode ser extremamente útil, e está melhorando. Perfeito se você precisar de algo explicado ou estiver preso em um problema. Você pode usá-la para solucionar bugs ou refatorar ('limpar') seu código colando no mais recente ChatGPT. No entanto, quando olhamos para portfólios, queremos ver o trabalho que você fez e tem orgulho. A IA é ótima de usar, mas tente não usá-la como um substituto para suas próprias habilidades.

Como é Um Dia Típico Na Vida De Um Programador De Jogos?

Deixe-me dar um exemplo baseado na minha vida. Sou um Lead Programmer (chamo de meu emprego dos sonhos), então é uma ótima mistura de trabalho prático e gerenciamento de outros programadores!

Um dia típico no meu mundo é entrar, pegar um latte, então verificar novamente se há bugs ou bloqueios para a equipe de QA. Verificar com a equipe se alguém precisa que eu faça algo para desbloquear o trabalho deles. Depois a música toca e a lista de tarefas aparece. Compartilhamos vídeos de progresso pelo Slack para obter feedback rápido, enquanto também alternamos entre 2-3 projetos para apoiar os membros da minha equipe. Também gastamos muito tempo investindo em sistemas compartilhados para tornar nossa programação mais eficiente - tudo precisa ser mantido, atualizado e corrigido regularmente para manter as coisas funcionando sem problemas.

Dicas De Programação De Jogos Para Iniciantes

Se você está começando e aspira ser um programador completo, aqui estão minhas dicas para iniciantes!

  • Há muito para aprender online, no YouTube e há tantos jogos de exemplo que você não tem desculpa para não aprender! Os motores populares são gratuitos e muito divertidos de usar!
  • Na outra extremidade do espectro, pode ter 30 anos, mas você deve tentar ler o influente livro "Design Patterns: Elements of Reusable Object-Oriented Software" pelos chamados autores Gang of Four, que introduziu algumas das bases dos padrões de jogos que usamos todos os dias na programação.
  • Você pode ter suas próprias ideias, mas certifique-se de começar simples para estar fundamentado com o básico.
  • Quando você não está amarrado a um projeto comercial, pode escrever tanto código quanto quiser, então divirta-se bastante criando coisas insanas.
  • Construir um portfólio é muito importante (e é como consegui meu emprego). Mas tenha muito cuidado para não apenas carregar o mesmo trabalho comum da universidade, porque vemos muitas candidaturas com isso. Mesmo passando um dia a mais redesenhando e adicionando mais funcionalidades ajudará você a se destacar.
  • Criar seu próprio jogo do mundo real também é uma ideia inteligente - é muito barato colocar um jogo no Google Play, então lance algo que você pode mostrar para recrutadores/editors/família/animais de estimação no seu telefone. Você pode até ganhar alguns milhares de dólares por ano até conseguir uma vaga de tempo integral exclusiva, isso é um bônus! Ou pode te tentar a fazer um jogo completo e fechar parceria com uma editora.
  • Não aprenda apenas sobre programação - aprenda sobre arte, design, QA e outras disciplinas com as quais você interagirá. Por exemplo, vale a pena entender os métodos de QA porque você pode cair na armadilha de assumir que algo funciona, mas você precisa jogá-lo como um usuário, não como alguém que escreveu o código e tem uma visão definida de como você espera que "deveria ser jogado". Seja destrutivo, tente as coisas aleatórias que as pessoas podem fazer, apertando botões aleatórios e outros comportamentos bizarros.

Dicas De Programador Avançado

Aqui estão algumas das dicas que me ajudaram a passar de júnior, para programador, para sênior até chegar a líder.

  • Você sempre pode se beneficiar de mais aprendizado, e lembre-se de que sem erros não podemos aprender!
  • Se você é realmente apaixonado por algo - você pode se tornar mais especializado. Por exemplo, se você gosta de brincar com shaders e pipelines de renderização, aprenda mais sobre como usar shaders gráficos para expandir sua capacidade de renderizar efeitos visuais complexos e usar pipelines de renderização para otimizar o desempenho ou fazer alguns efeitos incríveis.
  • Você pode fazer algo realmente legal, como um sistema complexo, carregá-lo em uma loja de ativos para mostrá-lo se seu contrato permitir e mostrar seu trabalho avançado. Você poderia desenvolver um nicho como um tipo específico de programador, como programador de jogabilidade, programador de servidor, programador gráfico ou programador de multiplayer.
  • Alternativamente, você pode seguir pelo caminho de gerenciamento como eu, e orientar pessoas. Minha tática para progredir na carreira tem sido absorver novas responsabilidades. Primeiro, comecei melhorando coisas menores, isto é, pequenas mudanças de fluxo de trabalho... Depois tornei os processos mais fáceis usando modelos para economizar tempo ao criar novos projetos. Então, experimentei a tutoria e o gerenciamento, o que me ajudou a ganhar mais confiança e agora participar de revisões por pares, revisões de código, oficinas de hospedagem e liderando equipes em projetos.

Quer você esteja trabalhando como parte de uma equipe ou como gerente, é tão importante dar elogios quanto dar críticas construtivas. Ao revisar código, é bom motivar as pessoas!

Quais São Os Princípios-chave Da Programação De Jogos?

Existem alguns tópicos-chave que devem entrar em um blog sobre programação de jogos. Estes são alguns dos pontos mais importantes que consideramos.

Controle de Versão/Controle de Fonte

Assim como você tem pontos de salvamento em jogos, há pontos de salvamento no desenvolvimento de projetos. Eles atuam como armazenamento geral para o projeto e significam que três ou quatro programadores podem trabalhar em um sistema simultaneamente, criar uma alteração e enviá-la para o servidor. Isso nos permite rastrear essas alterações e reverter facilmente se algo quebrar. Se dois desenvolvedores trabalharem no mesmo arquivo, esse arquivo se tornará parte de uma mesclagem, se houver conflitos, podemos então resolvê-los manualmente ou escolher as alterações de um indivíduo para aplicar. Isso acontecerá muito ao usar Prefabs ou Scenes dentro do Unity.

Esses termos às vezes se sobrepõem, mas, geralmente, o controle de fonte foca no código e o controle de versão inclui todos os arquivos do projeto, ativos e documentação.

Quando você começa a usar Controle de Fonte, pode parecer um pouco assustador no início, pode parecer muito avassalador e quando se trata de conflitos, você pode se sentir inseguro sobre o que fazer. Mas a natureza do controle de versão ajuda você a salvar momentos no tempo, então, se você estiver atualizando com frequência e usando mensagens de commit detalhadas, é incrivelmente útil e seguro. Você pode reverter para vários pontos, ter múltiplos ramos etc. Pense nisso como a rede de segurança dos desenvolvedores, para que possamos evitar uma versão de Toy Story 2 da Pixar - acidentalmente excluída e depois recuperada de um disco rígido na casa do Diretor Técnico, em vez de estar tudo lá seguro no servidor.

Programação Orientada a Objetos

Este é o tipo de programação que usamos principalmente na Kwalee. Ela utiliza objetos para representar coisas reais ou conceitos abstratos e visa organizar a base de código usando princípios que espelham como vemos e interagimos com objetos no mundo real. Ajuda a manter sistemas complexos organizando o código em classes distintas que você pode reutilizar, escalar e manter mais facilmente.

Claro, há debate sobre se é bom ou não. Embora não seja a de melhor desempenho, ela funciona bem. Assim como com linguagens, cada uma tem seus próprios prós e contras e você deve aprender uma para começar e ter uma ideia de como as linguagens e compiladores (tradutores de código humano para código de máquina) funcionam. Você também pode considerar outros tipos, como programação funcional, que trata mais como matemática, programação lógica, que usa fatos e regras, ou programação procedural, que usa dados passo a passo.

Padrões de Programação

Essas são coisas maravilhosamente úteis - soluções reutilizáveis que podem ajudar com problemas comuns que você enfrentará no design de software. Elas oferecem um modelo para resolver um problema, para que você não tenha que reinventar a roda cada vez e possa seguir soluções comprovadas.

Por exemplo, o padrão de design Singleton ajuda a garantir que haja apenas uma instância de uma classe, como um gerenciador de configurações de jogo durante todo o jogo, e oferece um ponto de acesso global a ela. O código para este padrão significa que apenas uma instância da classe SettingsManager existe, então você não precisa recriar ou duplicá-la toda vez que precisar.

Há também o Padrão de Fábrica, que pode ajudá-lo a criar objetos de uma maneira mais organizada e flexível. Você pode definir métodos para gerar tipos específicos de objetos, como personagens ou itens, com base em parâmetros de entrada, permitindo que você crie mais objetos de um tipo semelhante sem começar do zero cada vez.

Espero que este blog tenha dado a você um gosto pela programação de jogos, seja você novo no campo ou um programador experiente! Se você é uma pessoa trabalhadora, mas divertida, combinaria com nossa equipe, então saiba mais sobre carreiras na Kwalee. Caso contrário, você pode aprender sobre nossos jogos móveis ou publicação e conhecer mais sobre o que lançamos como desenvolvedor e editor.

Sobre o autor:

Connor Taylor, Líder de Programação de Jogos na Kwalee, adora criar jogos e fomentar uma equipe divertida e solidária. Com 5+ anos de experiência, ele criou sucessos como Jetpack Jump e orienta outros no desenvolvimento em Unity.

Compartilhar este artigo: