05.02.2020 Views

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!