Escolar Documentos
Profissional Documentos
Cultura Documentos
INTRODUÇÃO À UNITY 5
27 Novembro, 2017
Com o que for aprendido neste artigo já é possível prototipar ideias simples de jogos. No entanto,
caso se queira aprofundar mais em outras ferramentas, um outro material é recomendado.
1
ESPAÇO
Todo o espaço utilizado na Unity se trata de um espaço 3D. Inclusive nos casos em que se está
desenvolvendo um jogo 2D, se dispõe o seu conteúdo em um espaço 3D. Neste espaço, existe uma
origem de um sistema de eixos coordenados definidos por x, y e z com as setas Vermelhas, Verdes e
Azuis respectivamente conforme a figura a seguir:
2
Nesta cena, há um objeto de jogo sendo selecionado, o plano. Um objeto selecionado tem suas bordas
destacadas de laranja e possui ferramentas de manipulação no espaço. O local em que os objetos são
posicionados é chamada Cena.
POSIÇÃO
3
Cada uma dessas sub abas da aba inspetor dizem respeito aos componentes do objeto. Neste
caso, o Cubo selecionado possui um componente Transform que permite a ele ter uma materialidade
no espaço, um componente Cube(Mesh Filter) que confere a sua geometria, a sua forma no mundo e
assim por diante. Você pode excluir ou adicionar componentes em objetos de jogo.
ROTAÇÃO
A ferramenta de rotação do transform é indicada pelas setas circulares, com ela é possível
girar o objeto pela cena. O seu ajuste numérico pode também ser feito na aba do componente
Transform do Objeto.
4
ESCALA
A ferramenta escala aumenta as dimensões do objeto. Por padrão, suas dimensões originais
são (1;1;1). Caso se queira dobrar um objeto de tamanho, muda-se o seu valor para (2;2;2). Caso só se
queira dobrar a dimensão X do objeto, muda-se o seu valor para (2;1;1).
Com o botão direito sobre a minha aba de conteúdos eu seleciono a opção Create -> C# Script.
Isso vai gerar um arquivo de texto que podemos editar. A unity já vem com uma plataforma de
edição de scripts, a monoDevelop. Caso ela não apareça de início, você pode ajustar nas preferências
da Unity para que esse seja o editor de código padrão seu.
Ao abrir esse Script, verá que ele já está preenchido com algum código como esse:
5
6
Vamos preencher a função Start(), ela é acionada apenas uma vez, quando o objeto
aparece na cena. Vamos escrever um pedaço de código que faça o nosso cubo ocupar a posição ( 3 ;
2.5 ; 0 ) da cena:
Na função Start() estou criando um objeto do tipo V ector3 que é um compartimento que
aceita 3 coordenadas: x, y e z. Defini os seus valores como 3, 2.5 e 0 respectivamente.
Então, posso manipular o seu componente transform ao especificar após essa palavra
chave que queremos alterar o seu registro de posição com position.
Finalmente, atualizo o valor da posição de meu transform atribuindo o valor do vetor pos.
Agora, para associar esse script ao nosso cubo, basta clicar no botão add component do nosso
cubo e escolher a opção script e escolher o Script que nós criamos.
7
Então, para testar e verificar se tudo está acontecendo conforme esperamos, é só clicar no
botão de executa indicado na figura:
8
Antes
Depois
Com esse mesmo pedaço de código você pode usar outras funções descritas na
documentação da Unity sobre a API de RigidBody, basta passar os argumentos corretos e você pode
ver o resultado de cada uma delas:
https://docs.unity3d.com/ScriptReference/Rigidbody.html
9
TEMPO
O tempo nas engines de jogos é medido em função do tempo decorrido entre um frame e
outro. Essa é a menor unidade de tempo que você pode ter acesso na Unity. Para descobrir qual foi o
tempo decorrido do último frame para o frame atual, você pode acessar a variável deltaTime da
classe Time.
Vamos criar um script que imprima no nosso log console esse tempo em tempo real, para isso,
escreveremos o comando dentro da função Update(). A unity chama a função Update toda vez que
o jogo troca de frame. Portanto, a maioria das funções que você for implementar no jogo habitarão a
função Update() do seu script.
10
Resultado:
Arredondando, entre um frame e outro, leva-se 0.016 segundos para passar um frame. Logo,
fazendo uma regra de três, pode-se perceber que meu computador está rodando esse protótipo a 62.5
frames por segundo.
Assim sendo, você pode se utilizar desse valor para manejar tempo e físicas que dependem do
tempo. Por exemplo, se você quiser que haja um tempo limite para o jogador terminar uma fase, você
pode criar um código semelhante ao a seguir:
11
Neste caso, a cada frame a função Update() soma o valor de deltaTime à variável
tempoDecorrido o seu valor. Sempre que esse tempo decorrido superar ou foi igual à marca de 1
segundo, ele atualiza o tempoDecorrido de volta para 0 e decrementa em uma unidade a variável
tempo que é inicializado com 300 segundos. Quando tempo for igual a 0, é impressa a mensagem para
o jogador que ele perdeu.
12
MOVIMENTO
VELOCIDADE
Um vetor velocidade não é nada mais e nada menos do que um Vector3 que incrementa o
vetor posição do objeto ao ser multiplicado pelo tempo decorrido desde o último frame, isto é, o
Time.deltaTime.
Vamos fazer o nosso cubo viajar em uma direção com uma velocidade constante com esse
script sendo preenchido em sua função Update():
13
S = So + v * t
14
Antes de testar, verifique que você setou o valor da velocidade o seu cubo para um valor
diferente de 0. Assim, veja ele andando em direção à x.
ACELERAÇÃO
Para tratarmos a aceleração de um corpo, vamos nos utilizar de forças. Mais difícil é de se tirar
um corpo de repouso quanto maior a sua massa. A componente massa de um objeto pode ser
alterada na aba componente de Rigidbody. O script para aplicar uma força ao nosso objeto será muito
parecida com a do nosso script de velocidade, veja:
15
Caso o seu objeto não aparente andar, não se preocupe, provavelmente a força não está
sendo grande o suficiente a ponto de tirá-lo da inércia por conta da sua massa ou por conta da força
de atrito da superfície em que ele está.
A ideia é que você pode modelar diferentes tipos de movimentos apenas utilizando a física
que você aprendeu no ensino médio. Seja criativo!
16
INTERAÇÃO
17
Note que uma força será aplicada no nosso cubo se e somente se nós mantivermos a barra de
espaço pressionada. Para ter acesso à qualquer entrada, basta acessar a classe Input, chamar a
função GetKey e botar em seu argumento o nome da tecla pertencente à classe KeyCode.
CONCLUSÃO
Pronto, daqui em diante você sabe seguir com suas próprias pernas. Aprimore os seus
conhecimentos lendo a documentação de outras API’s da Unity, vendo vídeos no youtube e
prototipando suas ideias de jogos. Em pouco tempo você poderá fazer milagres com a unity.
Bons estudos ;) !
18