• Nenhum resultado encontrado

Book Unity.indb 1 16/05/2012 19:11:05

N/A
N/A
Protected

Academic year: 2021

Share "Book Unity.indb 1 16/05/2012 19:11:05"

Copied!
96
0
0

Texto

(1)
(2)
(3)

sumário

sumário

Capítulo 1

-Capítulo 1 -

 Introdução à ferramen

 Introdução à ferramen

ta Unity 3D

ta Unity 3D

5

5

O quê, para quê, para quem, como.

O quê, para quê, para quem, como.

Capítulo 2

-Capítulo 2 -

 I

 I

n

n

t

t

e

e

r

r

f

f

a

a

c

c

e

e

d

d

a

a

U

U

n

n

i

i

t

t

y

y

3

3

D

D

9

9

Toolbar, Scene, Hierarchy, Project, Inspector e Game

Toolbar, Scene, Hierarchy, Project, Inspector e Game

Capítulo 3

-Capítulo 3 -

 P

 P

r

r

i

i

n

n

c

c

i

i

p

p

a

a

i

i

s

s

c

c

o

o

n

n

c

c

e

e

i

i

t

t

o

o

s

s

1

1

7

7

Game Objects, Game Components e

Game Objects, Game Components e

Prefabs

Prefabs

Capítulo 4

-Capítulo 4 -

 I

 I

l

l

u

u

m

m

i

i

n

n

a

a

ç

ç

ã

ã

o

o

2

2

3

3

 Light, Directional Light, Spot light e L

 Light, Directional Light, Spot light e L

ightmap

ightmap

Capítulo 5

-Capítulo 5 -

Câmera

Câmera

2

2

9

9

 Perspective e Orthog

 Perspective e Orthog

raphic

raphic

Capítulo 6

-Capítulo 6 -

 F

 F

í

í

s

s

i

i

c

c

a

a

3

3

7

7

 Rigidbody

(4)

Capítulo 7

-Capítulo 7 -

 I

 I

m

m

p

p

o

o

r

r

t

t

a

a

ç

ç

ã

ã

o

o

e

e

c

c

r

r

i

i

a

a

ç

ç

ã

ã

o

o

d

d

e

e

a

a

s

s

s

s

e

e

t

t

s

s

4

4

3

3

Texturas 2D, audio, modelos 3D, animações, materiais e shaders e prefabs.

Texturas 2D, audio, modelos 3D, animações, materiais e shaders e prefabs.

Capítulo 8

-Capítulo 8 -

 I

 I

nt

nt

e

e

r

r

f

f

a

a

c

c

e

e

4

4

7

7

GUI, GUI Text, GUI Texture, GUI Skin e GUILayout.

GUI, GUI Text, GUI Texture, GUI Skin e GUILayout.

Capítulo 9

-Capítulo 9 -

Terrenos

Terrenos

5

5

3

3

 Relevo, T

 Relevo, T

extura, Árvores, Grama, Água, Ped

extura, Árvores, Grama, Água, Ped

ras, Plantas, V

ras, Plantas, V

ento, Sol, Packages

ento, Sol, Packages

Capítulo 10

-Capítulo 10 -

Som

Som

6

6

7

7

 Audio Source e Aud

 Audio Source e Aud

io Clip

io Clip

Capítulo 11

-Capítulo 11 -

Criação de materiais e shaders

Criação de materiais e shaders

7

7

3

3

T

T

ipos de

ipos de

Materias -

Materias -

introdução.

introdução.

Capítulo 12

-Capítulo 12 -

Scripting e Asset Store

Scripting e Asset Store

7

7

9

9

Outras dicas.

(5)

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;

(6)

U n i t y 3 D C a p í t u l o 1

(7)

U n i t y 3 D

6

Capítulo 1 -

 Introdução à ferramenta Unity 3D

“Agora a coisa ficou séria!”  - Meme

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

(8)

i n t r o d u ç ã o à f e r r a m e n t a U n i t y 3 D

7 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

(9)
(10)

U n i t y 3 D C a p í t u l o 2

(11)

U n i t y 3 D

10

Capítulo 2 -

 Interface 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

(12)

I n t e r f a c e d a U n i t y 3 D I n t e r f a c e d a U n i t y 3 D

11 Janela Hierarchy

 Á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.

(13)

U n i t y 3 D

12

• 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...).

• 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.

(14)

I n t e r f a c e d a U n i t y 3 D I n t e r f a c e d a U n i t y 3 D 13 Janela Game 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.

(15)

U n i t y 3 D

14

Estatísticas de cena (para medida de performance):

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.

(16)

I n t e r f a c e d a U n i t y 3 D I n t e r f a c e d a U n i t y 3 D

15

Congurações de build

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):

Onde devemos acrescentar as cenas que desejamos que sejam exportadas, para qual plataforma, escolher um ícone para o jogo, entre outros detalhes.

(17)
(18)

U n i t y 3 D C a p í t u l o 3

(19)

U n i t y 3 D

18

Capítulo 3 -

 Principais conceitos

“How proud would the buildings of Rome  Look without a single stone” 

- Avantasia

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.

(20)

P r i n c i p a i s c o n c e i t o s

19 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.

(21)

U n i t y 3 D

20

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.

(22)
(23)
(24)

U n i t y 3 D C a p í t u l o 4

(25)

U n i t y 3 D

24

Capítulo 4 -

 Iluminação

“Haja luz; e houve luz”  - Gênesis 1-3

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

(26)

I l u m i n a ç ã o

25 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.

(27)

U n i t y 3 D

26

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:

(28)

I l u m i n a ç ã o

27 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.

(29)
(30)

U n i t y 3 D C a p í t u l o 5

(31)

U n i t y 3 D

30

Capítulo 5 -

Câmera

“Luz, câmera, ação!” 

- David W. Griffith, diretor norte-americano , 1875-1948

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

(32)

C â m e r a  

31 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.

(33)

U n i t y 3 D

32

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.

(34)

C â m e r a  

33 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.

(35)

U n i t y 3 D

34

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!

(36)
(37)
(38)

U n i t y 3 D C a p í t u l o 6

(39)

U n i t y 3 D

38

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

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:

(40)

F í s i c a  

39  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.

(41)

U n i t y 3 D

40

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:

(42)

F í s i c a  

41 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?

(43)

 ANOT

(44)

U n i t y 3 D U n i t y 3 D C a p í t u l o 7 C a p í t u l o 7 I m p o r t a ç ã o e c r i a ç ã o d e a s s e t s I m p o r t a ç ã o e c r i a ç ã o d e a s s e t s

(45)

U n i t y 3 D U n i t y 3 D

44

44

Capítulo 7

-Capítulo 7 -

 I

 I

m

m

p

p

o

o

r

r

t

t

a

a

ç

ç

ã

ã

o

o

e

e

c

c

r

r

i

i

ã

ã

o

o

d

d

e

e

a

a

s

s

s

s

e

e

t

t

s

s

O que vamos aprender neste capítulo:

O que vamos aprender neste capítulo:

Neste capítulo, iremos ver como trazer nossos assets (texturas,

Neste capítulo, iremos ver como trazer nossos assets (texturas,

modelos 3d, animações, sons e músicas) de editores externos para

modelos 3d, animações, sons e músicas) de editores externos para

dentro da Unity.

dentro da Unity.

1.

1.

T

T

extura

extura

s

s

2D,

2D,

audio,

audio,

modelos

modelos

3D,

3D,

animações,

animações,

materiais e shaders e

materiais e shaders e

prefabs.

prefabs.

Você,

Você, provavelmente, provavelmente, vai vai ouvir ouvir falar falar muito muito sobre sobre assetasset

pipeline. Assets são todos os tipos de arquivos de mídia que você

pipeline. Assets são todos os tipos de arquivos de mídia que você

pode importar para seu jogo. Pipeline (“encanamento”) é o fluxo de

pode importar para seu jogo. Pipeline (“encanamento”) é o fluxo de

produção ou importação destes assets e qual a melhor forma de

produção ou importação destes assets e qual a melhor forma de

fazê-lo.

fazê-lo.

Unity

Unity dá dá suporte suporte a a um um grande grande número número de de formatos: formatos: texturastexturas

direto do Photoshop (.psd), modelos direto do Blender (.blend),

direto do Photoshop (.psd), modelos direto do Blender (.blend),

modelos .fbx exportados 3Dmax/Maya, imagens diversas (jpg,

modelos .fbx exportados 3Dmax/Maya, imagens diversas (jpg,

bmp, png),

bmp, png), animações, áudios (wavanimações, áudios (wav, mp3, que podem ser testados, mp3, que podem ser testados

dentro do editor), fontes e outros tipos de modelos 3d.

dentro do editor), fontes e outros tipos de modelos 3d.

A

A importação importação pode pode ser ser feita feita diretamente, diretamente, apenas apenas arrastandoarrastando

o asset para a pasta do projeto dentro do Unity, ou através do

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

menu Assets -> Import . A visualização é em tempo real, isto é, se

um arquivo for editado fora da Uni

um arquivo for editado fora da Unityty, esta atualiza a cena d, esta atualiza a cena depois deepois de

alguns instantes.

alguns instantes.

Jogo de exemplo mostrado durante as aulas

(46)

I m p o r t a ç ã o e c r i a ç ã o d e a s s e t s

45 É 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);

(47)
(48)

U n i t y 3 D C a p í t u l o 8

(49)

U n i t y 3 D

48

Capítulo 8 -

 Interface

“Na natureza nada se cria, tudo se transforma”  - Antoine Lavoisier, químico francês, 1743 - 1794

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:

(50)

I n t e r f a c e

49 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

(51)

U n i t y 3 D

50

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á)

(52)

I n t e r f a c e

51 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 !

(53)
(54)

U n i t y 3 D C a p í t u l o 9

(55)

U n i t y 3 D

54

Capítulo 9 -

Terrenos

“A beleza está nos olhos de quem vê”  - Ditado popular 

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.

(56)

 T e r r e n o s

55 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”.

(57)

U n i t y 3 D

56

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:

(58)

 T e r r e n o s

57 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:

(59)

U n i t y 3 D

58

 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.

(60)

 T e r r e n o s

59 Espalhe estas palmeiras pelo cenário, cuidando da quantidade.

(61)

U n i t y 3 D

60

 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:

(62)

 T e r r e n o s

61 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á.

(63)

U n i t y 3 D

62

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:

(64)

 T e r r e n o s

63   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:

(65)

U n i t y 3 D

64

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.

(66)
(67)
(68)

U n i t y 3 D C a p í t u l o 1 0

(69)

U n i t y 3 D

68

Capítulo 10 -

Som

“A música está em tudo”  - Victor Hugo, autor

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.

(70)

S o m

69  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á):

(71)

U n i t y 3 D

70

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:

(72)

S o m

71 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.

(73)
(74)

U n i t y 3 D C a p í t u l o 1 1

(75)

U n i t y 3 D

74

Capítulo 11 -

Criação de materiais e shaders

“Time is the fire in which we burn!”  - Dr. Tolian Soran, Star Trek Generations

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).

(76)

C r i a ç ã o d e m a t e r i a i s e s h a d e r s

75  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.

De forma mais específica, um shader define:

• O método de renderização de um objeto, incluindo o uso de diversas variações, dependendo do dispositivo gráco do usuário;

• Todos os vertex e pixel-shaders usados na renderização; • As propriedades que serão atribuíveis nas especicaçõ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á-aplicá-lo até o objeto. Muda-se o material na sua aba de inspector.

(77)

U n i t y 3 D

76

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.

(78)
(79)
(80)

U n i t y 3 D C a p í t u l o 1 2

(81)

U n i t y 3 D

80

Capítulo 12 -

Scripting e Asset Store

“Corra, Forest, corra!”  - Forest Gump

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.

(82)

S c r i p t i n g e A s s e t S t o r e

81 Scripting

O sistema de scripting da Unity3D é abrangente e flexível, o que permite um fácil desenvolvimento de jogos bastante completos e interessantes. Internamente os scripts são executados através de uma versão modificada da biblioteca Mono, uma implementação de có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

(83)

U n i t y 3 D

82

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!

(84)

S c r i p t i n g e A s s e t S t o r e

83 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

(85)
(86)

U n i t y 3 D C a p í t u l o 1 3

P r o j e t o d e j o g o c o m p l e t o , e n v o l v e n d o a r t e e p r o g r a m a ç ã o

(87)

U n i t y 3 D

86

Capítulo 13 -

 Projeto de jogo completo,

envolvendo arte e programação

“Agora a coisa ficou realmente muito séria mesmo!”  - Meme

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

(88)

P r o j e t o d e j o g o c o m p l e t o , e n v o l v e n d o a r t e e p r o g r a m a ç ã o

87 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!

(89)

 ANOT

(90)

89

89

 Anexo A:

 Anexo A: Códigos da apostila Códigos da apostila

Todos os códigos porventura desenvolvidos para esta apostila

Todos os códigos porventura desenvolvidos para esta apostila

estão disponíveis online, no seguinte endereço:

estão disponíveis online, no seguinte endereço:

http://seven-unity3d-apostila-codigos.googlecode.com/svn/ 

http://seven-unity3d-apostila-codigos.googlecode.com/svn/ 

trunk

trunk

Instruções para acesso:

Instruções para acesso:

No Windows, baixar

No Windows, baixar o programa To programa TortoiseSVN na ortoiseSVN na versão corretaversão correta

do seu sistema operacional e instalar:

do seu sistema operacional e instalar:

http://tortoisesvn.net/downloads.html

http://tortoisesvn.net/downloads.html

 Após

 Após isso isso clicar clicar com com o o botão botão direito direito do do mouse mouse em em qualquerqualquer

pasta ou na área de trabalho e pedir SVN Checkout, colocar o

pasta ou na área de trabalho e pedir SVN Checkout, colocar o

endereço acima e dar OK, pronto.

(91)

90

90

 Anexo B:

 Anexo B: Diagramas de classesDiagramas de classes

Seguem alguns diagramas de classes de componentes da Unity:

(92)

91 Behaviour

(93)

92

Component

(94)

93 Camera

(95)

94

(96)

95 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

Referências

Documentos relacionados

3.1 Estando o objeto do presente contrato de fornecimento, diretamente vinculado e relacionado ao Contrato de Gestão e Operacionalização do Hospital Estadual Dr.

Para Maslow, e Sutich, que não aceitavam mais suas próprias teorias por completo, pois faltava o fator espiritual, e os fatores incomuns da consciência, foi

Esta função facilita a congelação dos alimentos, aconselha-se activá-la 24 horas antes de introduzir grandes quantidades de alimentos frescos para congelar.. Esta

Objetivou-se avaliar a germinação de sementes de alfafa cultivar Crioula sob condições de inundação, submetendo as sementes aos seguintes períodos de imersão em água diariamente:

Por outro lado, a PMPA tem autuado as empresas que emitem notas fiscais para recebimento dos valores de locação alegando que, como os valores das locações não

O MUNICÍPIO DE UTINGA, pessoa jurídica de direito público interno, com Sede Administrativa na Rua XV de Novembro, n° 08, Centro - Utinga-BA, CEP

Vergueiro/RS, Nonoai/RS, Nova Alvorada/RS, Nova Araçá/RS, Nova Bassano/RS, Nova Boa Vista/RS, Nova Bréscia/RS, Nova Candelária/RS, Nova Esperança do Sul/RS, Nova Hartz/RS,

PROCURADOR-CHEFE DA REPÚBLICA DA PR-RS, com base no Regulamento do Programa de Estágio aprovado pela Portaria PGR/MPUnº 378, de 09 de agosto de 2010, alterada pela Portaria PGR/MPU