Em um post anterior, mostrei como criar Presets na Unity e como isso pode facilitar nosso trabalho enquanto desenvolvemos nosso jogo ao salvar as propriedades de componentes e assets para reutilizar. Isso já é ótimo, mas podemos ir um passo além. Podemos automatizar a aplicação de um Preset dependendo de nomes de arquivos, pastas e extensões com o Preset Manager.
Porém, antes de começarmos a usar o Preset Manager, precisamos criar um Preset para o componente ou asset. Caso ainda não saiba como fazer isso, você pode ler o post que publiquei em que ensino como criar Presets na Unity.
Além disso, é importante ter em mente que Presets são aplicados somente no momento em que um componente é adicionado a um GameObject ou um asset é criado. Caso fizermos uma alteração no Preset que gostaríamos que fosse aplicado a todo projeto, precisamos fazer isso manualmente.
Como criar um Preset padrão para um componente ou asset
Para abrir a janela do “Preset Manager”, no menu superior, clique em “Edit > Projects Settings”.
Na janela que se abriu, clique em “Preset Manager” na lista no lado esquerdo.
Em seguida, clique no botão “Add Default Preset”. A Unity irá exibir uma lista com os itens que aceitam um Preset padrão. Você pode procurar pelo item que você quer navegando pelas opções, ou usar a caixa de pesquisa.
Após selecionar para qual item você quer criar um Preset padrão, ele será adicionado na janela e algumas opções irão aparecer.
O primeiro campo “Filter”, é usado para filtrar quando um Preset deve ser usado. Vamos ver como ele funciona com mais detalhes depois.
No segundo campo podemos selecionar qual Preset queremos usar quando um componente é adicionado a um GameObejct ou um asset é criado. Para isso podemos clicar na bolinha e na janela que se abriu selecionar o Preset.
Podemos também clicar e arrastar o Preset até esse campo.
Outra forma de adicionar um Preset ao “Preset Manager” é selecionar o Preset na janela “Project” e na janela “Inspector”, embaixo do nome do Preset, clique no botão “Add to Rigibody2D default”. Fique atento porque o nome do botão irá mudar dependendo de qual componente pode usar o Preset.
Podemos ainda adicionar vários Presets diferentes ao mesmo componente ou asset. Para isso clique no sinal de mais no final da lista de Presets.
Porém a Unity irá aplicar os Presets na ordem em que aparece na lista. Sem nenhum filtro, isso significa que o último Preset será sempre escolhido.
Como usar filtros
Caso não criarmos nenhum filtro, o Preset será aplicado automaticamente toda vez que adicionarmos o componente ou importarmos o asset. Porém, podemos criar filtros para definir quando um Preset deve ser usado.
Por exemplo, digamos que toda vez que adicionarmos o componente “Box Collider 2D” a um GameObject nomeado “Trap” queremos que a propriedade “Is Trigger” seja marcada. Para fazer isso, primeiro criamos um Preset com a configuração desejada. Em seguida, adicionamos o Preset ao “Preset Manager” e inserimos o nome do GameObject no campo “filter”.
Porém para criar filtros mais avançados precisamos criar uma busca glob, que é uma forma de criar padrões nos permite encontrar arquivos, pastas e extensões.
Para isso, precisamos iniciar o filtro com glob:
e entre aspas escrever o filtro. Por exemplo, o filtro glob:”Sprites/*”
irá aplicar o Preset a todos assets que forem criados na pasta “Sprites”.
Podemos usar o seguinte caracteres para criar um padrão para ser usado na busca glob:
Símbolo | Descrição |
* | Corresponde a qualquer número de caracteres, inclusive nenhum. |
? | Corresponde com um caractere qualquer. |
[…] | Corresponde a um intervalo de caracteres. |
(Sprites|sprites) | Pesquisas entre parênteses, separadas por uma barra vertical (que significa “ou”), indicam que os resultados do filtro podem corresponder a um dos padrões. |
** | Corresponde a zero ou mais diretórios e subdiretórios. |
Alguns exemplos que podem ser úteis:
Busca glob | Descrição |
glob:”Textures/*” | Corresponde a qualquer o arquivo da pasta Sprites |
glob:"Textures/*.png" | Corresponde a qualquer arquivo .png que está na pasta Textures |
glob”Textures/*_normal.png” | corresponde a qualquer arquivo .png que termine com _normal |
glob:"Textures/arquivo-?.png" | Corresponde a qualquer na pasta Textures com o nome filename seguido por um caractere. Ex: arquivo-1, arquivo-a. |
glob:"Textures/arquivo-[0-9].png" | Corresponde a qualquer na pasta Textures com o nome filename que termina com um número entre 0 e 9. |
glob:(”Textures/*.png|textures/*.png”) | Corresponde a qualquer arquivo png na pasta Textures ou textures. |
glob:”Textures/**.png” | Corresponde a qualquer arquivo png na pasta Textures ou em subpastas. |
Uma nota importante, os filtros diferenciam maiúsculas e minúsculas, ou seja, “arquivo” é diferente de “Arquivo”.
Como mudar a ordem dos Preset
Como mencionado anteriormente, a Unity irá aplicar os filtros na ordem em que aparece no “Preset Manager”, isso significa que caso vários Presets possam ser aplicados a um mesmo componente ou asset, a engine irá escolher aquele que aparece mais próximo do fim da lista. Por isso é importante a lista organizada de forma lógica.
Para mudar a ordem dos Presets na lista clique no símbolo “=” do Preset que você quer mover e arraste para sua nova posição.
Como remover um Preset padrão de um componente ou asset
Podemos remover um Preset do “Preset Manager” selecionando ele na janela do “Preset Manager” e clicando no sinal de menos. Se clicarmos no sinal de menos sem nenhum Preset selecionado, o último item da lista será removido.
Também pode selecionar o Preset na janela “Project” e na janela “Inspector” clicar no botão “Remove from TextureImporterdefault”. Da mesma forma de quando adicionamos o Preset o nome do botão irá mudar dependendo de qual componente pode usar o Preset. Contudo tenha cuidado ao fazer isso, pois caso você tenha adicionado o mesmo Preset com diferentes filtros essa opção irá remover todos.
Conclusão
Presets facilitam bastante nosso trabalho salvando as configurações de componentes, assets e configurações de projeto para serem reutilizadas. E junto do Preset Manager podemos automatizar a aplicação do Presets, eliminando mais uma tarefa repetitiva do nosso projeto. Assim podemos reduzir a quantidade de erros que acontecem durante o desenvolvimento, e usar nosso tempo para focar em aspectos mais importantes do jogo.