253792108-Apostila-Unity-r
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Book Unity.indb 1 16/05/2012 19:11:05
sumário
Capítulo 1 - Introdução à ferramenta Unity 3D 5
O quê, para quê, para quem, como.
Capítulo 2 - Interface da Unity 3D 9
Toolbar, Scene, Hierarchy, Project, Inspector e Game
Capítulo 3 - Principais conceitos 17
Game Objects, Game Components e Prefabs
Capítulo 4 - Iluminação 23
Light, Directional Light, Spot light e Lightmap
Capítulo 5 - Câmera 29
Perspective e Orthographic
Capítulo 6 - Física 37
Rigidbody, Colliders e Triggers
Book Unity.indb 2 16/05/2012 19:11:05
Capítulo 7 - Importação e criação de assets 43
Texturas 2D, audio, modelos 3D, animações, materiais e shaders e prefabs.
Capítulo 8 - Interface 47
GUI, GUI Text, GUI Texture, GUI Skin e GUILayout.
Capítulo 9 - Terrenos 53
Relevo, Textura, Árvores, Grama, Água, Pedras, Plantas, Vento, Sol, Packages
Capítulo 10 - Som 67
Audio Source e Audio Clip
Capítulo 11 - Criação de materiais e shaders 73
Tipos de Materias - introdução.
Capítulo 12 - Scripting e Asset Store 79
Outras dicas.
Book Unity.indb 3 16/05/2012 19:11:05
Capítulo 13 - Projeto de jogo completo, envolvendo arte e programação 85
13.1 Assuntos diversos:
Anexo A: Códigos da apostila;
Anexo B: Diagramas de classes;
Referências;
Declaração de direitos autorais.
Book Unity.indb 4 16/05/2012 19:11:05
Unity 3D
Capítulo 1
Introdução à ferramenta Unity 3D
Book Unity.indb 5 16/05/2012 19:11:05
U n i t y 3 D
Capítulo 1 - Introdução à ferramenta Unity 3D
“Agora a coisa ficou séria!”
- Meme
Unity 3D
O que vamos aprender neste capítulo:
Neste capítulo, iremos conhecer a Unity 3D e descobrir como
podemos desenvolver jogos com ela.
1. O quê, para quê, para quem, como:
A Unity 3D é uma engine focada no desenvolvimento de
jogos e aplicativos em tempo real. Não é a única existente no
mercado, porém é utilizada em grandes estúdios e também no
desenvolvimento de jogos indie. Sua versão gratuita satisfaz a
maioria das necessidades de quem precisa ou quer desenvolver
um jogo. Possui rápida prototipagem, editor de cena, gerência de
arquivos, excelente documentação e suporte.
Com poucos ajustes, o mesmo jogo pode ser exportado para
mais de uma plataforma. A Unity possui um sistema integrado
de gerenciamento e compressão de assets. Através de licenças
6
Book Unity.indb 6 16/05/2012 19:11:05
introdução à ferramenta Unity 3D
específicas é possível desenvolver para iOS, Android, Xbox 360,
PS3, Wii, além de Windows, Mac e Web.
É voltada para usuários com conhecimentos de medianos a
avançados, principalmente na parte de scripts, sendo recomendado
que o usuário já conheça alguma linguagem de programação.
• Faça o download da versão gratuita em
http://unity3d.com/unity/download/
• Faça o cadastro no (excelente) fórum em
http://unity3d.com/support/community
7
Book Unity.indb 7 16/05/2012 19:11:05
ANOTAÇÕES
Book Unity.indb 8 16/05/2012 19:11:05
Unity 3D
Capítulo 2
Interface da Unity3D
Book Unity.indb 9 16/05/2012 19:11:05
U n i t y 3 D
Capítulo 2 - Interface da Unity 3D
Janelas da Unity 3D
O que vamos aprender neste capítulo:
Neste capítulo, conheceremos o ambiente de desenvolvimento
da Unity 3D. Sua interface oferece ao desenvolvedor janelas
nomeadas “Views” (visões ou visualizações ou, melhor ainda, abas)
que possuem, cada uma, funções diferenciadas.
1. Interface
Antes de você abrir um novo projeto, lembre de não importar os
packages gratuitos, caso não seja necessário, para que seu projeto
não fique muito grande. Assim, quando você abrir a Unity e criá-lo,
você verá o seguinte:
• ● Toolbar
= Barra de ferramentas
Contém atalhos para todos os outros comandos da Unity, bem
como para comandos comuns, como copiar e colar e abrir e salvar
projetos e cenas.
• ● Scene
= Cena
10
Book Unity.indb 10 16/05/2012 19:11:05
Interface da Unity 3D
Área principal para posicionamento e orientação de objetos,
semelhantes a programas 3D. Possui uma câmera virtual para
visualização, movida pelo teclado e podendo sofrer deslocamento
e rotação com o botão do meio e direito do mouse (QWER e ASD
são atalhos).
As cenas também estão armazenadas na área de projeto e
normalmente são sinônimo para as fases do jogo.
É possível a separação da cena inicial como o menu de jogo,
por exemplo, ou o extremo de ter o jogo todo em uma única cena.
• ● Hierarchy
= Hierarquia
Nesta área é possível ter acesso a todos os elementos presentes
na cena e identificar seu nível de parentesco.
Através do menu “Create”, é possível criar um vasto número de
objetos como primitivas, terrenos e luzes.
Janela Hierarchy
11
Book Unity.indb 11 16/05/2012 19:11:05
U n i t y 3 D
• ● Project
= Projeto
Aqui fica a gerência de todos os assets e mídias presentes no
jogo (modelos 3D, sons, músicas e scripts). É uma imagem da pasta
do usuário. A manipulação dos arquivos utilizados no projeto é feita
por aqui, obrigatoriamente! Não esqueça de salvar sempre sua
cena e seu projeto. Também possui menu de “Create” para coisas
específicas (scripts, prefabs, pastas...).
Janela Project
• ● Inspector
= Inspetor /propriedades
Aqui temos acesso a todas as informações específicas para cada
objeto de jogo. Todos os objetos são, na verdade, um reservatório
que pode conter um infinidade de componentes, inclusive scripts.
12
Book Unity.indb 12 16/05/2012 19:11:05
Interface da Unity 3D
Janela Inspector
• ● Game
= Jogo
De grande praticidade, é possível testar o jogo facilmente. Temos
um preview do jogo, com estatísticas de performance e outras
informações, e pode ser colocado para rodar automaticamente em
tela cheia.
Janela Game
13
Book Unity.indb 13 16/05/2012 19:11:05
U n i t y 3 D
Estatísticas de cena (para medida de performance):
Estatísticas de cena
FPS: taxa de quadros exibidos por segundo;
Draw calls: número de passos de renderização para exibir
a cena (materiais e iluminação influenciam diretamente);
Batched: objetos que utilizam o mesmo material;
Tris e verts: quantidade de triângulos e vértices visíveis na cena;
Used textures: quantidade e memória usada pelas texturas em
cena;
Screen: resolução da tela e memória utilizada;
VRAM: utilização da memória de vídeo e memória de vídeo
máxima disponível;
VBO: número de malhas 3D únicas repassadas à placa de vídeo;
Visible skinned meshes e animations: número de malhas 3D
rigadas em cena e número de objetos animados em cena.
14
Book Unity.indb 14 16/05/2012 19:11:06
Interface da Unity 3D
Não podemos esquecer do botão de layouts (último à direita)
onde podemos escolher entre 4 layouts padrões e ainda salvar o
nosso:
Largo: adequado para manipulação de cena e objetos;
Alto: adequado para manipulação de atributos dos objetos;
4split: adequado para manipulação precisa de objetos;
2 por 3: adequado para rápida transição entre manipulação de
cena e teste do jogo.
Além do botão de play (central) que nos permite rodar nosso
jogo.
Vale a pena aqui mostrar a aba de configurações do projeto
exportado (build):
Configurações de build
Onde devemos acrescentar as cenas que desejamos que sejam
exportadas, para qual plataforma, escolher um ícone para o jogo,
entre outros detalhes.
15
Book Unity.indb 15 16/05/2012 19:11:06
ANOTAÇÕES
Book Unity.indb 16 16/05/2012 19:11:06
Unity 3D
Capítulo 3
Principais conceitos
Book Unity.indb 17 16/05/2012 19:11:06
U n i t y 3 D
Capítulo 3 - Principais conceitos
“How proud would the buildings of Rome
Look without a single stone”
- Avantasia
Jogo de exemplo mostrado durante as aulas
O que vamos aprender neste capítulo:
Vamos saber o que compõe uma cena na Unity, o que são
objetos de jogo e seus componentes e o que são objetos préfabricados.
1. Game Objects, Game Components, Prefabs
Em Unity, objetos de jogo (game objects) são recipientes que,
sozinhos, não tem função, mas que podem receber diversos
componentes (game components) para se diferenciar uns dos
outros. Malhas, texturas, códigos... são exemplos de componentes,
mas vários destes podem compor um único objeto de jogo.
18
Book Unity.indb 18 16/05/2012 19:11:06
Principais conceitos
Mas eles têm sempre o componente transform para localização
Entre os game objects, temos câmeras, luzes, interface textual
e primitivas básicas.
As primitivas básicas podem ser manipuladas como qualquer
editor de malhas 3d (3d max, maya, blender), e podemos movê-las,
girá-las e aumentá-las na tela (vide menu superior esquerdo).
DICA 1: Unity NÃO é um editor de malha 3D, como os programas
citados. Ele apenas manipula as malhas nele criadas e importadas.
Vamos ver como fazer a importação nos próximos capítulos.
19
Book Unity.indb 19 16/05/2012 19:11:06
U n i t y 3 D
DICA 2: NÃO fique preso ao visual. Enquanto as malhas não
ficam prontas nos programas de modelagem, use formas básicas
para dar vida (script) ao seu jogo. Trabalhe a lógica, a programação...
Os componentes definem todas as funções de um game object,
diferenciando-os. Existe uma grande variedade de componentes e
sua composição pode gerar resultados interessantes.
Atenção especial com as luzes e a câmera neste momento; elas
são muito importantes.
Um game object vazio pode ser colocado em cena apenas para
receber scripts de controle. Se um script não estiver anexado a um
game object em cena, ele não executará.
Quando você agrupar um conjunto de componentes em um
objeto complexo, e quiser salvá-lo para reproduzi-lo depois, você
tem um prefab. Veja mais sobre isso no capítulo 7.
20
Book Unity.indb 20 16/05/2012 19:11:06
ANOTAÇÕES
Book Unity.indb 21 16/05/2012 19:11:06
Book Unity.indb 22 16/05/2012 19:11:06
Unity 3D
Capítulo 4
Iluminação
Book Unity.indb 23 16/05/2012 19:11:06
U n i t y 3 D
Capítulo 4 - Iluminação
“Haja luz; e houve luz”
- Gênesis 1-3
Jogo de exemplo mostrado durante as aulas
O que vamos aprender neste capítulo:
Neste capítulo, iremos saber como tirar proveito das luzes e
seus tipos para criarmos uma boa cena em nosso jogo.
1. Point Light, Directional Light, Spot light e
Lightmap.
Existem 3 tipos básicos de iluminação dinâmica: direcional,
pontual e spot. Vamos ver as características de cada uma. Existe
ainda um outro tipo de iluminação, por mapa de luz, que na verdade
é uma textura aplicada a um objeto, estática, e não será vista aqui.
A iluminação deve ser utilizada de forma estratégica, não apenas
para permitir ou facilitar a visualização da cena, mas também para
contribuir com a narrativa do jogo (deixando, por exemplo, um
ambiente mais aconchegante, tenebroso...).
Para testarmos as luzes, colocaremos um cubo na cena e a
24
Book Unity.indb 24 16/05/2012 19:11:06
Iluminação
câmera principal configurada de maneira padrão. Não mexeremos
em nenhuma propriedade (veja capítulo posterior).
Repare que o cubo aparece às escuras.
Vamos colocar uma luz direcional.
25
Book Unity.indb 25 16/05/2012 19:11:06
U n i t y 3 D
Uma luz direcional é como se fosse uma luz colocada
infinitamente distante, afetando tudo na cena (imagine a luz do Sol,
por exemplo).
Estas são as propriedades de uma luz direcional:
Então, quando colocamos uma luz, podemos mudar o tipo dela.
Suas principais propriedades são a cor e a intensidade. Interessante
notar que podemos marcar o tipo de sombra dinâmica que esta
luz faz: nenhuma ou sombra “soft” ou sombra “hard”. Infelizmente
estes dois últimos tipos de sombras dinâmicas só são presentes
na Unity PRO.
Vamos mudar essa luz para o tipo spot:
Veja quanta informação na imagem acima. Mas fique calmo! A
imagem ficou pequena, mas não é nada que já não tenhamos visto.
Vamos, então, comentar cada aba:
26
Book Unity.indb 26 16/05/2012 19:11:06
Iluminação
Primeiramente uma do tipo spot ilumina tudo, em um cone
definido nas suas propriedades (ângulo e alcance). Na imagem
acima vemos como fica o cubo, na cena de jogo, iluminado por
aquela luz que estava em certa posição e foi apontada para ele,
com um certo alcance (range), ângulo de abertura (angle), cor e
intensidade. Fácil, não?
Por último, uma luz pontual (point light) ilumina igualmente em
todas as direções, afetando todos os objetos em seu alcance.
27
Book Unity.indb 27 16/05/2012 19:11:06
ANOTAÇÕES
Book Unity.indb 28 16/05/2012 19:11:06
Unity 3D
Capítulo 5
Câmera
Book Unity.indb 29 16/05/2012 19:11:06
U n i t y 3 D
Capítulo 5 - Câmera
“Luz, câmera, ação!”
- David W. Griffith, diretor norte-americano , 1875-1948
Jogo de exemplo mostrado durante as aulas
O que vamos aprender neste capítulo:
Neste capítulo, iremos ver a importância do uso das câmeras e
seus tipos em jogos 3d.
1. Perspective - Orthographic
A câmera é fundamental para visualização da cena no jogo,
sendo impossível fazer um jogo sem ela. Há, inclusive, uma
Main Camera já criada, independe da câmera virtual usada para
visualização da cena no editor.
A câmera não é somente utilizada para visualização da cena,
mas também seus atributos, vistos a seguir, são importantes para
definir certos padrões visuais que o jogo irá seguir (como ser 2D
ou 3D).
O principal atributo da câmera é se ela é do tipo perspectiva ou
ortogonal. A câmera em perspectiva leva em consideração o eixo Z,
mostrando profundidade e muitas vezes deformando a visualização
dos objetos de forma correspondente. A câmera ortogonal ignora
30
Book Unity.indb 30 16/05/2012 19:11:06
Câmera
o eixo Z, mostrando todos os objetos com o mesmo tamanho não
importando o quanto distantes eles estejam da câmera. Muitos
jogos de estratégia e de simulação utilizam a projeção ortogonal
como linguagem (visão lateral superior, “2.5 D”).
Apenas objetos visíveis pela câmera na cena são visíveis na tela
de jogo.
Uma câmera tem diversas propriedades: posição onde está,
direção para qual aponta (alvo), ângulo de abertura etc. Estas
propriedades são mostradas nas próximas imagens.
O exemplo abaixo mostra a mesma cena com uma visualização
em perspectiva e outra em ortogonal:
Cena de jogo com projeção em perspectiva.
Note que se consegue observar o volume da caixa e visualizar
uma parte do seu interior.
31
Book Unity.indb 31 16/05/2012 19:11:07
U n i t y 3 D
Mesma cena com projeção ortogonal.
Note a diferença na caixa, que parece “chapada”. Não houve
nenhuma outra mudança nas propriedades da câmera, além do
tipo de projeção.
Propriedades da câmera.
32
Book Unity.indb 32 16/05/2012 19:11:07
Câmera
Todas são obviamente importantes, mas vamos comentar
sobre algumas: A projeção pode ser perspectiva ou ortogonal. Em
perspectiva, temos o campo de visão, equivalente ao ângulo de
abertura da câmera, e os planos de corte de perto e de longe.
Ressalte-se que se o plano for mais perto ou mais longe do que o
mostrado no exemplo não é possível renderizá-lo.
Vemos a mudança para câmera ortogonal (ou ortográfica),
onde temos o tamanho como atributo, o tamanho do frustum de
visualização.
O termo Frustum, embora sem tradução, é fácil de se compreender,
pois representa o quanto a câmera consegue “enxergar”. Veja a
imagem abaixo.
Lembrando que em Unity o sentido do eixo Z negativo é para fora
da tela.
Uma última imagem mostrando a criação de duas câmeras, uma
de cada tipo.
33
Book Unity.indb 33 16/05/2012 19:11:07
U n i t y 3 D
Note a previsão de visualização da câmera na janela da cena.
Estas câmeras podem ser posicionadas e ou rotacionadas e
podemos mudar seu frustum apenas clicando e arrastando os
pontos brancos à frente. Podemos tratá-las como qualquer
outro objeto, instanciando, fazendo a ligação (parent), colocando
o componente físico rigidbody, ter mais de uma renderizando
diferentes porções da cena em diferentes posições da tela (como
num retrovisor de um carro) e colocar programação nelas, uma vez
que a Unity vem com alguns scripts de câmera pré-programados
(Experimente em Components->Camera Control).
Existem muitas possibilidades, ainda mais com a licença PRO.
Seja um diretor de jogos!
34
Book Unity.indb 34 16/05/2012 19:11:07
ANOTAÇÕES
Book Unity.indb 35 16/05/2012 19:11:07
Book Unity.indb 36 16/05/2012 19:11:07
Unity 3D
Capítulo 6
Física
Book Unity.indb 37 16/05/2012 19:11:07
U n i t y 3 D
Capítulo 6 - Física
“... ‘Haja Newton’ e tudo se iluminou.”
- Alexander Pope, poeta inglês, 1688-1744, para o epitáfio de Isaac
Newton, físico inglês
Jogo de exemplo mostrado durante as aulas
O que vamos aprender neste capítulo:
Neste capítulo, iremos conhecer como a Unity 3D usa a física
para facilitar a criação de jogos e criar resultados interessantes.
1. Rigidbody, Colliders e Triggers
Unity dá um excelente suporte para acrescentar física em seu
jogo de forma fácil. Vamos ver como isso pode ser feito:
Para que eu coloque um objeto em cena que se comporte
fisicamente, devo acrescentar o componente RigidBody (corpo
rígido) a ele. Pegando o exemplo do cubo da cena de iluminação,
acrescento outro cubo para servir de “chão”, ajeito as posições e
tamanhos e rotações e minha cena fica assim:
38
Book Unity.indb 38 16/05/2012 19:11:07
Física
Agora acrescento o componente RigidBody ao cubo (não ao chão)
e, automaticamente, quando der play na cena, ele cai! O objeto
está obedecendo às leis físicas da gravidade.
Como eu quero que este objeto agora colida com o chão, devo
então anexar o componente Collider e, especificamente neste
caso, BoxCollider. Mas não basta que o cubo seja BoxCollider, o
chão também precisa ter este componente de forma que colidam
entre si.
Existem 5 tipos de componentes de colisão, mas somente um de
cada vez pode ser anexado a um objeto. E isto em ordem crescente
de exigência de cálculos, ou seja, em ordem decrescente de
performance. São:
Sphere > Box > Capsule > Mesh > Wheel.
O Wheel Collider é especial para pneus de carros.
Triggers (gatilhos)
Muitas vezes queremos verificar as colisões apenas para saber se
um personagem ou objeto entrou em certa área (por exemplo, se a
água passou pela porta…). Se usarmos um componente collider vai
haver efetivamente colisão entre os objetos! Definir o componente
collider como trigger apenas faz com que todas as informações de
colisão sejam passadas, sem o choque físico entre o objeto trigger
e o objeto collider.
É fácil definir os triggers, veja na imagem:
39
Book Unity.indb 39 16/05/2012 19:11:07
U n i t y 3 D
Todo objeto que possui os componentes de collider ou trigger no
código, possui chamadas automáticas dos seguintes métodos:
void OnCollisionEnter(Collision collision) {};
void OnCollisionStay(Collision collision) {};
void OnCollisionExit(Collision collision) {};
void OnTriggerEnter(Collision collision) {};
void OnTriggerStay(Collision collision) {};
void OnTriggerExit(Collision collision) {};
Os Enters detectam o início da colisão; os Exits seu fim. E os Stays
são chamados a cada frame da colisão. Assim, os programadores
podem utilizar tais métodos para definir comportamentos (como
tocar um alarme ao se chegar em certa área ou receber um dano
ao colidir com um inimigo).
Com o collider e o trigger, consideramos apenas o componente que
descreve a área de colisão dos objetos; mas estes são estáticos,
isto é, não sofrem gravidade, inércia ou atrito.
O componente RigidBody simula objetos físicos dinâmicos. Com
ele os objetos passam a ser influenciados pela gravidade e recebem
impulsos vindos de colisões com outros objetos. Vamos analisar o
painel de propriedades de um objeto com RigidBody:
40
Book Unity.indb 40 16/05/2012 19:11:07
Física
Observando alguns detalhes, temos: massa relativa do objeto,
se ele usa gravidade ou não, além de restrições (constrains) de
movimento.
Você consegue, com isso, fazer um cilindro andando e pulando em
plataformas flutuantes?
41
Book Unity.indb 41 16/05/2012 19:11:07
ANOTAÇÕES
Book Unity.indb 42 16/05/2012 19:11:07
Unity 3D
Capítulo 7
Importação e criação de assets
Book Unity.indb 43 16/05/2012 19:11:07
U n i t y 3 D
Capítulo 7 - Importação e criação de assets
Jogo de exemplo mostrado durante as aulas
O que vamos aprender neste capítulo:
Neste capítulo, iremos ver como trazer nossos assets (texturas,
modelos 3d, animações, sons e músicas) de editores externos para
dentro da Unity.
1. Texturas 2D, audio, modelos 3D, animações,
materiais e shaders e prefabs.
Você, provavelmente, vai ouvir falar muito sobre asset
pipeline. Assets são todos os tipos de arquivos de mídia que você
pode importar para seu jogo. Pipeline (“encanamento”) é o fluxo de
produção ou importação destes assets e qual a melhor forma de
fazê-lo.
Unity dá suporte a um grande número de formatos: texturas
direto do Photoshop (.psd), modelos direto do Blender (.blend),
modelos .fbx exportados 3Dmax/Maya, imagens diversas (jpg,
bmp, png), animações, áudios (wav, mp3, que podem ser testados
dentro do editor), fontes e outros tipos de modelos 3d.
A importação pode ser feita diretamente, apenas arrastando
o asset para a pasta do projeto dentro do Unity, ou através do
menu Assets -> Import . A visualização é em tempo real, isto é, se
um arquivo for editado fora da Unity, esta atualiza a cena depois de
alguns instantes.
44
Book Unity.indb 44 16/05/2012 19:11:07
Importação e criação de assets
É importante saber como estes arquivos são criados fora
da Unity, mas não é propósito deste texto mostrar a criação dos
mesmos.
Prefabs
Prefabs podem ser compreendidos como objetos que serão
reutilizados na mesma cena, ou em diversas cenas diferentes, cuja
utilização traz diversos benefícios. Quando criamos o prefab de uma
pedra, por exemplo, podemos utilizar este mesmo modelo diversas
vezes na cena. E, se por algum motivo for necessário alterar algum
atributo dessa pedra, como o componente de colisão dela, em vez
de atualizarmos individualmente cada uma das possíveis centenas
de pedras na cena, podemos alterar somente o prefab, e este
automaticamente atualiza todas as instâncias utilizadas em todas
as cenas.
A utilização de prefabs não impede que cada instância do
GameObject possua características e atributos únicos (posição e
escala, por exemplo). Além das transformações, é possível alterar
variáveis específicas de componentes do prefab.
Criando: Assets->Create->Prefab.
Definindo: apenas crie um gameobject comum e adicione os
componentes que quiser. Estando pronto, arraste para cima do
prefab.
Usando: agora arraste o prefab para a sua cena. Você pode
apagar o gameobject original.
No código é possível se instanciar (criar) dinamicamente um
prefab através de um comando específico, assim como é possível
destruir um objeto:
Instantiate(nomePrefab, posicaoPrefab, rotacaoPrefab);
Destroy(nomeGameObject);
45
Book Unity.indb 45 16/05/2012 19:11:07
ANOTAÇÕES
Book Unity.indb 46 16/05/2012 19:11:07
Unity 3D
Capítulo 8
Interface
Book Unity.indb 47 16/05/2012 19:11:07
U n i t y 3 D
Capítulo 8 - Interface
“Na natureza nada se cria, tudo se transforma”
- Antoine Lavoisier, químico francês, 1743 - 1794
Jogo de exemplo mostrado durante as aulas
O que vamos aprender neste capítulo:
Neste capítulo, iremos ver como podemos criar interfaces
simples para nosso jogo.
1. GUI, GUIText, GUITexture, GUISKin,
GUILayout
GUI é sigla para Graphical User Interface, interface gráfica com
o usuário/jogador e tudo o que for usado para mostrar a situação
do jogo, pontos, vidas e informações diversas.
Para criar interfaces temos diversos componentes de Unity,
como GUIText e GUITexture que utilizaremos aqui em um exemplo
simples.
Veja que existe uma função especial no código para chamar a
interface: Chama-se OnGUI. Vamos utilizá-la:
48
Book Unity.indb 48 16/05/2012 19:11:07
Interface
Crie, deste modo, um objeto vazio na sua cena apenas para
receber o script de interface:
Lembre sempre de anexar seu script a pelo menos um objeto
em cena.
Veja como vai ficar a interface (simples):
Aqui temos um texto no canto superior esquerdo da tela, um botão
que exibe um texto e ativa algo quando apertado, no caso exibe
uma mensagem no console, a janela de console aberta onde estas
mensagens aparecem (normalmente fica minimizada no canto
inferior esquerdo), a mensagem no console do apertar do botão
junto com uma mensagem de erro automática (vide código a
seguir), e notamos que podemos pausar o andamento do nosso
jogo e adiantar um pouco por vez usando os botões de play e
pause logo acima. Quanta coisa!
49
Book Unity.indb 49 16/05/2012 19:11:07
U n i t y 3 D
Vamos ao código para isso tudo, não se assustem.
Naquele script de interface, além do padrão que vem com ele, é
isto o que deve entrar:
Aqui temos o método OnGUI, que é chamado sempre para
mostrar as coisas na tela. Um GUILayout para escrever um texto
(clássico) na tela, a criação de um botão em determinada posição
com certo tamanho (é um retângulo) e um certo texto, que se
apertado escreve um texto no console, dois atributos de textura
para serem usados nestes botões (repare na imagem a seguir que
as texturas public aparecem na interface da Unity e eu preciso
arrastar texturas até lá)
50
Book Unity.indb 50 16/05/2012 19:11:08
Interface
Um teste para conferir se essas texturas (uma ao menos) foram
carregadas está na NÃO exibição de uma mensagem de erro no
console; outro é a criação de botão usando uma dessas texturas
que, se apertado, exibe uma mensagem no console de forma
ligeiramente diferente.
Seja você programador ou não, aqui você acaba de fazer seu “Hello
World” em código, seu primeiro código em C# / Unity !
Parabéns!
51
Book Unity.indb 51 16/05/2012 19:11:08
ANOTAÇÕES
Book Unity.indb 52 16/05/2012 19:11:08
Unity 3D
Capítulo 9
Terrenos
Book Unity.indb 53 16/05/2012 19:11:08
U n i t y 3 D
Capítulo 9 - Terrenos
“A beleza está nos olhos de quem vê”
- Ditado popular
Imagem de terreno real – Monte Kilimanjaro, na África – para ser modelado durante as aulas
O que vamos aprender neste capítulo:
Neste capítulo, iremos ver como a Unity pode criar terrenos
de forma fácil e rápida.
1. Relevo, Textura, Árvores, Grama, Água,
Pedras, Plantas, Vento, Sol...
Unity é uma ferramenta famosa por produzir belos cenários
rapidamente. Vamos aqui criar um cenário de forma muito simples
para ver do que se é capaz.
Primeiro criaremos um terreno: vá em Terrain -> Create Terrain.
54
Book Unity.indb 54 16/05/2012 19:11:08
Terrenos
Como queremos criar uma montanha, então vamos selecionar a
primeira ferramenta no script, selecionar um tipo de “pincel” (Brush)
e clicar com o botão esquerdo do mouse no terreno para elevá-lo.
Dica: clicar com a tecla shift pressionada abaixa o terreno.
É como se estivéssemos mesmo “pintando montanhas no
chão”.
55
Book Unity.indb 55 16/05/2012 19:11:08
U n i t y 3 D
Com o tempo e pratica você ganha habilidade.
As duas ferramentas ao lado também influenciam na altura do
terreno. Faça seus testes.
Já a quarta ferramenta é para colocar textura no terreno. Vamos
colocar uma textura de grama e outra de pedra. Selecione a quarta
ferramenta e clique em edit texture.
A seguinte aba aparecerá. Escolha texturas as quais você tenha
importado via assets->import:
56
Book Unity.indb 56 16/05/2012 19:11:08
Terrenos
Para isso não se esqueça de clicar no pequeno círculo à direita de
Splat, nem de clicar em Add, senão a textura não será adicionada.
Quando isto acontecer você vai reparar que ela aparece perto de
seus pincéis, assim:
57
Book Unity.indb 57 16/05/2012 19:11:08
U n i t y 3 D
Agora vamos selecionar as pedras e “pintar” as montanhas
deixando o resto do terreno gramado. Resultado parcial:
E um lago será criado no meio das montanhas, como você verá
nas próximas imagens.
Vamos agora à quinta ferramenta, para se colocar árvores no
terreno. Clique nela e selecione edit trees.
Assim como você fez com as texturas, importe um asset de
árvore, sabendo que a Unity já vem com alguns prontos.
58
Book Unity.indb 58 16/05/2012 19:11:08
Terrenos
Espalhe estas palmeiras pelo cenário, cuidando da quantidade.
Prévia (note o “lago”):
59
Book Unity.indb 59 16/05/2012 19:11:08
U n i t y 3 D
A mesma coisa pode ser feita com grama ou pedras na sexta
ferramenta. Cuidado! Objetos pequenos assim não aparecem no
editor de cena. Você pode estar enchendo seu cenário deles sem
notar!
Veja como ficou a cena com a grama. Para isso é necessário dar
o play na cena:
Mas calma, para chegarmos a este resultado outras coisas
60
Book Unity.indb 60 16/05/2012 19:11:08
Terrenos
foram necessárias. Primeiro não podemos deixar de adicionar luz
ao ambiente. Uma ou mais luzes direcionais, para que tudo fique
convenientemente iluminado, sem saturar.
Também foi necessário configurar minha câmera principal para
esta posição fixa. Logo veremos como mover esta câmera.
A sétima e última ferramenta serve para editar configurações
gerais do terreno.
Mas aquele céu ali atrás ainda está muito sem detalhes. Vamos,
pois, acrescentar um skybox. Para isso, vamos às configurações
de renderização em Edit -> Render
E em skybox material, vamos importar um asset novo e colocar
ali (existem vários gratuitos prontos na Unity e na Asset Store -
veja último capítulo desta unidade). Esta configuração depende
também da configuração da câmera; mas, por padrão, funciona
bem assim como está.
Notem as nuvens ao fundo:
61
Book Unity.indb 61 16/05/2012 19:11:08
U n i t y 3 D
E, por último, vamos anexar um script à nossa câmera para
movê-la:
Existem quatro tipos de scripts prontos de câmera. Três deles
exigem um target, um alvo; mas vamos ficar com o Mouse Look,
o único que não precisa. Adicione este componente de controle
de câmera à sua câmera principal e você poderá olhar ao redor do
terreno criado. Repare no ângulo diferente da imagem:
E para movermos a câmera vamos adicionar nela um script
muito simples:
62
Book Unity.indb 62 16/05/2012 19:11:08
Terrenos
Crie um novo script CameraMovement, adicionando-o à sua
câmera e coloque isto escrito em seu Update:
Pronto! Já temos uma câmera livre que pode se movimentar por
todo o cenário, inclusive entrando nele! E lembre-se que não
adicionamos física em nada, portanto não há colisão.
Veja um novo ângulo do cenário, reparando que a posição da
câmera é diferente:
63
Book Unity.indb 63 16/05/2012 19:11:08
U n i t y 3 D
Que tal criarmos agora algum corpo andando pelo cenário? Lembre
de adicionar física (gravidade e colisão) a este corpo, de modo que
ele colida com o chão (o terreno já provê collider). E a câmera pode
não ser os olhos desse personagem, mas o seguir de cima a certa
distância (experimente as outras câmeras e não esqueça do alvo).
E este personagem pode ter uma animação de andar e pular. Unity
já provê um personagem de testes assim, pronto. Onde ele estará?
Dica: lembra quando você abriu a Unity e não importou os packages
gratuitos? Agora é a hora de conhecer alguns deles. Experiemente
o Asset -> Import Package -> Character Controller.
Dica: NUNCA se esqueça de salvar com freqüência tanto suas
cenas quanto seu projeto como um todo. E não mexa na pasta/
sistema de arquivos, a não ser por dentro do próprio editor, e você
evitará muitos problemas.
64
Book Unity.indb 64 16/05/2012 19:11:09
ANOTAÇÕES
Book Unity.indb 65 16/05/2012 19:11:09
Book Unity.indb 66 16/05/2012 19:11:09
Unity 3D
Capítulo 10
Som
Book Unity.indb 67 16/05/2012 19:11:09
U n i t y 3 D
Capítulo 10 - Som
“A música está em tudo”
- Victor Hugo, autor
Multidão em show de rock
O que vamos aprender neste capítulo:
Neste capítulo, iremos ver como colocar músicas e efeitos
sonoros nas nossas cenas de jogo.
1. Audio Source, Audio Clip
Vamos tratar de dois tipos de ocorrência de sons: aquele som
que toca o tempo todo de fundo, a música ambiente, e aquele efeito
sonoro que ocorre uma vez e acaba (um som de tiro, por exemplo).
Começando pela música de fundo da cena, vamos fazer da
seguinte maneira: adicione um componente de Audio Source (fonte
de áudio) à sua cena, pois, havendo som, algum game object deve
ser responsável por tocá-lo. Coloque em um game object separado,
ou use algum outro que você considere disponível e bom para isso.
68
Book Unity.indb 68 16/05/2012 19:11:09
Som
Aqui é importante reparar que ele pede o Audio Clip. Este deve
ser um arquivo de som (mp3, ogg, wav) que tenha sido importado
para seu projeto. Consulte o capítulo anterior de importação de
assets. Feito isto, arraste-o para ali. Outros detalhes importantes
são o volume e a marcação de Play On Awake. Awake é um
método chamado por todo objeto assim que é colocado, “acorda”,
em cena (é como se fosse um construtor para os programadores).
Deixe marcado o Play On Awake. Deixe marcado também o Loop.
Pronto! Sua música toca assim que inicia a cena e fica tocando
repetidamente.
Vamos agora ao efeito sonoro.
Faremos via código: no script da interface que fizemos
antes (lembram, do OnGUI?), criaremos um atributo público do
tipo AudioClip chamado SoundEffect1. E, no método Update,
colocaremos uma chamada para, ao se apertar a barra de espaço
do teclado, este efeito sonoro seja tocado uma vez. Vamos lá?
Digite o seguinte no Interface.cs ( o método Update já estará lá):
69
Book Unity.indb 69 16/05/2012 19:11:09
U n i t y 3 D
Fácil, não? PlayOneShot = toque uma vez e pare.
Agora, ajeite o editor de modo a colocar um efeito sonoro
qualquer associado ao script deste objeto. Assim:
70
Book Unity.indb 70 16/05/2012 19:11:09
Som
Feito! Agora você começa com uma música tocando e quando
aperta a barra de espaço (poderia ser um soco, um alarme...) emite
um som.
Você pode ter vários efeitos sonoros ao mesmo tempo, mas,
por motivos óbvios, deixe tocando apenas uma música de fundo.
71
Book Unity.indb 71 16/05/2012 19:11:09
ANOTAÇÕES
Book Unity.indb 72 16/05/2012 19:11:09
Unity 3D
Capítulo 11
Criação de materiais e shaders
Book Unity.indb 73 16/05/2012 19:11:09
U n i t y 3 D
Capítulo 11 - Criação de materiais e shaders
“Time is the fire in which we burn!”
- Dr. Tolian Soran, Star Trek Generations
Jogo de exemplo mostrado durante as aulas
O que vamos aprender neste capítulo:
Neste capítulo, iremos conhecer como aplicar texturas aos
nossos objetos em cena.
1. Tipos de materiais - introdução.
O que são? Responsáveis por definir as características visuais
de um objeto.
Material é um recipiente onde diversos componentes são
integrados, como texturas.
Shader é um código presente nos materiais e é responsável por
diversas informações importantes, como a reação de um objeto à
luz, deformações 3D na malha visualizada e até a quantidade de
texturas que podem ser aplicadas.
O vínculo entre um shader e um modelo 3d se dá através de um
material (lembrando: material é um contêiner para as propriedades
visuais dos objetos em cena).
74
Book Unity.indb 74 16/05/2012 19:11:09
Criação de materiais e shaders
A especificação de um shader define as propriedades que
este necessita para exibir um objeto (canal diffuse e specular,
por exemplo), enquanto o material define os valores para tais
propriedades.
Exemplificando, podemos imaginar um shader para exibir o
brilho metálico de um automóvel, aplicado em dois deles. Ambos
terão brilho metálico. Mas um, tendo um material vermelho, terá
um brilho metálico vermelho; e o outro, tendo um material azul, terá
um brilho metálico azul.
Deformamaisespecífica, umshaderdefine:
• O método de renderização de um objeto, incluindo o
uso de diversas variações, dependendo do dispositivo gráfico
do usuário;
• Todos os vertex e pixel-shaders usados na renderização;
• As propriedades que serão atribuíveis nas especificações de
materiais;
• Parâmetros numéricos ou de cor que também serão
atribuíveis nos materiais.
Um material define:
• Quais texturas usar para a renderização;
• Quais cores usar;
• Os valores de quaisquer outros assets.
Para criar um material: Assets->Create->Material. Para aplicálo
a um objeto, basta arrastá-lo até o objeto. Muda-se o material
na sua aba de inspector.
75
Book Unity.indb 75 16/05/2012 19:11:09
U n i t y 3 D
Repare nosso material com uma textura de tijolos e uma luz
vermelha aplicadas em nosso chão de exemplos anteriores.
Para a criação de shaders existe a linguagem ShaderLab (semelhante
a DX), bastante complexa e fora do escopo no momento.
76
Book Unity.indb 76 16/05/2012 19:11:09
ANOTAÇÕES
Book Unity.indb 77 16/05/2012 19:11:09
Book Unity.indb 78 16/05/2012 19:11:09
Unity 3D
Capítulo 12
Scripting e Asset Store
Book Unity.indb 79 16/05/2012 19:11:09
U n i t y 3 D
Capítulo 12 - Scripting e Asset Store
“Corra, Forest, corra!”
- Forest Gump
Jogo de exemplo mostrado durante as aulas
O que vamos aprender neste capítulo:
Neste capítulo, iremos ver algumas dicas finais de uso de
recursos da Unity.
1. Outras dicas
Começando pela Asset Store, que é um local onde os usuários
podem obter diversos recursos para seus jogos, sejam estes
modelos, texturas, ou até tutoriais, todos gratuitos, vale a pena
conferir.
80
Book Unity.indb 80 16/05/2012 19:11:09
Scripting e Asset Store
Scripting
OsistemadescriptingdaUnity3Déabrangenteeflexível,
oquepermite um fácildesenvolvimentode jogos bastante
completos e interessantes. Internamente os scripts são
executados através de uma versão modificada da biblioteca
Mono,uma implementação decódigo aberto para o sistema
.Net.
Esta biblioteca permite que os scripts sejam implementados
em qualquer uma de três linguagens, à escolha do programador:
javascript, C# ou Boo, esta última criada por um bgrasileiro. E não
existem desvantagens por se escolher uma ou outra, ficando a
escolha apenas por conta da familiaridade do programador.
A documentação oficial tem exemplos nas 3 linguagens. E é
possível, inclusive, combinar diferentes linguagens em um mesmo
projeto (claro, dentro de um mesmo arquivo, somente uma delas é
permitida).
Scripts são anexados como componentes em objetos. Então
é importante projetá-los de forma independente, para ganhar
flexibilidade e reuso.
Criando scripts:
Basta ir em Assets -> Create -> Script, ou pelo menu de create
da janela de projeto (também acessível pelo botão direito do mouse
neste).
Editando scripts
Basta clicar duas vezes sobre o script e o editor definido nas
preferências abrirá: Edit -> Preferences
81
Book Unity.indb 81 16/05/2012 19:11:09
U n i t y 3 D
O padrão é o MonoDevelop. O Microsoft Visual Studio só pode
ser escolhido em sua versão PRO; mas, caso haja a versão Express,
ainda assim é possível abrir manualmente os arquivos na pasta
do projeto Unity com ele. Você perde apenas a funcionalidade de
chamar o Visual Studio de dentro do editor da Unity.
Já vimos um pouco sobre códigos no capítulo sobre interface.
Porém, como não é o objetivo do presente texto aprofundar-se no
assunto, isto será visto em sala de aula, conforme a turma. Cabe
ressaltar, contudo, que nos códigos temos acesso automático a
alguns componentes como:
transform -> posicionamento, rotação e escala (todos GO tem);
rigidbody -> corpo rígido para o sistema de física;
renderer -> componente encarregado da exibição do objeto;
collider -> geometria de colisão para física ou trigger.
Além destes, temos muito componentes pré-existentes, assim
como scripts criados especificamente para cada jogo, aos quais
podemos obter acesso.
É através da programação que as belas imagens criadas criam
vida, interagem com o jogador e criam a diversão. Se aprofunde no
conhecimento dos códigos. Vale a pena!
82
Book Unity.indb 82 16/05/2012 19:11:09
Scripting e Asset Store
Outras dicas:
Apenas começamos a conhecer a ferramenta Unity. Muitos
jogos foram criados com ela, e ela foi criada especificamente
para criar jogos! Pesquise a respeito dos jogos de sucesso, inove,
domine a ferramenta, explore, fuce, faça demos! Tem muita coisa
escondida pelos menus de Help, Window, Edit então nem se fala,
temos Preferences (preferências gerais), Project e Render Settings
(configurações de projeto e exibição da imagem), rede... e para
otimizar isso tudo e rodar com suavidade em um Android sem
ocupar muita memória, por exemplo
Bons estudos.
83
Book Unity.indb 83 16/05/2012 19:11:09
ANOTAÇÕES
Book Unity.indb 84 16/05/2012 19:11:09
Unity 3D
Capítulo 13
Projeto de jogo completo, envolvendo
arte e programação
Book Unity.indb 85 16/05/2012 19:11:09
U n i t y 3 D
Capítulo 13 - Projeto de jogo completo,
envolvendo arte e programação
“Agora a coisa ficou realmente muito séria mesmo!”
- Meme
AngryBots – Jogo de Exemplo da Unity 3D
O que vamos aprender neste capítulo:
Neste capítulo, iremos revisar alguns conceitos vistos ao longo
de todo o curso e como integrá-los em um projeto único de jogo.
1. Diversos assuntos
Bem, estamos chegando ao final da apostila, e provavelmente
também ao final do módulo de Unity 3D. Aprendemos muito até
aqui e é hora de juntar todas as informações aprendidas em um
único projeto.
Converse com seu professor. Vocês juntos decidirão que jogo
fazer, pensando sempre no trabalho em equipe. Chame alguns
colegas da sua turma ou de outra para ajudar, cada um com uma
tarefa. Na verdade, assim são feitos os jogos.
Neste projeto DEVE haver um GDD, um Game Design Document,
um planejamento. Foi um de seus primeiros módulos, lembra?
Certamente durante os módulos anteriores você deve ter feito
um fluxo de telas, com tela de introdução, explicando talvez a
história do jogo, um menu inicial com os créditos. Afinal você quer
que todos saibam que foi você que fez o jogo, sem esquecer de
entrar em pausa, vai que o telefone toca, e colocar as telas finais
86
Book Unity.indb 86 16/05/2012 19:11:09
Projeto de jogo completo, envolvendo
arte e programação
de game over e the end. Vimos como fazer isso em Unity mudando
as cenas. (Application.LoadLevel(“nomeLevel”);)
E a interface? Sabia que é possível criar em Unity com câmera
ortográfica? Faça isso!
Lembra que mesmo estando no curso de programação você
fez um módulo de arte 3D básica? Então? Agora é a hora de usar
este conhecimento! Que tal pensarmos em um jogo simples, com
formas 3D fáceis?
Aproveitando, será que não é hora de pensar em fazer o módulo
de arte também, se você puder? Mesmo sendo um programador,
o conhecimento de outras áreas vai te auxiliar. O mesmo vale se
você for um artista! Você não viu programação aqui? O que achou?
Nada tão complicado, espero!
87
Book Unity.indb 87 16/05/2012 19:11:10
ANOTAÇÕES
Book Unity.indb 88 16/05/2012 19:11:10
Anexo A: Códigos da apostila
Todos os códigos porventura desenvolvidos para esta apostila
estão disponíveis online, no seguinte endereço:
http://seven-unity3d-apostila-codigos.googlecode.com/svn/
trunk
Instruções para acesso:
No Windows, baixar o programa TortoiseSVN na versão correta
do seu sistema operacional e instalar:
http://tortoisesvn.net/downloads.html
Após isso clicar com o botão direito do mouse em qualquer
pasta ou na área de trabalho e pedir SVN Checkout, colocar o
endereço acima e dar OK, pronto.
89
Book Unity.indb 89 16/05/2012 19:11:10
Anexo B: Diagramas de classes
Seguem alguns diagramas de classes de componentes da Unity:
90
Book Unity.indb 90 16/05/2012 19:11:10
Behaviour
91
Book Unity.indb 91 16/05/2012 19:11:10
Component
Renderer
92
Book Unity.indb 92 16/05/2012 19:11:10
Camera
93
Book Unity.indb 93 16/05/2012 19:11:10
Transform
94
Book Unity.indb 94 16/05/2012 19:11:10
GameObject
Referências
Desenvolvendo Games com Unity 3D, HIRATA, A., Ed. Ciência
Moderna, 2011
Criando Arte de Jogos 3D para Iphone com Unity 3D,
McDERMOTT, W., Ed. Campus, 2011
95
Book Unity.indb 95 16/05/2012 19:11:10
Direitos autorais
Todos os termos e imagens mencionados e reconhecidos como
marca registrada ou comercial são de responsabilidade de
seus proprietários. Não há nenhuma associação com produto
ou fornecedor apresentado no texto. No decorrer deste texto,
termos e imagens utilizados são, apenas e exclusivamente, de
uso ilustrativo e/ou educativo, sem intenção de infringir as regras
de sua utilização, permanecendo os direitos reservados à seus
respectivos criadores.
Nenhuma parte deste texto poderá ser reproduzida ou
transmitida, sejam quais forem os meios empregados, sem
autorização prévia, por escrito, do Grupo Seven.
Todo o esforço foi feito para fornecer a mais adequada
informação, livre de erros técnicos ou de conteúdo. Ressalve-se,
contudo, que não nos responsabilizamos pelo eventual uso e
resultado da informação fornecida.
Este texto à fornecido como está, sem garantia de qualquer tipo,
expressa ou implícita.
96
Book Unity.indb 96 16/05/2012 19:11:10