Tutorial de desenvolvimento de mini jogo em Unity 3D Aprender os Básicos do Unity Diogo Filipe, Ramiro Conceição Instituto Politécnico de Leiria Escola Superior de Tecnologia e Gestão Informática para a Saúde 31-10-2014
Introdução Com este tutorial vamos aprender a instalar o Unity 3D e a criar um projeto que se tratará de um mini jogo e que consistirá apenas em criar um player que apanhará objetos espalhados por uma área de jogo. Com este tutorial aprenderemos os passos básicos para começar a criar qualquer jogo em Unity 3D. Este mini jogo estará dividido em várias etapas onde começaremos por criar um chão e depois criaremos paredes que delimitarão a área de jogo, seguidamente colocaremos um objeto no centro da área de jogo que será o nosso player. Primeiramente o nosso player será uma esfera que se movimentará pela área de jogo. Desta forma daremos a entender que o programador pode dar movimento a este player através de scripts. Na próxima etapa criaremos uns cubos que ficarão a flutuar e a girar sobre a área de jogo para que o nosso player os apanhe. Em último lugar alteramos o nosso player que passará de uma esfera para um verdadeiro boneco onde aprenderemos que também podemos utilizar recursos já disponibilizados pelo Unity 3D. No final do tutorial teremos um mini jogo semelhante ao da figura abaixo: Figura 1: Resultado esperado do mini jogo no final do tutorial. 1
1º Objetivo: Instalar o Unity 3D 1- Ir ao site: https://unity3d.com/pt/unity/download e fazer o download do executável de instalação do Unity 3D. 2- Depois de feito o download execute o ficheiro. Figura 2: Instalação do Unity (Welcome). 3- Clicar em Next > para iniciar o processo de instalação. Figura 3: Instalação do Unity (Licence Agreement). 4- Clicar em I Agree para aceitar os termos da licença e prosseguir com a instalação. 2
Figura 4: Instalação do Unity (Components to install). 5- Verificar se todas as checkbox estão selecionadas para que se instale para além do Unity 3D um plugin para testar jogos web num browser e para instalar um editor de scripting associado ao Unity 3D. 6- Clicar em Next > para prosseguir. Figura 5: Instalação do Unity (Location Folder). 7- Selecione o local onde pretende instalar o Unity 3D e clique em Install para dar inicio á instalação do Unity 3D. 3
Figura 6: Instalação do Unity (Finish). 8- Depois de terminada a instalação clique em Finish e o Unity 3D estará pronto a ser utilizado no seu computador. Primeira vez a usar o Unity 3D: Caso seja a primeira vez que utiliza o Unity 3D irá deparar-se com o seguinte cenário: Figura 7: Instalação do Unity (Activate Licence). 4
Terá de ativar em primeiro lugar a sua licença para ter acesso ao ambiente de desenvolvimento do Unity 3D. 9- Para tal, neste caso, selecione a segunda opção Activate the free version of Unity. Figura 8: Instalação do Unity (Selecting Licence). 10- Clique em OK. Figura 9: Instalação do Unity(Log into Account). 5
11- Aqui terá que colocar o Email e a Password da sua conta no Unity. Mais uma vez, caso seja a sua primeira vez e não tenha conta no Unity 3D selecione a opção Create Account para criar a sua conta de acesso ao ambiente de desenvolvimento do Unity 3D. Depois de ter a sua conta criada preencha então os campos de Email e Password e clique em OK. Figura 10: Instalação do Unity(Start Using Unity). 12- Por último e para entrar no ambiente de desenvolvimento do UNity 3D e para começar a desenvolver o jogo clique em Start using Unity. 6
2º Objetivo Desenvolver o Mini Jogo Etapa 1 - Inicie o Unity 3D Figura 11: Ícone para iniciar o Unity 3D. 1.1- Duplo clique no ícone do Unity para iniciar o Unity 3D caso este não tenha iniciado; Etapa 2 - Criar novo projeto e guardar o Cenário Figura 12: Janela para abrir ou criar um projeto em Unity. 2.1- Escolha o local onde quer guardar o projeto ( Browse ). 2.2- Em Project Location acrescente ao caminho uma barra ( \ ) e um nome para o seu projeto. 2.3- Deixe todos os parâmetros do Import the following por predefinição e clique em Create. Caso não apareça esta janela para criar um novo projeto e apareça de imediato o ambiente de desenvolvimento do unity, aceda a: File -> New Project 7
Figura 13: Ambiente de desenvolvimento inicial do Unity 3D. Legenda: 1- Vistas Scene, Game e Console ; 2- Vista Hierarchy ; 3- Vista Inspector ; 4- Vista Project ; 5- Pasta Assets (pasta raiz); 6- Botões para iniciar e pausar os testes ao jogo em desenvolvimento; 7- Barra de menus. A figura acima mostra o ambiente de desenvolvimento do Unity 3D onde encontramos diversas vistas cada uma com um papel importante. No ponto assinalado com o número 1 encontramos três vistas: Scene, Console e Game. A vista Scene é a vista do nosso cenário e é onde podemos moldar os objetos criados e ver com uma noção do espaço tridimensional, neste caso, o processo de desenvolvimento do nosso jogo. Cada objeto que criamos aparecerá neste espaço e todas as modificações que fizermos ao objeto podemos vê-las aqui na vista Scene. A vista Console é onde podemos ver qual quer erro de compilação que apareça no nosso código ou em qualquer parte do jogo. A vista Game é parecida á vista Scene no entanto esta serve apenas para testarmos o jogo e ver como está a jogabilidade. No ponto 2 temos a vista Hierarchy, é nesta vista que podemos ver todos os objetos de jogo que adicionamos e é aqui que podemos aceder a qualquer objeto para o modificarmos. Por pré definição já vem um objeto criado nesta vista, a Main Camera, como o nome indica esta é a câmara principal que nos dá a visão do jogo quando estivermos a jogar. No ponto 3 a vista Inspector onde encontramos todos os componentes associados ao objeto que selecionarmos e onde podemos alterar, remover ou adicionar componentes de cada objeto. 8
No ponto 4 a vista Project que nos mostra todas as pastas, ficheiros, elementos de jogo entre outras coisas correspondentes ao nosso projeto. O ponto 5 mostra a pasta criada por pré definição de nome Assets os assets são os recursos ou materiais que servem de base para o nosso projeto, desde qualquer elemento do jogo ou objeto que criemos ou importemos a qualquer ficheiro que adicionamos, é tudo guardado nesta pasta de raiz de onde provém o nome Assets. O ponto 6 mostra os botões onde podemos clicar para iniciar, pausar, parar testes ao nosso jogo. O ponto 7 mostra a barra de menus onde temos por exemplo o menu File onde podemos criar ou guardar projetos ou cenários, o menu Assets onde podemos importar ou exportar objetos já criados do jogo ou para o jogo, o menu GameObject onde podemos aceder para criar um novo objeto de jogo, o menu Component onde podemos adicionar componentes a qualquer objeto selecionado e o menu Window onde encontramos todas as vistas e caso alguma vista que necessitemos não apareça no ambiente de desenvolvimento podemos aceder a este menu e selecionar a vista que pretendemos para que esta fique ao nosso dispor. Nota: Ao criar um novo projeto as suas vistas podem não estar exatamente na mesma posição das vistas da figura 13. Antes de começarmos a desenvolver o nosso jogo vamos criar uma pasta onde vamos guardar o cenário do nosso jogo: 2.4- Na vista Project, criar uma nova pasta _Scenes dentro da pasta Assets : Create -> Folder e dar-lhe o nome _Scenes. Figura 14: Vista "Project" com indicação do botão a clicar para criar a nova pasta e ilustração da pasta "_Scenes" criada. 2.5- Guardar o Cenário dentro da pasta criada _Scenes e dar um nome ao cenário, por exemplo na figura abaixo criamos o nosso cenário com o nome Demo : 2.6- File -> Save scene -> pasta _Scenes -> dar um nome. 9
Figura 15: Janela que é aberta para guardar o cenário onde inserimos um nome em "Nome de ficheiro:". Nota: Cada vez que fecharmos o Unity depois de ter guardado o cenário do nosso projeto, quando voltamos a abrir e escolhemos o nosso projeto para continuarmos onde paramos por vezes podemos dar conta que os objetos até à data criados não aparecem. Principiantes podem até pensar que o projeto fora todo apagado mas não, para termos novamente acesso aos objetos teremos apenas de abrir o cenário. Navegamos na vista Project até à pasta onde está o nosso cenário guardado e fazemos duplo clique no mesmo e verificamos que voltará tudo a aparecer como estava antes. Etapa 3 - Criar o chão 3.1- Na vista Hierarchy, criar um Terreno: Create -> Terrain ; Figura 16: Vista "Hierarchy" com indicação para criar um objeto"terrain". 10
3.2- Com o Terrain selecionado, na vista Inspector, componente Terrain (Script), selecionar o botão Settings : Figura 17: Vista "Inspector" com indicação do botão a selecionar para aceder aos "Settings" do Terrain. 3.3- No parâmetro Resolution alterar o campo Terrain Width para 100 e Terrain Length para 100 e clicar Enter (de modo a guardar as alterações). 3.4- Com o Terrain selecionado, na vista Inspector, componente Transform alterar a Position > X e Z para -50; No final destes passos e para vermos o nosso terrain criado vamos á vista Hierarchy e fazemos duplo clique no objeto Terrain que criamos para focarmos este e termos uma boa vista do mesmo. Figura 18: Representação esperada do jogo no final da etapa 3. 3.5- Guardamos o nosso cenário: File -> Save scene. 11
Etapa 4 - Criar as paredes 4.1- Na vista Hierarchy, criar um cubo: Create -> Cube ; 4.2- Renomear o Cube para Wall1 clicando no botão direito do rato sobre o objeto criado Cube para aceder a Rename e alterar o nome ao objeto selecionado; Fazer reset ao Wall1 no componente Transform : 4.3- Com o Wall1 selecionado, na vista Inspector, componente Transform, clicar na roda dentada e selecionar Reset : Figura 19: Vista "Inspector" com indicação do botão a selecionar para fazer Reset ao componente "Transform". É importante fazer reset aos valores do componente Transform para qualquer objeto que criemos pois estes podem não estar a 0 e originar problemas de posicionamento dos elementos na área de jogo. Alterar os parâmetros para criarmos as nossas paredes: 4.4- Com o Wall1 selecionado, na vista Inspetor, componente Transform alterar a Position > Y = 1 e Z = 50 e a Scale > X = 101 e Y = 5; 4.5- Com o Wall1 selecionado, clicar com o botão do lado direito do rato e duplicar Duplicate 3 vezes; 4.6- Renomear as walls duplicadas para Wall2, Wall3 e Wall4 ; 4.7- Alterar os valores das novas paredes de modo a que estas limitem o nosso Terreno: Wall2 componente Transform alterar a Position > Z = -50; Wall3 componente Transform alterar a Position > X = 50 e Z = 0, alterar a Rotation > Y = 90; Wall4 componente Transform alterar a Position > X = -50 e Z = 0, alterar a Rotation > Y = 90; De modo a ter a Hierarchy organizada e bem definida, criamos um objeto (Pai) que guarde todas as paredes (Filhos): 4.8- No menu GameObject, selecionar Create Empty ; 12
Podemos observar que na vista Hierarchy apareceu um novo objeto de nome GameObject. 4.9- Selecionamos este GameObject criado e renomeamo-lo para Walls ; 4.10- Fazemos reset ao Walls no componente Transform ; 4.11- Selecionamos Wall1 a Wall4 e arrastamo-las para o objeto Walls passando este a ser o pai que contém todas as walls que arrastámos sendo estas suas filhas, desta forma mantemos a hierarquia bem estruturada. Figura 20: Criação de um novo GameObject, neste caso "Walls" e ilustração da hierarquia bem definida após a criação do objeto "Walls". Para obtermos uma visão semelhante à da figura 22 podemos andar pela vista Scene clicando no botão direito do rato para rodarmos o nosso campo de visão, fazemos scroll para obter mais ou menos zoom e selecionado o botão com o desenho de uma mão que se encontra por baixo da barra de menus podemos depois clicar no botão esquerdo do rato e arrastar de um lado para o outro o nosso campo de visão até obtermos o ângulo pretendido. Figura 21: Botão a selecionar para poder arrastar o campo de visão pela vista "Scene". 13
Figura 22: Representação esperada do jogo no final da etapa 4. 4.12- Guardamos o nosso cenário: File -> Save scene. Etapa 5 - Criar as luzes 5.1- Na vista Hierarchy, criar uma luz: Create -> Directional Light ; 5.2- Renomear Directional Light para Main Light ; 5.3- Fazer reset à Main Light no componente Transform ; 5.4- Com a Main Light selecionada, na vista Inspetor, componente Transform alterar a Position > Y = -10, alterar a Rotation > X = 30 e Y = 60. No componente Light ajustar a Intensity para 0.5 caso não esteja, escolher Soft Shadows em Shadow Type e escolher Very High Resolution em Shadow Type Resolution ; 5.5- Selecionar a Main Light e duplicá-la; 5.6- Renomeá-la para Fill Light ; 5.7- Com a Fill Light selecionada, na vista Inspetor, componente Transform alterar a Rotation > X = -30 e Y = -60. No componente Light ajustar a Intensity para 0.1, escolher No Shadows em Shadow Type e escolher uma cor diferente em Color para ver o efeito da Fill Light, uma cor como um azul claro por exemplo deve servir; Vamos voltar a definir a nossa hierarquia: 5.8- No menu GameObject, selecionar Create Empty ; 14
5.9- Renomear o GameObject para Lights ; 5.10- Fazer reset ao objeto Lights no componente Transform ; 5.11- Selecionar a Main Light e a Fill Light e arrastá-las para o objeto Lights mantendo a hierarquia bem definida. 5.12- Guardamos o nosso cenário: File -> Save scene. A partir do resultado da figura 24 poderemos verificar o efeito das luzes e das sombras no nosso jogo. Etapa 6 - Criar a esfera Player inicial 6.1- Na vista Hierarchy, criar uma esfera: Create -> Sphere ; 6.2- Renomear a Sphere para Player ; 6.3- Fazer reset ao Player no componente Transform ; 6.4- Com o Player selecionado, na vista Inspetor, componente Transform alterar a Position > Y = 1.5, e a Scale > X, Y e Z = 3; 6.5- Com o Player selecionado, adicionar um componente que o torna num corpo rígido para que este sofra das físicas que podem ser aplicadas ao objeto como por exemplo aplicar uma força. Para tal adicionamos o componente Rigidbody: Add Component -> Physics -> Rigidbody (como podemos observar na figura abaixo); Figura 23:Botão "Add Component" com o componente "Rigidbody" a selecionar. Em seguida vamos dar movimento ao nosso Player para que o possamos movimentar pela área de jogo. Para tal vamos adicionar-lhe um ficheiro de texto em que escrevemos as linhas de código necessário para que o nosso Player se consiga mover. A este ficheiro de texto chamamos-lhe de script. 15
using UnityEngine; using System.Collections; 6.6- Criar uma nova pasta na pasta Assets para guardar os scripts: na vista Project, um clique na pasta Assets e de seguida: Create -> Folder com o nome Scripts ; 6.7- Com o Player selecionado, adicionar um script: Add Component -> New Script com o nome PlayerController, selecionar CSharp na Language e clicar Create and Add ; 6.8- Ao criarmos scripts geralmente estes por omissão são criados diretamente na pasta Assets na vista Project. Para mantermos uma organização coerente, para cada script que criarmos, navegamos até à pasta Assets ou até à pasta onde eles foram criados e arrastamos os scripts criados para a nossa pasta Scripts ; 6.9- Na vista Hierarchy, selecionar Player, na vista Inspector, no novo componente PlayerController (Script), clicar com o botão do lado direito do rato e selecionar Edit Script ; O editor de texto do Unity de nome MonoDevelop deverá inicializar onde poderemos editar os scripts e alterar as linhas de código. 6.10- Copiam o código abaixo referente ao PlayerController e substituem pelo código do script aberto no passo anterior, guardando as alterações ( File -> Save ); public class PlayerController: MonoBehaviour { public float speed; private void FixedUpdate() { float movehorizontal = Input.GetAxis("Horizontal"); float movevertical = Input.GetAxis("Vertical"); Vector3 movement = new Vector3(moveHorizontal, 0.0f, movevertical); } } rigidbody.addforce(movement * speed * Time.deltaTime); 16
6.11- Na vista Inspector, no componente criado anteriormente PlayerController (Script) aparecerá um campo Speed com valor zero por omissão. Alteramos o valor do Speed para 500 de modo a que a esfera se desloque a uma determinada velocidade. Figura 24: Representação esperada do jogo no final das etapas 5 e 6. Se formos à vista Hierarchy e fizermos duplo clique no objeto Player, iremos focar o nosso Player e obter uma visão semelhante á figura acima. 6.12- Guardamos o nosso cenário: File -> Save scene. Etapa 7 - Alterar parâmetros da câmara 7.1- Com a Main Camera selecionada fazemos reset à mesma no componente Transform; 7.2- Na vista Inspector, alteramos os valores do componente Transform, alterar a Position > Y = 100 e a Rotation > X = 90; 7.3- Neste momento podemos testar o cenário clicando no botão Play ; Figura 25: Indicação do botão a selecionar para fazer "Play" e testar o jogo. 17
Ao fazermos Play aparecerá a vista Game onde podemos testar a jogabilidade. Pressionando as setas do teclado ou os botões W, A, S e D podemos observar o nosso Player a mover-se pela área de jogo. 7.4- Para terminar o teste, voltamos a clicar no botão Play. Neste momento, a vista que temos do jogo é uma vista aérea (como nos jogos 2D). Caso queiram uma vista do tipo Third person, devem criar um script novo CameraController, tendo a Main Camera selecionada: 7.5- Com a MainCamera selecionada na vista Hierarchy, adicionar um script: Add Component -> New Script com o nome CameraController, selecionar CSharp na Language e clicar Create and Add ; 7.6- Mover o script criado da pasta Assets para a pasta Scripts ; 7.7- Na vista Hierarchy, selecionar a MainCamera, na vista Inspector, no componente CameraController (Script), clicar com o botão do lado direito do rato e selecionar Edit Script ; 7.8- Copiam o código abaixo referente ao CameraController e substituem pelo código do script aberto no passo anterior, guardando as alterações ( File -> Save ); using UnityEngine; using System.Collections; public class CameraController : MonoBehaviour { public GameObject player; private Vector3 offset; void Start() { offset = transform.position; } void Update() { transform.position = player.transform.position + offset; } } 18
7.9- Com a Main Camera selecionada na vista Hierarchy alterar os valores na vista Inspector, do componente Transform, alterar a Position > Y = 20 e Z = -20 e a Rotation > X = 30. 7.10- Na vista Inspector, ficará disponível o componente do script criado anteriormente CameraController (Script). De seguida, com a Main Camera selecionada, arrastamos o Player da vista Hierarchy para o campo Player do componente CameraController (Script). Figura 26: Representação esperada do jogo no final da etapa 7. 7.11- Guardamos o nosso cenário: File -> Save scene. Etapa 8 - Adicionar elementos ao jogo 8.1- Na vista Hierarchy, criar um cubo: Create -> Cube ; 8.2- Renomear Cube para Item ; 8.3- Fazer reset ao Item no componente Transform ; 8.4- Com o Item selecionado na vista Hierarchy, alteramos a sua posição no componente Transform, alterar a Position > X = 20 Y = 2 e Z = 20; 19
8.5- Para tornar este elemento num corpo rígido, adicionamos um novo componente: Clicar no botão Add Component -> Physics -> Rigidbody. Neste componente, desseleccionamos a checkbox Use Gravity para que este fique a flutuar e não caia no chão; 8.6- Com o Item selecionado, adicionar um script: Add Component -> New Script com o nome ItemRotator, selecionar CSharp na Language e clicar Create and Add ; 8.7- Mover o script criado para a pasta Scripts ; 8.8- Na vista Hierarchy, selecionar Item, na vista Inspector, no componente ItemRotator (Script), clicar com o botão do lado direito do rato e selecionar Edit Script ; 8.9- Copiam o código abaixo referente ao ItemRotator e substituem pelo código do script aberto no passo anterior, guardando as alterações ( File -> Save ); using UnityEngine; using System.Collections; public class ItemRotator : MonoBehaviour { void Update() { transform.rotate(new Vector3(0, 50, 0) * Time.deltaTime); } } 20
8.10- Com o Item selecionado na vista Hierarchy, selecionamos o campo Is Trigger no componente Box Collider da vista Inspector ; Figura 27: Vista "Ispector" do objeto "Item" após desselecionar "Use Gravity" e selecionar "Is Trigger". 8.11- Com o Item selecionado, clicar com o botão do lado direito do rato e duplicar Duplicate 5 vezes; 8.12- Alteramos a posição dos novos itens, de modo a que estejam espalhados pela área de jogo (colocamos valores aleatórios á nossa escolha): O valor Y da Position não alteramos! Este deve ser sempre igual a 2. Alteramos apenas os valor de X e Z tendo em atenção que estes devem estar na gama de valores -48 a 48 para permanecerem dentro da nossa área de jogo. Não colocamos também valores iguais em ambos X e Z para diferentes objetos Item, procurem valores bem diferentes para que estes objetos fiquem bem espalhados pela área de jogo e para que não causem problemas de colisões. Como exemplo podemos por valores como: (2º Item -> Position : X = -20 e Z = 20) (3º Item -> Position : X = 20 e Z = -20) (4º Item -> Position : X = -20 e Z = -20) (5º Item -> Position : X = 30 e Z = 0) (6º Item -> Position : X = -30 e Z = 0) 21
De modo a ter a Hierarchy organizada e bem definida, devemos criar um componente que guarde todos os itens: 8.13- No menu GameObject, selecionar Create Empty ; 8.14- Renomear o objeto criado GameObject para Items ; 8.15- Fazer reset ao Items no componente Transform ; 8.16- Selecionar todos os Item e movê-los para Items. Figura 28: Representação esperada do jogo no final da etapa 8. 8.17- Guardamos o nosso cenário: File -> Save scene. Etapa 9 - Apanhar os itens 9.1- Com o Player selecionado na vista Hierarchy, adicionar um script: Add Component -> New Script com o nome PickUpItems, selecionar CSharp na Language e clicar Create and Add ; 9.2- Mover o script criado para a pasta Scripts ; 9.3- Na vista Hierarchy, selecionar Player. Na vista Inspector, no componente PickUpItems (Script), clicar com o botão do lado direito do rato e selecionar Edit Script ; 9.4- Copiam o código abaixo referente ao PickUpItems e substituem pelo código do script aberto no passo anterior, guardando as alterações ( File -> Save ); 22
using UnityEngine; using System.Collections; public class PickUpItems : MonoBehaviour { private void OnTriggerEnter(Collider other) { if (other.gameobject.name == "Item") { other.gameobject.setactive(false); } } } Se testarmos o jogo podemos ver que o nosso Player já consegue apanhar os cubos que se encontram a flutuar pela área de jogo: Figura 29: Teste ao jogo no final da etapa 9. O "Player" apanha os cubos espalhados pela área de jogo. 23
9.5- Guardamos o nosso cenário: File -> Save scene. Etapa 10 - Alterar o Player Na fase inicial desta apresentação, criámos um objeto Player que não possuia nenhum tipo de movimento. Através de scripts, foi possível atribuir movimento a este objeto, de modo a este se mover pela área de jogo e apanhar os cubos. No entanto, é possível adicionar ao nosso projeto objetos (assets) já criados por outras pessoas no Unity 3D bastando importá-los para os podermos utilizar. Estes objetos podem já ter scripts associados que lhes conferem movimento (andar para a frente, para trás, para os lados, saltar, correr) e que lhes conferem uma forma como é o caso do Player que vamos passar a utilizar. Nas imagens abaixo podemos ver à esquerda o nosso Player atual, uma simples esfera e na imagem à direita podemos ver um boneco mais interessante que importaremos e que passará a ser o nosso novo Player. Figura 30: "Player" inicial. Figura 31: "Player" final (alteração ao "Player" inicial). Assim sendo, vamos alterar o nosso Player. Primeiro removemos o atual Player do jogo: 10.1- Com o Player selecionado da vista Hierarchy, vamos à vista Inspector e desseleccionamos a checkbox que se encontra atrás de Player (ver figura abaixo); Figura 32: Indicação da checkbox a desselecionar para desativar o "Player" inicial (esfera). 24
Desseleccionamos o script que criamos para a câmara para esta não dar problemas: 10.2- Com a Main Camera selecionada na vista Hierarchy, vamos à vista Inspector e desseleccionamos a checkbox do componente Camera Controller (Script) (ver figura abaixo). Figura 33: Indicação da checkbox a desselecionar para repor a Camera de volta á sua origem. De seguida, vamos então adicionar o novo jogador: 10.3- Clicar no menu Assets -> Import Package -> Character Controller. Aparecerá então uma nova janela com o nome Importing package onde verificamos se todas as checkbox estão selecionadas e clicamos Import. Figura 34: Como importar Assets. Importação do "Player" final customizado do Unity. 25
Na vista Project, vamos navegar até encontrar o objeto 3rd Person Controller : 10.4- Selecionar as pastas Assets -> Standart Assets -> Character Controllers, onde arrastamos o objeto 3rd Person Controller para a vista Hierarchy ; 10.5- Com o 3rd Person Controller selecionado na vista Hierarchy, alteramos os campos na vista Inspector, componente Transform, alterar a Scale > X, Y e Z = 2 e a Position > Y = 2; 10.6- Alteramos também os campos na vista Inspector, componente Third Person Camera (Script), alterar a Distance para 10 e Height para 5; Para que o objeto tenha a animação correspondente ao seu movimento, vamos fazer o seguinte: Na vista Project, vamos navegar até encontrar a pasta PrototypeCharacter : 10.7- Selecionar as pastas Assets -> Standart Assets -> Character Controllers -> Sources -> PrototypeCharacter. Damos 1 clique no objeto Constructor e é aqui que encontramos as animações idle, jump_pose, run e walk (figura abaixo). Figura 35: Vista "Project", navegação até às animações idle, jump_pose, run e walk. 26
10.8- Com o 3rd Person Controller selecionado na vista Hierarchy, arrastamos as animações para o respetivo campo no componente Third Person Controller (Script) da vista Inspector : idle para Idle Animation ; walk para Walk Animation ; run para Run Animation ; jump_pose para Jump Pose Animation. Para que este novo player apanhe os cubos, apenas temos de lhe associar o script PickUpItems que criámos anteriormente: 10.9- Com o 3rd Person Controller selecionado na vista Hierarchy, clicamos no botão Add Component -> Scripts -> Pick Up Items. Figura 36: Representação esperada do jogo no final da etapa 10. 27
Etapa 11 - Guardar o cenário final, testar e jogar 11.1- Guardamos o nosso cenário final: File -> Save scene. 11.2- Carregamos no botão Play para testar e jogar. Figura 37: Indicação do botão a selecionar para fazer "Play" e testar o jogo. O nosso novo Player estará agora esteticamente mais interessante e para além de utilizarmos as setas do teclado ou os botões W, A, S e D para movimentarmos o nosso Player pela área de jogo podemos também pressionar o botão Shift simultaneamente quando movimentarmos o Player para este correr em vez de andar. Podemos também pressionar o botão Espaço para o Player saltar. 28
O resultado final deverá ser algo semelhante à figura abaixo: Figura 38: Resultado esperado do mini jogo no final do tutorial. Etapa 12 Exportar o jogo Tendo o nosso jogo terminado, ao nosso gosto e passado nos testes vamos exportar o jogo e torná-lo num ficheiro executável como qualquer outro jogo que tenhamos no computador para podermos jogar sempre que quisermos. Para tal temos de: 12.1- Clicar no menu File -> Build & Run (figura abaixo) Figura 39: Como exportar o jogo e torná-lo executável (Build & Run). 29
Aparecerá uma janela de nome Build Settings onde escolhemos qual a plataforma onde o nosso jogo irá executar. Por pré-definição a opção é PC, Mac & Linux Standalone e como queremos executar o nosso jogo no nosso computador vamos deixar nesta opção. Para exportarmos o nosso jogo vamos ter de escolher o cenário que criamos do nosso jogo e que guardamos. Para tal: 12.2- Clicamos no botão Add Current e o cenário que temos estado a desenvolver será adicionado; 12.3- Clicamos no botão Build ; Figura 40: "Build Settings" onde selecionamos a plataforma onde vamos executar o jogo, adicionamos o cenário e exportamos o jogo. Por último aparecerá uma janela onde escolhemos onde queremos guardar o nosso jogo exportado. 12.4- Navegar até onde queremos exportar o jogo, criar uma nova pasta (de nome Build por exemplo) e selecioná-la para o jogo ser exportado para essa pasta. 12.5- Dar um nome ao jogo (Por exemplo Jogo Unity ); 12.6- Clicar em Guardar. 30
Figura 41: Finalização do processo de exportação do jogo. Depois de ter finalizado a exportação podemos aceder à pasta onde guardamos o nosso jogo, fazer duplo clique no ícone no jogo e começar a jogar. Figura 42: Ícone do executável do jogo. Caso apareça uma janela de configurações para o jogo podemos alterar parâmetros ou deixar como está e simplesmente clicar no botão Play! e jogar o jogo por nós desenvolvido. 31
Esperamos que com este tutorial tenhamos deixado claro alguns dos conceitos mais importantes sobre o Unity 3D e que tenhamos ensinado os básicos para que qualquer um possa ter um ponto de partida para começar a desenvolver os seus jogos e quem sabe um dia vir a ser um grande produtor de jogos em Unity 3D. Anexos: Informações sobre o código aplicado: Monobehaviour é a Classe base de onde derivam todos os scripts; Start é a função que é chamada no primeiro frame em que o script é chamado, mesmo antes da função Update; Update é a função que é chamada a cada frame que passa; FixedUpdate é a função que é chamada a cada frame fixo que passa; Diferença entre Update e FixedUpdate: O FixedUpdate é utilizado quando temos um componente Rigidbody porque, por exemplo, quando é aplicada uma força num rigidbody esta ação tem de ser feita dentro de uma fixed frame e não numa frame normal; Input.GetAxis devolve o valor do eixo definido pelo nome do próprio eixo. Vector3 é a representação de um vetor tridimensional com os valores para os pontos x, y, z; Rigidbody é o componente que controla um objeto através das físicas do motor de jogo Unity; rigidbody.addforce serve para aplicar uma força sobre o objeto; Time.deltaTime é o tempo em segundos que levou a completar a última frame; Transform devolve a posição, rotação e escala de um objeto; transform.rotate serve para aplicar uma rotação sobre o objeto; GameObject corresponde ao objeto de jogo selecionado; Collider é o tipo de objeto que indica que este objeto tem propriedades de colisão. 32