Pular para o conteúdo principal

Destaque

Unity - Organização de Projetos

Hierarchy

Conforme uma scene se torna cada vez maior e com mais objetos nela é importante mantê-la organizada, para facilitar o trabalho, é recomendável que sejam usados emptys como folders e subfolders, para que seja fácil encontrar objetos específicos em cena.

Project

Assim como os objetos em cena, também é preciso manter organizado as suas pastas, assim você passa menos tempo procurando coisas e mais tempo fazendo coisas.
É importante manter tudo dividido em categorias. um Exemplo de organização abaixo
  • Assets
    • Scripts
      • Managers
      • Scriptables
      • Systems
      • Units
      • Utilities
    • Audio
      • Musics
      • Sounds
    • Prefabs
    • Resources
      • Models
      • Materials
      • Textures
      • Scriptable Objects
    • Scene
    • Spriter

Game Managers

Não é muito recomendado usar métodos, como dizer... aqueles que tem Find no nome 😬 eles são ruins para a performance do jogo se usados frequentemente.
O ideal é usar um Game Manager, mas qual a diferença ? eu ainda vou ter que usar um "Find()" para ter a referencia do Game Manager né ? NÃO, não vai.

Game Managers seguem o padrão Singleton a ideia é basicamente que ele tenha apenas uma única instância, o que facilita que ele seja "encontrado".
Essa aqui é a estrutura básica de um Singleton

O principal está na linha 8, que é a variável Instance, essa variável é static, logo ela pertence a classe e não a instância, em outras palavras, ela seria compartilhada entre todas as instancias dessa classe.
Logo no Awake é feita uma verificação se a variável é nula, e se for a instancia é setada como Instance, senão, aparece um aviso no console, também poderia ter um destroy ali... (a ideia disso é verificar se ela é única)
Exemplo de como Acessar um Singleton

Agora vamos falar sobre a função de um Game Manager.
Managers, significam gerentes, logo a ideia é que eles gerenciem, monitorem outros objetos. a ideia é que Game Managers, cuidem de um grupo de objetos similares.

Por Exemplo ao criar um jogo de Tower Defense, teríamos inimigos vindo em ondas. então eu poderia ter ao menos 2 managers partindo disso, os chamarei de WaveManager e EnemyManager.
O WaveManager cuidaria das ondas de inimigos, eu poderia ter uma List de uma classe que eu mesmo criaria chamada Wave (ela armazenaria coisas como quantidade de inimigos da onda, o nível deles, o tipo de inimigo, etc), o Manager seria responsável por iniciar as ondas e verificar se elas terminaram para poder começar a próxima, mas para poder saber se uma onda terminou eu precisaria saber quantos inimigos ainda estão vivos, e ai que entraria o EnemyManager ele teria uma List de todos os inimigos vivos (e montada sem usar "Find" o inimigo poderia adicionar a si mesmo nessa List quando fosse instanciado), e eles também poderia armazenar outras informações como como o inimigo morreu ? quem sabe para futuramente ser exibido em uma tela de estatísticas...

Game Modes

Esse aqui não é exatamente um padrão, mas o livro que citei nas referencias recomenda e a ideia é boa.
Consiste basicamente de uma Classe que checa as condições de vitória e de derrota do jogo, é algo bem simples, é basicamente usar as informações dos Game Managers para saber se você ganhou ou perdeu o jogo e após isso carregar a tela de vitória ou derrota por exemplo. 

Um exemplo disso usando um TowerDefense, nesse caso eu checaria, a quantidade de hordas restantes e a quantidade de inimigos restante e se ambos fossem menor ou igual a 0, isso indicaria que eu ganhei.
Mas se a vida da minha base fosse menor ou igual a 0, isso indicaria que perdi.

A vantagem de usar esse GameMode é que ele é meio que independente. por exemplo eu estou fazendo um jogo em que o objetivo é matar todos os inimigos eu tenho um EnemyManager. eu poderia simplesmente fazer com que ele cuidasse da logica de vitória e derrota, mas ao fazer isso caso eu quisesse adicionar um outro modo de jogo ao meu jogo eu não poderia usar o EnemyManager no outro modo por que meio que poderia entrar em conflito com o objetivo do novo modo de jogo, que poderia ser por exemplo manter um NPC vivo enquanto você o escolta de um ponto a outro.

Observações:

Existem inúmeras formas de se organizar um projeto, não existe uma forma correta, e recomendo que assista o vídeo abaixo nas referências, ele explica varias outras coisas úteis.

Referências:

Vídeo: Unity Architecture for Noobs - Game Structure

Livro: Hands-On Unity 2021 Game Development


Comentários