Introdução a programação de jogos

Aula 1

Ementa da aula

  • Ferramentas que serão utilizadas no curso;
  • Diferenças entre game engines;
  • Entender a base da programação orientada a objetos em jogos;
  • Similaridades entre desenvolvimento de jogos e desenvolvimento BackEnd;
  • Herança vs Componentização;
  • Introdução a sinais/eventos.

Ferramentas do curso

  • Godot para game engine
  • Assets da itch.io
Todos os assets tem créditos no arquivo README.md mais próximo!

Diferenças entre game engines

(Unity x Unreal x Godot)

Unity

  • A mais famosa e mais utilizada profissionalmente.

  • Utiliza C# para programar.

  • Tem foco em desenvolvimento 3D mas faz muito bem 2D.

  • Sistema de precificação baseado no numero de vendas do jogo/aplicação.

  • Usada tambem para controlar robôs (bem doido).

Subway Surfers, Pokémon GO, Hollow Knight, Among Us, Fall Guys, Cuphead, Untitled Goose Game, Subnautica, Ultrakill...

Unreal

  • Graficos estupidos de bons.

  • Ótimo sistema de programação no code.

  • Precificação de 5% nos lucros após 1 milhão

  • Editor pesado pra caralho.

Fortnite, Hogwarts Legacy, Final Fantasy VII Remake, Batman: Arkham Knight, PUBG, Rocket League, Black Myth: Wukong, Gears of War...

Godot

  • Iniciativa FOSS, sempre será gratuito.

  • Desenvolvimento 2D muito simples.

  • Melhorou muito no 3D, mas ainda não é foco de empresas AAA. (mas tem jogos incriveis)

  • Leve, roda em quase tudo (não tem suporte para consoles).

  • É a game engine para indies.

Buckshot Roulette, Cassete Beasts, Brotato, Dog Walk (jogo do blender), Slay the Spire 2, Dome Keeper, Endoparasitic, EX-Zodiac, Gourdlets, Sonic Colors Ultimate...

Algum é melhor que o outro?

São ferramentas, cada uma vai facilitar um processo diferente.

  • Unity tem um asset store estupido de grande.

  • Unreal tem shaders incriveis e ótimos gráficos.

  • Godot é ótimo para projetos 2D e código leve.

Escolha com base no seu problema e suas capacidades.

Entendendo a base do POO em jogos

(Herança e componentização)

Por que jogos usam Programação orientada a objetos?

É uma forma mais facil de interpretar um jogo, que normalmente terá muitas entidades junto de seus atributos.

  • entidades: (personagens, mapas, construções, etc...)

  • atributos: (cor do modelo, vida, velocidade, etc)

Visto isso, entidades tem atributos.

Mas um atributo pode ser uma entidade?

Sim, isso é a ideia de componentização.

Ao invés de seguirmos com o que a herança faz, recebendo todos os atributos de uma classe e se tornando filha da mesma, na componentização colocamos "uma entidade" como atributo.

Quando isso é usado?

  • É o principal conceito necessário para o isolamento de código de um jogo. Sem a componentização, se torna quase impossivel criar sistemas complexos a longo prazo.

  • Eu deveria então sempre usar a componentização? Certos momentos será mais util usar os conceitos de herança e abstração, o objetivo é sempre pegar o caminho mais facil.

Vamos ver na prática.

Aulas e códigos disponiveis no github:

https://github.com/thiago-o-dev

  • (me sigam lá)

Site buildado:

https://thiago-o-dev.github.io/courses/