Gostaria de compartilhar o desenvolvimento do meu projeto pessoal, um jogo desenvolvido em Unity C#, estou usando esse projeto para me aperfeiçoar em padrões e arquitetura de software.
O que é o projeto?
É um jogo do gênero visual novel, com mecânicas de point n click e foco em narrativa e tomada de decisões.
O jogo está sendo desenvolvido em Unity, por ser mais acessível e pela equipe ter mais familiaridade.
O projeto está com uma campanha no Apoi.se, pra saber mais acesse o link
Estrutura inicial
Nosso projeto está sendo estruturado grande parte usando ScritableObject.
Um ScriptableObject é um contêiner/objeto de dados que pode ser usado para salvar grandes quantidades de dados. Um dos principais casos de uso de ScriptableObject é reduzir o uso de memória do seu projeto, evitando cópias de valores.
Vantagens
Pode ser editado em tempo de execução, facilita edições de dados (uma ótima solução Game Designers), é otimizado e possui persistência de dados.
Motivos para ser usado
Por ser um jogo de tomada de decisões, irá existir algumas cenas de gameplay e algumas interações com objetos, o uso do ScriptableObject deixará mais pratico a personalização das cenas e objetos.
Junto com ScriptableObject está sendo utilizado a parte de Editor da Unity, onde possibilita criar interface/janelas mais amigáveis e customizadas.
Exemplo
Por ter N cenas de gameplay, essas cenas sempre terão os mesmos componentes mudando apenas o conteúdo, tendo isso em mente, o jeito que arquitetei foi possuir apenas uma cena da Unity, onde terá os componentes (gameObject) necessários para montar a cena de gameplay e usar o ScriptableObject para trocar o conteúdo desses componentes.
Parar saber mais sobre conceitos iniciais da Unity, acesse o link
Esse é um ScriptableObject criado, ele é responsável por ter todas as cenas
Para criar é necessário que sua classe herda de ScriptableObject, o atributo CreateAssetMenu facilita na criação e personalização.
Você pode criar funções, variáveis conforme for necessário.
A forma de utilização dos ScriptableObject está sendo por referência, assim não há necessidade do ScriptableObject estar na cena.
O script Controller é adicionado em um gameObject na cena da Unity, assim pode ser utilizado os dados dele para o que precisar.
A vantagem de fazer assim é que caso precise mudar os dados (adicionar/remover cena) não é necessário abrir uma cena da Unity, procurar o gameObject e mexer nele.
No próximo artigo falarei mais sobre o script de Editor desse ScriptableObject.
Links de referência:
https://www.raywenderlich.com/2826197-scriptableobject-tutorial-getting-started
https://gamedevelopertips.com/unity-scriptableobject/
https://unity.com/pt/how-to/architect-game-code-scriptable-objects
https://www.monkeykidgc.com/2021/02/pass-parameters-with-scriptableobject-events-in-unity.html
Top comments (0)