Transcript
Page 1: 92015985 Apostila Unity

Desenvolvendo jogos com

Unity 3D

Prof. Miguel Baggio

Page 2: 92015985 Apostila Unity

2 - Oficina de Desenvolvimento de Jogos – Unity 3D - Miguel Angelo Baggio

Sumário 1 Introdução ao ambiente UNITY 3D ................................................................................................. 3

2 Painéis do Unity 3D ......................................................................................................................... 3

2.1 Painel Hierarchy ...................................................................................................................... 3

2.2 Painel Project .......................................................................................................................... 5

2.3 Painel Inspector ...................................................................................................................... 5

3 Funções de controle de câmera (modo edição) ............................................................................. 5

3.1 Afastar a visão da cena (zoom) ............................................................................................... 5

3.2 Girar a tela............................................................................................................................... 5

3.3 Puxar e empurrar a tela .......................................................................................................... 5

3.4 Centralizar um objeto (focus) ................................................................................................. 5

4 Criando um Projeto ......................................................................................................................... 5

4.1 Crie um projeto ....................................................................................................................... 5

4.1.1 Criando o plano ............................................................................................................... 6

4.1.2 Criando a luz ou iluminação ............................................................................................ 6

4.1.3 Adicionando movimentação ........................................................................................... 6

4.1.4 Adicionando o personagem (esfera) ............................................................................... 7

4.1.5 Adicionando componentes ............................................................................................. 7

4.1.6 Camera seguindo personagem ....................................................................................... 8

4.1.7 Adicionando mais componentes ao personagem ........................................................... 8

4.1.8 Adicionando bolas de fogo .............................................................................................. 9

4.1.9 Importando objetos ...................................................................................................... 10

4.1.10 Fazendo as bolas de fogo sumirem ............................................................................... 11

4.1.11 Melhorando o movimento ............................................................................................ 11

4.1.12 Importando a Torre ....................................................................................................... 11

4.1.13 Mudando a inteligência ................................................................................................ 12

Page 3: 92015985 Apostila Unity

3 - Oficina de Desenvolvimento de Jogos – Unity 3D - Miguel Angelo Baggio

1 Introdução ao ambiente UNITY 3D

A Unity 3D é um engine de jogos que roda por baixo de um jogo. É uma engine paga, e existe uma versão Free para quem quer estudar e aprender sobre desenvolvimento de jogos. A engine

pode ser baixada no site http://unity3d.com/. No site da Unity 3D existe o arquivo de instalação, alguns exemplos, modelos, tutoriais em vídeo e um fórum.

Quando você executa pela o programa pela primeira vez, por padrão um exemplo é aberto. Você pode dar um zoom no cenário aproximando ou afastando a visão da cena com o botão de scroll do mouse.

Bem no centro da tela existe o botão de play, que serve para você rodar a cena que está sendo trabalhada. Note que isto não é a parte de compilar e gerar o jogo ou o executável. É simplesmente rodar a cena que está sendo trabalhada. Executar apenas dentro da própria engine.

As teclas para você andar são no componente padrão de first-person-shooter é W,A,S,D, que é movimentar o personagem para frente, para esquerda, trás e direita respectivamente.

Para voltar a editar novamente a cena, clique no botão de play e volte a editar novamente a sua cena. Se você pressionar a tecla ALT + Botão Esquerdo do Mouse (Bot.Esq.Mouse) você consegue girar a tela (modo de edição de cena).

Se você pressionar a tecla ALT + Botão de Scrool do Mouse (Bot. Scr. Mouse) você consegue puxar e empurrar a tela, como se estivesse caminhando pela cena.

2 Painéis do Unity 3D

Nesta seção você encontra algumas dicas dos painéis e como é organizado o ambiente de desenvolvimento Unity 3D.

Primeira coisa a notar é que você pode movimentar os painéis do jeito que você achar melhor de desenvolver. Basta clicar, segurar e arrastar para a parte da tela especifica que você deseja deixar o painel.

Geralmente deixa-se o painel inspector bem no lado direito, que fica mais fácil de achar as propriedades. Uma dica é deixar as abas de project e hierarchy acopladas ao lado da aba inspector ficando toda a tela para visualizar a cena.

A outra aba, com o nome de Game é como realmente vai ficar a cena depois de renderizar, que seria mais ou menos a mesma coisa que apertar o botão de play, por isso não é necessário dividir em duas telas (alguns gostam de deixar as duas abas aparecendo).

2.1 Painel Hierarchy

Neste painel estão todos os objetos que você tem dentro da cena. Selecionando um objeto e apertando a tecla F, você vai ser direcionado para onde o objeto está, ou seja, vai focar o objeto.

Quando você seleciona o objeto, e estiver no modo MOVE, pode-se notar que existem 3 setas, apontado para os três eixos dimensionais, X,Y,Z. Nesta setas, você clica com o botão esquerdo e pode movimentar o objeto sobre a cena nos eixos, levando o objeto para cima, para baixo, para tras, para frente, para esquerda, para direita.

Page 4: 92015985 Apostila Unity

4 - Oficina de Desenvolvimento de Jogos – Unity 3D - Miguel Angelo Baggio

Quando estiver no modo de movimentação das setas, é difícil de saber onde o objeto vai estar dentro da cena, então para facilitar, existe uma parte com todos os eixos bem no canto superior direito, onde você clica e ele posiciona a câmera direto conforme o eixo selecionado para você ter uma visão do objeto conforme aquele ângulo especifico.

Selecionando a parte de rotação na edição de cena, ao lado das setas de movimentação do objeto, você pode dizer para qual lado o objeto vai estar virado, quando iniciar o jogo. Neste modo, vai aparecer um globo onde você pode clicar e girar o objeto, em torno de cada um dos eixos que está no globo.

Quando você der um play, e deixar as duas telas, cena e game junto, quando você se movimentar vai ver o cilindro ou cubo que representa o personagem movimentando-se. É esse cubo que monitora as colisões dos objetos, não a parte gráfica que geralmente enxergamos, um objeto com muitos pontos de colisão geralmente gerencia vários cubos ou partes diferentes, tornando complexo o sistema.

Page 5: 92015985 Apostila Unity

5 - Oficina de Desenvolvimento de Jogos – Unity 3D - Miguel Angelo Baggio

2.2 Painel Project

Dentro do painel Project conta todos os objetos que estão incluídos no seu projeto. Não necessariamente estão incluídos na cena.

Você pode criar scripts, importar objetos, e tudo que fizer relacionado a isto ficará armazenado nesta aba.

2.3 Painel Inspector

Neste painel aparecem todas as propriedades dos objetos. Você pode editar os scripts, configurações, tudo que está relacionado ao objeto.

3 Funções de controle de câmera (modo edição)

Nesta seção você encontra todas as funções das teclas e do mouse, ou combinações dos dois, para controlar a câmera, e movimentar-se pela ambiente da cena enquanto você está no modo de desenvolvimento.

3.1 Afastar a visão da cena (zoom)

Você pode dar um zoom no cenário aproximando ou afastando a visão da cena com o botão de scroll do mouse.

3.2 Girar a tela

Se você pressionar a tecla ALT + Botão Esquerdo do Mouse (Bot.Esq.Mouse) você consegue girar a tela (modo de edição de cena).

3.3 Puxar e empurrar a tela

Se você pressionar a tecla ALT + Botão de Scrool do Mouse (Bot. Scr. Mouse) você consegue puxar e empurrar a tela, como se estivesse caminhando pela cena.

3.4 Centralizar um objeto (focus)

Se você pressionar a tecla F com o objeto selecionado dentro da cena, você vai ser direcionado para onde o objeto está. O que pode ser feito também é dar dois cliques do mouse no painel de hierarchy em cima do objeto que vai ser centralizado.

4 Criando um Projeto

A primeira coisa que temos que entender é a diferença entre um projeto e uma cena. Um projeto é praticamente todo o jogo completo, englobando todas as fases, todos os bônus, tudo que aparece no jogo. Uma cena é propriamente um nível ou fase do seu jogo. A cena é simplesmente parte do projeto. Um projeto pode conter apenas uma cena.

Quando você cria uma nova cena, você pode usar objetos (assets) criados em outras cenas.

4.1 Crie um projeto

Selecione File -> New Project, selecione todos as bibliotecas possíveis para criar nosso exemplo.

Page 6: 92015985 Apostila Unity

6 - Oficina de Desenvolvimento de Jogos – Unity 3D - Miguel Angelo Baggio

Feito isso, será criado automaticamente uma cena. Nesta cena, provavelmente não vai existir nada, precisamos criar um plano onde será colocado todos os objetos e será o nosso mundo.

4.1.1 Criando o plano

Para criar um plano, selecione o menu GameObject. Um gameobject é praticamente qualquer coisa que vai estar contida dentro da cena. Dentro do menu vá para o menu CreateOther e selecione Cube (cubo). Este cubo será o nosso chão. Após criar o cubo, aperta a tecla F para focar o cubo.

Na aba inspector do cubo, selecione as opções de Posição e coloque 0 nos eixos X,Y e Z.

O próximo passo é transformar o cubo em um plano, ou seja, algum lugar onde possamos andar e caminhar. O primeiro passo é esticar os eixos do plano. Então na mesma aba inspector vá na parte de escala e modifique o tamanho para ser um ambiente onde possamos caminhar.

No exemplo vamos fazer um plano de 25x25, conforme a figura:

O plano vai parecer meio alto, podemos modificar o eixo y para 0.3, pois não é necessário ter um plano maior.

Aperte o play e rode a cena. Quando rodamos a cena, nós iremos poder ver o chão mas não poderemos nos movimentar.

4.1.2 Criando a luz ou iluminação

Antes de fazer qualquer coisa, vamos adicionar uma luz no ambiente, ou uma iluminação. Vá novamente a gameobject , depois em create other, depois selecione point light.

Vamos levar a luz para cima. Clique no objeto da luz e selecione as setas para movimentar. Após isso clique na seta amarela e puxe para cima, levantando a luz. Feito isso, podemos ver que o foco da luz não é para baixo. Vamos apontar a luz para baixo. Clique nas setas da rotação e deixe a luz apontando para baixo.

Mude o tipo da luz para Point, e depois o range (diâmetro do foco da luz) para 40. Feito isso, você pode clicar em play e ver que existe uma iluminação na sua cena. Vários pontos de iluminação podem ser feitos no jogo, para por exemplo, mostrar uma lâmpada acessa, os faróis de um carro, etc.

4.1.3 Adicionando movimentação

Agora vamos adicionar a movimentação. Clique na aba Project e adicione First Person Controller

a sua cena. Você pode fazer isso arrastando para a cena gráfica ou adicionando em hiearchy .

Page 7: 92015985 Apostila Unity

7 - Oficina de Desenvolvimento de Jogos – Unity 3D - Miguel Angelo Baggio

Mude as propriedades do First Person Controller para posição nos eixos em X=0,Y=0,Z=0. Após isso de um foco no objeto. Podemos ver que o objeto vai estar submerso dentro do plano.

Simplesmente movimente o objeto para cima do plano, apertando nas setas do objeto e puxando ele para cima. Após isso de play novamente. Ande a vontade em cima do plano.

Como vamos adicionar a nossa movimentação direto no personagem, podem apagar o FPS da cena.

4.1.4 Adicionando o personagem (esfera)

Adicione uma esfera a sua cena, vá em gameobjects, create other e selecione sphere (esfera, bola).

4.1.5 Adicionando componentes

Um bom momento para introduzir componentes ao seu objeto. Um componente do objeto são determinadas funções ou características que você pode adicionar ao seu objeto.

Vamos adicionar uma FÍSICA para nossa bola. Vá em Component, depois em Physics, e adicione Character Controler.

Por enquanto a bola não faz nada ainda, temos que criar o script de movimentação. Para isso, clique com o botão direito em qualquer parte da aba Project e depois em Create, e depois em JavaScript.

Agora renomeie (F2) o seu script para o nome de MoveAround (andar por ai). Depois de um clique duplo em Edit e ele vai abrir um editor de scripts.

Digite o código abaixo:

var speed : float = 3.0;

var rotateSpeed : float = 3.0;

function Update ()

{

var controller : CharacterController = GetComponent(CharacterController);

// Rotate around y - axis

transform.Rotate(0, Input.GetAxis ("Horizontal") * rotateSpeed, 0);

// Move forward / backward

var forward : Vector3 = transform.TransformDirection(Vector3.forward);

var curSpeed : float = speed * Input.GetAxis ("Vertical");

controller.SimpleMove(forward * curSpeed);

}

@script RequireComponent(CharacterController)

Page 8: 92015985 Apostila Unity

8 - Oficina de Desenvolvimento de Jogos – Unity 3D - Miguel Angelo Baggio

Pessoal, o código deve ficar como está aqui, com as letras coloridas, se der erro é porque tem que arrumar o código, devido ao script não reconhecer algum caracter.

Este código cria praticamente duas variáveis, speed que é a velocidade que o objeto vai ter sua movimentação e rotateSpeed que é a velocidade que o objeto vai rotacionar.

A função update é chamada toda vez que a engine desenhar um frame da cena (+- mil por segundo).

Feito isto arresta o script para cima da esfera. Lá da aba Project, clique e arraste para cima da esfera na aba hierarchy.

4.1.6 Camera seguindo personagem

Agora vamos fazer a câmera seguir o personagem. Primeiro de tudo, vá na aba Project e na parte de procurar, digite smoothFollow. Arraste o smoothFollow para o objeto MainCamera. Para seguir a esfera, simplesmente arraste o objeto esfera para dentro da propriedade Target na aba Inspector dentro do Smooth Follow.

Pronto, agora aperte play e rode o seu exemplo, verá que a câmera vai seguir a bola.

Você pode aumentar a velocidade da bola de uma maneiram fácil. Selecione a esfera e na propriedade inspector e mude speed para 7. Sua bola vai movimentar-se mais rápido.

4.1.7 Adicionando mais componentes ao personagem

Vamos colocar mais componentes ao nosso personagem principal. Clica na esfera com o botão direito e depois selecione duplicate. Quando você duplica o objeto, você acaba adicionando todas as propriedades que já existiam no objeto anterior ao objeto novo. Agora você deve remover os scripts movearound e character controller da esfera duplicada. Duplique novamente a esfera e vamos deixar nosso personagem com 3 corpos. Agora movemos a parte 2 e a parte 3 para dentro da primeira esfera.

Agora adicione mais 2 esferas para serem os olhos do nosso personagem. Bom, até agora podemos ver que o nosso personagem está completo, andando e todas as esferas acompanham a esfera principal. Montamos o nosso Verme (worm).

Page 9: 92015985 Apostila Unity

9 - Oficina de Desenvolvimento de Jogos – Unity 3D - Miguel Angelo Baggio

As duas partes de trás do worm não está colidindo com os outros objetos do cenário, atravessando paredes e chão. Agora vamos adicionar uma física as nossas duas partes de trás. Selecione cada uma das partes, uma parte por vez e adicione um component com o nome de sphere colider, que está dentro da parte physics em compoents.

4.1.8 Adicionando bolas de fogo

Agora vamos fazer o personagem soltar bolas de fogo. Adicione novamente uma esfera ao nosso personagem. Retire a parte da textura para podermos visualizar melhor a bola enquanto continuamos com a programação.

Selecione a esfera, renomeie para Fireball, clique Materials, depois deixe a propriedade Element para none.

Você pode adicionar direto a textura para uma bola de fogo. Selecione a textura e veja o efeito. Agora que você já criou o primeiro componente da bola de fogo, vamos criar um componente PreFab, que é um padrão de objeto que pode ser utilizado posteriormente, com todas as características que já foram configuradas. Um componente PreFab pode ser utilizado em outras cenas ou níveis dos seu jogo.

Vá em Assets, depois em Create e depois em Prefab. Você vai poder ver o prefab na aba Project. O novo Prefab vai ficar com uma caixinha cinza enquanto ele está vazio. Depois que você colocar qualquer componente no prefab, ele vai ficar com a cor azul.

Agora arraste o componente Fireball para dentro do prefab. Quando você clicar na prefab, vai abrir uma janela de preview do componente.

Agora que o prefab já foi criado, podemos deletar o componente Fireball da cena. A bola de fogo ainda vai continuar existindo no nosso projeto, mas não será visto na cena.

Agora vamos criar o script para atirar a bola de fogo. A grande pergunta é: De onde a bola de fogo vai sair? Temos que definir um ponto. Vamos criar uma nova esfera para ser o ponto de inicio de onde nossa bola de fogo vai surgir.

Deixe uma bola bem pequena mas não deixe a bola tocar no personagem, porque o personagem poderia perder vida quando a bola vai sair do personagem (uma bola de fogo machuca).

Como não queremos que a bola de fogo colide com o ponto que criamos, temos que deletar o sphere colider do ponto criado. Renomeie o ponto criado como spawnPoint (ponto de inicio).

Agora o que precisa é deixar o spawnPoint invisível. Simplesmente selecione o objeto e desabilite o meshRender nas propriedades do objeto.

Agora já temos quase tudo, o que precisamos fazer é adicionar algum script para a bola de fogo sair do ponto de inicio.

Adicione a variável abaixo de rotateSpeed:

var bulliPrefab:Transform;

Agora quando você clicar no worm, no script move around vai existir uma propriedade bulli Prefab. Arraste a bola de fogo para o espaço disponível para definir a propriedade.

Page 10: 92015985 Apostila Unity

10 - Oficina de Desenvolvimento de Jogos – Unity 3D - Miguel Angelo Baggio

Agora adicione no final da função, os seguintes comandos:

O que faz essa linha?

Quando você usa instantiate você cria um prefab no mundo, que precisa de 3 parametros.

Instantiate (1,2,3)

1 = o que você vai criar

2= a posição onde você vai criar

3 = ângulo de onde ele vai ser visto.

Agora vamos fazer as bolas andar.Adicione uma física na bola de fogo, lá no componente prefab do

tipo rigibody.

Adicione logo abaixo da linha var bullit... a seguinte linha:

bullit.Rigibody.AddForce(transform.forward * 2000);

Feito isso nosso jogador agora atira bolas de fogo. Adicione uma parede para as bolas não passarem

da parede e testar um pouco da física da unity3d.

4.1.9 Importando objetos

No próprio site da unity3d , você encontra uma lista de programas que fazem modelagem de objetos, que podem ser importados dentro do unity3d.

Acesse o site www.turbsquid.com que existe muitos modelos para você baixar, tanto pagos

quanto grátis (free). Feito isso, baixe qualquer modelo e vamos importar dentro da unity3d. Clique

com o botão direito na aba Project e selecione show in explorer. Coloque os modelos baixados

dentro da pasta Assets, Quando você voltar para o unity3d, ele vai importar automaticamente os

dados que estão no diretório Assets. Feito isso você pode simplesmente importar o objeto para

dentro da cena. Você pode adicionar componentes ao objeto importado, como uma física, para

poder bater no objeto. Se você não colocar uma física, o seu worm vai passar por dentro do objeto.

Selecione o objeto la em Project e modifique as propriedades para geneate colliders.

if(Input.GetButtonDown("Jump"))

{

var bullit = Instantiate(bullitPrefab, GameObject.Find("spawnPoint").transform.position, Quaternion.identity);

}

}

Page 11: 92015985 Apostila Unity

11 - Oficina de Desenvolvimento de Jogos – Unity 3D - Miguel Angelo Baggio

4.1.10 Fazendo as bolas de fogo sumirem

Agora vamos criar um novo script que vai fazer as bolas sumirem. Crie um novo script no projeto.

O script deve conter as seguintes linhas:

var lifeTime = 1.0;

function Awake ()

{

Destroy (gameObject, lifeTime);

}

Feito isso, arraste o script para o preFab fireball. Pronto, suas bolas de fogo devem sumir depois de 1 segundo.

4.1.11 Melhorando o movimento

Quando nosso personagem anda, ainda sofre uns problemas de física, então retire as partes do corpo de dentro do worm, e adicione os scripts smoothfollow para as 2 partes novamente.

Agora clique na parte do worm, bodypart2 e coloque o target do script smoothfollow o nosso worm. No follow do bodypart3 coloque o bodypart2.

Se você rodar vai ver que a bola está sozinha. Isto é porque por default, a distancia é 10, modifique a distancia para 1.

Modifique também a propriedade height para 0, para não ter distancia no eixo y tb, Modifique as duas propriedades abaixo para 6, que são as rotações que as bolas farão ao seguir.

4.1.12 Importando a Torre

Agora você deve importar a torre que esta disponível. Feito isso, não esqueça de marcar as colisões dentro do prefab da torre. Após isso, arraste a torre para sua cena. Após fazer isto, separa as duas parte das torre. Deixando a de cima e a de baixo separadas.

Crie um novo gameobject. Va em gameobject e depois clique em createempty. Coloque agora as duas partes da torre dentro do novo gameobject.

Crie um novo javascript no projeto com o nome de TurretControl.

Adicione as linhas abaixo ao script:

var LookAtTarget:Transform;

function Update ()

{

transform.LookAt(LookAtTarget);

}

Page 12: 92015985 Apostila Unity

12 - Oficina de Desenvolvimento de Jogos – Unity 3D - Miguel Angelo Baggio

Feito isso, arraste o script para nossa Turret, mas apenas para a parte de cima da Turret. Agora simplesmente vá na parte do topo da torre, e no script coloque o nosso worm. Não esqueca de criar um PreFab para sua torre ser usada em outros níveis ou fases do seu jogo.

4.1.13 Mudando a inteligência

Se você percer, a torre nunca vai errar um tiro, pois ela mira direto no nosso worm. Isso é injusto e tornaria o game praticamente invencível. Vamos modificar o script de olhar.

Clique no script e modifique um pouco a rotação. Vamos fazer ela rotacionar um pouco mais devagar.

var LookAtTarget:Transform;

var damp = 1.0;

//deltaTime é a diferenca entre um frame e o seguinte

function Update ()

{

var rotate = Quaternion.LookRotation(LookAtTarget.position - transform.position );

transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime * damp);

//transform.LookAt(LookAtTarget);

}

Essa modificação faz com que a torre ande um pouco mais devagar.

Divirtam-se construindo jogos e cenários. Existe muito tutorial na internet.


Top Related