Tutorial: Utilizando Atributos no Unity3D
Saudações, leitores,
na publicação de hoje, diferentemente das semanas passadas onde escrevi artigo, trago dessa vez um tutorial onde estarei falando sobre o uso de atributos no Unity3D.
Mas o que são esses atributos no Unity3D?
Segundo o manual oficial da Unity:
“Atributos são marcadores que podem ser colocados acima de uma classe, propriedade ou função em um script para indicar um comportamento especial.”
“Atributos são marcadores que podem ser colocados acima de uma classe, propriedade ou função em um script para indicar um comportamento especial.”
Entretanto, seu uso mais corriqueiro é na declaração das variáveis e veremos ao longo do tutorial como utilizá-los e para o que serve cada um deles.
Quais são?
Vou relacionar aqui os que mais utilizo:
- Header(“Texto”)
- Space(10)
- Tooltip(“Texto”)
- ContextMenuItem(“Texto”, “Método”)
- Range(0,10)
- Multiline (5) ou Multiline
- HideInInspector
- SerializeField
- System.Serializable
Para utilizá-los, em C#, é necessário colocá-los entre colchetes. Ex: [Header(“Texto”)], [Space(10)], [Range(0,100)]. O atributo deve ir sempre uma linha antes da variável na qual será atrelado e sobre a qual terá efeito. Não utiliza-se o ; para finalizar a instrução.
Vamos observar agora, cada um em particular.
Tomemos como exemplo o seguinte código base e percebam como essas variáveis (todas públicas) são exibidas no Inspector;
Header(“Texto”)
Como o próprio nome indica, é um cabeçalho e seu uso serve para criar categorias, ou seja, separar por grupos específicos as variáveis que são apresentadas no Inspector. Importante lembrar que não tem qualquer interferência no jogo, ou seja, é apenas visual mesmo. Observe as figuras abaixo. OBS: o texto entre os parênteses (e aspas) é o que será exibido no cabeçalho.
Space(10)
O Space é utilizado para criar um espaçamento entre dois elementos no Inspector (duas variáveis no caso). Assim como o Header e a maioria dos demais atributos apresentados, não tem qualquer influência no gameplay, sendo também somente estético. Reparem nos espaços entre “vidas” e “pontos” e entre “game over” e “força”. OBS: o número entre os parênteses pode ser alternado para mudar o tamanho desse espaçamento.
Tooltip(“Texto”)
Para quem já é familiarizado com essa palavra Tooltip, já deduz o seu funcionamento na Unity também. Assim como no desenvolvimento web, esse atributo é utilizado para criar uma “dica” (numa tradução livre e popular de tooltip) para um determinado elemento. Seu uso é bastante simples, colocando no lugar de “Texto” a dica que deseja exibir. Esse tooltip irá aparecer sempre que posicionar o mouse sobre a variável a que estiver atrelado. Veja figuras abaixo:
ContextMenuItem(“Texto”, “Método”)
Esse atributo já tem algumas particularidades. Em sua sintaxe, utiliza-se o “Texto” que é o conteúdo a ser exibido quando clicarmos com o botão direito sobre a variável em que está atrelado. Já em “Método”, indicamos uma função que será executada. Observando as figuras fica bem simples de entender:
Como dito, se clicarmos com o botão direito sobre a variável que possui o atributo, um item de menu irá aparecer. Esse item é clicável e, se for acionado, irá executar o método indicado.
No exemplo acima, o nome do jogador irá mudar de John Doe para Fábrica de Jogos.
Vou aproveitar para fazer um pequeno adendo aqui. Não está relacionado aos atributos que estamos discutindo, mas é interessante também quando estamos tratando de inspector e valores de variáveis. Quando adicionamos um script em um gameobject, assim como qualquer outro componente, podemos visualizar aquela engrenagem pequena no canto direito: . Quando clicamos nessa engrenagem, um menu é exibido e nele temos a opção reset. Essa opção reinicia todos os valores para o padrão (valor inicial).
Pois bem, se nesse script contiver uma função com nome Reset com valores atribuídos às variáveis, ao clicarmos nessa opção reset da engrenagem, são os valores definidos nessa função que serão atribuídos no inspector. Vide figura abaixo:
Nesse exemplo, o método ResetNome é acessado pelo atributo [ContextMenuItem(“Texto”,”Método)] e, clicando no item, apenas o nome do jogador será alterado. Porém, se optarmos por dar um Reset no componente inteiro (pela engrenagem), todas as variáveis definidas no método Reset, serão alteradas para os valores atribuídos.
Range(0,50)
O Range é bastante simples e tem um efeito bem legal. Utiliza-se para definir valores mínimos e máximos que uma variável pode assumir e, de quebra, coloca um slider no inspector para facilitar a definição de valor. Ainda, mantém o quadro normal, caso o usuário opte por digitar o valor diretamente.
Multiline(5) ou Multiline
Uma variável pública do tipo string, por padrão, permite que escrevamos apenas em 1 linha. Caso se deseja fazer quebras de linha, é necessário o uso do \n indicando onde serão essas quebras. Sendo assim, o atributo Multiline, além de tornar o visual do campo muito mais agradável, interpreta também as quebras nas linhas (quando apertamos o enter). Sua sintaxe é bem simples, basta utilizar [Multline] antes da variável. O tamanho padrão é de 3 linhas, mas, opcionalmente, pode-se indicar outro valor usando os parênteses.
HideInInspector
Utiliza-se esse atributo para aquelas variáveis públicas que não desejamos que apareça no Inspector. Desse modo, a variável continua pública no que se refere à questão de acesso, mas não será mais exibida no Unity.
Repare que as variáveis “vidas”, “pontos” e “gameOver” não mais aparecem no Inspector.
SerializeField
Tem o funcionamento inverso do HideInInspector, ou seja, faz ser exibido no Inspector as variáveis definidas como privadas (private). Também mantem as propriedades de acesso, ou seja, as variáveis aparecem no Unity, mas continuam privadas.
System.Serializable
Tem funcionamento semelhante ao SerializeField, porém é aplicado apenas a “class”, “struct”, “enum” e “delegate”. Não funciona se tentar aplicar diretamente sobre uma variável.
Quando criamos uma classe que não deriva de MonoBehaviour, ela não é exibida no Inspector. Para podermos editá-la diretamente pelo Unity então, utilizamos o atributo [System.Serializable].
Repare que, antes de colocarmos o atributo, a variável pública status do tipo StatusJogador (classe), não é exibida no Inspector.
Porém, ao colocarmos o System.Serializable, passamos a ter acesso à classe e suas propriedades (todas as variáveis que a compõe).
Aos adeptos do UnityScript (JS), não fiquem tristes. Os atributos funcionam também, mudando pouca coisa na sintaxe. Enquanto para os usuários do C#, os atributos precisam estar entre colchetes [ ], os programadores em JS vão declarar o atributo precedido por um @, conforme mostra a figura abaixo.
Bom gente, é isso. Espero que gostem do tutorial e que lhes seja útil.
Fiquem com Deus,
Comentários