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 funciona realmente no motor de jogo que usamos. Trabalho na equipa de programação de jogos móveis na Kwalee, por isso, 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. Também colaboramos com artistas de jogos para garantir que nossos jogos sejam visualmente incríveis e tenham um ótimo desempenho nos dispositivos.
No blog de hoje, irei basear-me nos meus cinco anos trabalhando na Kwalee para compartilhar informações essenciais e conselhos sobre ser um programador de jogos. Vou guiá-lo através das linguagens, ferramentas e princípios que usamos, do meu aconselhamento 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 tornar-se uma realidade. Enquanto os designers criam os conceitos e os artistas de jogos criam os ativos, um programador cria a experiência funcional e jogável. Criamos e otimizamos o desempenho do jogo e solucionamos quaisquer problemas identificados.
Garantimos que um jogo se sinta ótimo e tenha um alto desempenho. Para isso, temos que garantir que o código em si seja limpo e expansível, o que é mais difícil do que parece. Usamos padrões de codificação para manter a qualidade consistente em todas as nossas equipas - um documento que pode conter padrões de nomenclatura, formatação etc. No entanto, às vezes as coisas não são sempre tão diretas e, de tempos em tempos, pode ser necessário pensar fora da caixa para realizar as coisas a tempo.
Nossas responsabilidades também incluem garantir que o jogo funcione bem no hardware do usuário final. Por exemplo, nos 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 - informa à GPU para desenhar elementos gráficos como texturas, meshes ou shaders. Precisamos minimizar o número dessas chamadas de desenho no nosso jogo porque ter muitas pode causar problemas como queda de frame rate ou gagueira. 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 únicos podem ajudar. Isso é especialmente importante para dispositivos móveis, pois há muitos dispositivos diferentes no mercado, todos com especificações técnicas variadas.

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

A maioria 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. Existem muitas linguagens para escolher. Algumas parecem mais fáceis do que outras, mas uma vez que você tenha aprendido e dominado uma, você pode definitivamente aprender outras - o principal desafio é entrar na indústria.
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 usada amplamente no desenvolvimento de jogos. É uma das mais fáceis de aprender se você é iniciante. Uma das suas melhores características é a coleta automática de lixo - portanto, gerencia a alocação de memória para você - muito útil para programadores ocupados como nós.
  • C++ - Em contraste, esta é uma linguagem não gerida, portanto, você tem que alocar e desalocar memória manualmente, o que a torna um passo maior em termos de complexidade e dificuldade. No entanto, permite maior velocidade, controle e desempenho.
  • Java - Assim como C#, Java tem sua própria gestão de memória e coleta de lixo, facilitando para os desenvolvedores lidarem com memória sem se perderem nos detalhes. É amplamente usado no desenvolvimento web e em aplicações empresariais, e embora não seja (provavelmente) a principal escolha para desenvolvimento de jogos, continua a ser uma boa opção para criar aplicativos escaláveis e eficientes.
  • Swift - Esta é a linguagem nativa da Apple para construir aplicativos e jogos para iOS e macOS. No entanto, isso significa que não é tão útil para desenvolvimento multi-plataforma - já que pretendemos sempre publicar nossos jogos móveis tanto para Android quanto para iOS.

Como Se Tornar Um Programador De Jogos?

Existem várias maneiras diferentes de se tornar um programador de jogos. Minha trajetória é bastante convencional - estudei Design e Programação de Jogos na Universidade de Staffordshire. Originalmente, pensei que iria seguir para a arte nos jogos - sempre fui muito apaixonado por arte quando criança, além de realmente desfrutar dos módulos de arte na universidade, mas enquanto estava lá, descobri que realmente gostava de criar jogabilidade. Podia levar-me vários dias para criar um único modelo de alta poligonal, mas poderia fazer um pato voar e explodir em metade do tempo. Criar protótipos permite-me ver o resultado rapidamente à minha frente.
No entanto, a beleza na programação de jogos é que é acessível a maioria das pessoas mesmo que não sigam o caminho tradicional. Tinha amigos na universidade com mais de 50 anos - nunca é tarde demais para experimentar algo novo. Na Kwalee, já contratamos alguém que aprendeu principalmente através de vídeos do YouTube e fez um jogo só para se divertir. Há tantas oportunidades para talentos novos e ávidos hoje em dia. Olhando para portfólios de alunos mais recentes, eles têm muito mais experiência acumulada. Vemos talentos fantásticos surgirem e é um momento emocionante na indústria.
Uma questão que você provavelmente está ansioso para perguntar - a IA afetará a programação como carreira? Ela pode ser extremamente útil, e está a melhorar. Perfeita se você precisa de algo explicado ou está preso num problema. Pode usá-la para solucionar bugs ou refatorar ('limpar') seu código colando-o no último ChatGPT. No entanto, quando olhamos para portfólios, queremos ver o trabalho que você fez e do qual se orgulha. A IA é ótima para usar, mas tente não usá-la como substituto para suas próprias habilidades.

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

Vou dar um exemplo baseado na minha vida. Sou Programador Chefe (chamo isto de trabalho dos meus sonhos) por isso é uma mistura ótima de prático e gerenciamento de outros programadores!
Um dia típico no meu mundo é chegar, pegar um latte, e depois verificar quaisquer bugs ou bloqueios para a equipa de QA. Verificar com a equipa para ver se alguém precisa que eu faça algo para desbloquear seu trabalho. Então a música liga e a lista de tarefas sobe. Vamos compartilhar vídeos de progresso via slack para obter feedback rápido, enquanto também fazemos malabarismos entre 2-3 projetos para apoiar membros da minha equipa. Também investimos muito tempo em sistemas compartilhados para tornar nossa programação mais eficiente - tudo precisa ser mantido, atualizado e corrigido regularmente para que as coisas funcionem sem problemas.

Dicas De Programação De Jogos Para Iniciantes

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

  • Há tanto 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 são muito divertidos de usar!
  • Na outra ponta do espectro, pode ter 30 anos, mas deveria tentar ler o livro influente "Design Patterns: Elements of Reusable Object-Oriented Software" dos chamados autores do Gang of Four, que introduz algumas das bases dos padrões de jogos que usamos diariamente na programação.
  • Pode ter suas próprias ideias, mas certifique-se de começar simples para estar enraizado com o básico.
  • Quando você não está vinculado a um projeto comercial, pode escrever tanto código quanto quiser, então divirta-se muito criando coisas insanas.
  • Criar um portfólio é realmente essencial (e foi como consegui meu trabalho). Mas tenha muito cuidado para não apenas carregar o trabalho padronizado da universidade, porque veremos muitas candidaturas com isso. Até mesmo gastar um dia extra remarcando e adicionando mais funcionalidades pode ajudá-lo 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 a recrutadores/publicadores/família/animais de estimação no seu telefone. Você pode até fazer alguns milhares de dólares por ano até estar preparado com um emprego exclusivo em tempo integral, isso é um bônus! Ou pode tentá-lo a criar seu próprio jogo completo e fazer parceria com um editor.
  • Não aprenda apenas sobre programação - aprenda sobre arte, design, QA e outras disciplinas com as quais irá interagir. Por exemplo, vale a pena entender métodos de QA, porque você pode cair na armadilha de assumir que algo funciona, mas precisa jogar como um usuário, não como alguém que escreveu o código e tem uma visão definida de como espera que 'deve ser jogado'. Seja destrutivo, tente as coisas aleatórias que as pessoas podem fazer, pressionando botões aleatórios e outras ações bizarras.

Dicas Para Programadores Avançados

Aqui estão algumas das dicas que me ajudaram a passar de júnior para programador, a sênior a chefe.

  • Você sempre pode se beneficiar mais do 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 adora brincar com shaders e pipelines de renderização, aprenda mais sobre como usar shaders gráficos para expandir sua habilidade de renderizar efeitos visuais complexos e usar pipelines de renderização para otimizar o desempenho ou fazer alguns efeitos incríveis.
  • Você pode criar algo muito bacana, como um sistema complexo, carregá-lo em uma loja de ativos para exibi-lo se o seu contrato permitir e mostrar seu trabalho avançado. Você pode desenvolver um nicho como um tipo específico de programador, como um programador de jogabilidade, programador de servidores, programador de gráficos ou programador multiplayêr.
  • Alternativamente, você pode seguir o caminho da gestão como eu, e mostrar o caminho para outras pessoas. Minha tática para progredir na carreira foi absorver novas responsabilidades. Primeiro, comecei melhorando coisas menores, ou seja, pequenas melhorias no fluxo de trabalho. Depois, tornei os processos mais fáceis ao usar modelos para economizar tempo ao criar novos projetos. Depois, comecei a sentir o gosto pela mentoria e gestão, o que me ajudou a ganhar mais confiança e agora participo de revisões de pares, revisões de códigos, conduzindo workshops e liderando equipas em projetos.
    Quer você esteja trabalhando como parte de uma equipa ou como gestor, é tão importante dar elogios quanto críticas construtivas. Ao revisar códigos, é bom entusiasmar as pessoas!

Que Princípios São Fundamentais Na Programação De Jogos?

Existem alguns tópicos-chave que simplesmente têm que entrar em um blog sobre programação de jogos. Estes são alguns dos tópicos mais importantes que consideramos.
Controle de Versão
Assim como há pontos de salvamento nos jogos, há pontos de salvamento no desenvolvimento de projetos. Eles atuam como armazém geral para o projeto e permitem que três ou quatro programadores trabalhem em um sistema simultaneamente, criem uma alteração e a empurrem para o servidor. Isso nos permite rastrear essas alterações e retroceder facilmente se algo quebrar. Se dois desenvolvedores trabalharem no mesmo arquivo, esse arquivo fará parte de uma mesclagem, se houver conflitos, podemos resolver manualmente ou escolher as alterações de um indivíduo para aplicar. Isso acontecerá muito ao usar Prefabs ou Cenas dentro do Unity. Essas termos às vezes são usados de forma intercambiável, mas geralmente, o controle de origem foca no código e o controle de versão inclui todos os arquivos do projeto, ativos e documentação.
Quando começar a usar o Controle de Versão, pode parecer assustador no início, pode parecer muito esmagador e quando envolver conflitos, pode se encontrar inseguro sobre o que fazer. Mas a natureza do controle de versão ajuda você a salvar momentos no tempo e, se está frequentemente atualizando e usando mensagens de commit detalhadas, é incrivelmente útil e seguro. Pode voltar para múltiplos pontos, ter múltiplos ramos, etc. Pense nisso como a rede de segurança dos desenvolvedores, para que possamos evitar uma versão do Toy Story 2 da Pixar - acidentalmente deletado e então recuperado de um disco rígido na casa do seu Diretor Técnico, em vez disso está tudo salvo com segurança no servidor.
Programação Orientada a Objetos
Este é o tipo de programação que usamos principalmente na Kwalee. Usa objetos para representar coisas reais ou conceitos abstratos, e visa organizar a base de código usando princípios que imitam como vemos e interagimos com objetos no mundo real. Ajuda a manter sistemas complexos, organizando códigos em diferentes classes que você pode reutilizar, escalar e manter mais facilmente.
Claro, há debates se é bom ou não. Embora não seja o de melhor desempenho, funciona bem. Assim como com linguagens, cada uma tem seus prós e contras e você deve aprender uma para comenzar a entender como 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 a trata mais como matemática, programação lógica que usa fatos e regras ou programação procedural que utiliza um processamento passo a passo.
Padrões de Programação
Estas são coisas incrivelmente úteis - soluções reutilizáveis que ajudam a resolver problemas comuns que você encontrará no design de software. Elas fornecem um modelo para corrigir 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 exista apenas uma instância de uma classe como um gestor de configurações de jogo ao longo de todo o jogo, e lhe dá um ponto de acesso global a ele. O código para este padrão significa que apenas uma instância da classe SettingsManager existe para que você não precise recriá-la ou duplicá-la toda vez que precisar.
Há também o padrão Factory que pode ajudá-lo a criar objetos de forma 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-lhe criar mais objetos do mesmo tipo sem começar do zero cada vez.
Espero que este blogue 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, encaixaria bem na nossa equipa, então saiba mais sobre carreiras na Kwalee. Caso contrário, você pode aprender sobre nossos jogos móveis ou publicações e conhecer mais sobre o que lançamos como desenvolvedores e editores.

Sobre o autor:

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

Artigos Relacionados

Partilhar este artigo: