DEV Community

Camila M Belem
Camila M Belem

Posted on

[Crisálida] Por trás dos códigos - Parte 1

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.

Image description

Parar saber mais sobre conceitos iniciais da Unity, acesse o link

Esse é um ScriptableObject criado, ele é responsável por ter todas as cenas

Image description

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.
Image description

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.
Image description
Image description

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://edisciplinas.usp.br/pluginfile.php/4996986/mod_resource/content/1/Introdução aos Scriptable Objects.pdf

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://youtu.be/raQ3iHhE_Kk

https://www.monkeykidgc.com/2021/02/pass-parameters-with-scriptableobject-events-in-unity.html

https://docs.unity3d.com/Manual/class-ScriptableObject.html

Discussion (0)