Unity 1. INSTALAçÃO E INTERFACE DO UNITY ..............................................................................................2 1.1. INSTALAçÃO DO UNITY .........................................................................................................2 1.2. TRANSFORMAçÕES...............................................................................................................6 2. ILUMINAçÃO ........................................................................................................................................7 2.1. LUZ Direta ...............................................................................................................................7 2.2. Luz indireta ..............................................................................................................................7 2.3. Tipos de luz .............................................................................................................................8 2.3.1. Direcional ........................................................................................................................8 2.3.2. FOCO .............................................................................................................................9 2.3.3. OMNIDIRECIONAL .........................................................................................................9 2.4. CONFIGURAÇÃO DA LUZ .................................................................................................... 10 2.5. Técnica Rim Light .................................................................................................................. 11 2.6. Rim Light eM videojOgos ....................................................................................................... 13 3. CÂmaras E camadas .......................................................................................................................... 14 3.1. propriedades das câmaras ..................................................................................................... 14 3.2. posicionamento da câmara .................................................................................................... 14 3.3. camadas ................................................................................................................................ 16 3.4. Câmaras avançadas .............................................................................................................. 16 3.5. GameObject E componentes ................................................................................................. 19 3.5.1. Activar e desactivar GameObject e componentes .......................................................... 19 3.5.2. ativar e desativar GameObjects e componentes por código ........................................... 19 1. INSTALAÇÃO E INTERFACE DO UNITY 1.1. INSTALAÇÃO DO UNITY Para instalar a aplicação, devemos dirigir-nos à página web do Unity (o link está disponível na agenda do Campus) e carregar em “Get Unity”. Na próxima página, ser-nos-á perguntado que plano queremos escolher. Selecionar o plano pessoal (“Personal”). No próximo ecrã, em vez de aceitar os termos e descarregar o instalador, vamos para a parte de baixo da página e carregar no texto que diz “Older versions of Unity”, para garantir que utilizamos a mesma versão do Unity. Na página seguinte, carregamos no botão que diz “Unity 2017.x”: E procuramos a versão Unity 2017.3.0 e carregamos no botão “Downloads (Win)” ou “Downloads (Mac)”, conforme o nosso sistema operativo, e a seguir em “Unity Installer”. Quanto o download finalizar, fazemos o duplo-clique para abrir o instalador. Quando este iniciar, selecionamos “Next”. Na página seguinte, aceitamos os termos e as condições e voltamos a pressionar “Next”. A seguir aparece uma lista com os componentes que desejamos instalar. Aqui deixamos ativados os componentes que vêm pré-selecionados e podemos ativar as plataformas com as quais desejamos trabalhar (por exemplo, se queremos trabalhar para dispositivos móveis, Linux, Mac ou outros sistemas). Confirme também que o “Microsoft Visual Studio Community 2017” está selecionado. Depois de terminar de selecionar os componentes que deseja, clique em "Next", escolha o diretório onde quer instalar o Unity e clique novamente em "Next". No próximo ecrã vai pedir-nos para aceitar a instalação do “Microsoft Visual Studio 2017”. Este é o programa com o qual iremos criar os scripts para os nossos jogos e será instalado com o Unity e os demais componentes. Após aceitar iniciar a instalação, o instalador começará a descarregar e instalar todos os componentes selecionados. Durante este processo, vão ser abertas e fechadas várias janelas automaticamente. Isto faz parte do processo, e temos de esperar que este seja todo concluído para podermos prosseguir. O Unity tem dois modos de funcionamento: ◼ Modo “Edit”: Neste modo pode editar tudo o que queira, posicionar objetos, adicionar componentes, etc. Este é o modo sobre o qual criará o jogo. ◼ Modo “Play”: No modo “Play”, poderá testar o seu jogo. É importante saber que todas as alterações efetuadas no modo “Play” serão perdidas quando se sai deste modo. 1.2. TRANSFORMAÇÕES Os videojogos baseiam o seu mundo num sistema de eixos cartesianos. Num mundo 2D temos os eixos X e Y, representados por (x,y), enquanto num mundo 3D temos 3 eixos (X, Y, Z), representados por (x,y,z). Por exemplo, um ponto que está a situado a 4 unidades no eixo X, 3 unidades no eixo Y, e 2 unidades no eixo Z seria representado da seguinte maneira (4,3,2). Sempre que se posicione um objeto num espaço 3D, estar-se-á a posicioná-lo num ponto (denominado pivot), em que o eixo X servirá para posicioná-lo lateralmente, o eixo Y serve para lhe dar uma altura e em que o eixo Z será a sua profundidade. 2. ILUMINAÇÃO Para podermos entender melhor como incluir luz nos nossos jogos, temos primeiro de perceber como esta funciona na vida real, já que nos videojogos se utilizam os mesmos conceitos para iluminar os espaços 3D (com alguns truques à mistura). A luz é composta de partículas denominadas fotões. Estes fotões são criados no ponto onde a luz é emitida e viajam em linha reta, fazendo tabelas e ricochetes quando encontram obstáculos, até que chegam aos nossos olhos (ou a uma camara). A luz pode ser direta ou indireta. 2.1. LUZ DIRETA Falamos de luz direta quando os fotões atingem diretamente a superfície iluminada, isto é, quando não há obstáculos entre o emissor de luz e a superfície. Por exemplo, quando estamos numa casa e nos pomos à frente de uma janela aberta, a luz do Sol incide diretamente no nosso corpo e ilumina-nos. 2.2. LUZ INDIRETA É a luz que recebemos após interações com outros objetos. Por exemplo, se nos colocamos num canto de uma casa, longe dos raios diretos da luz, nós somos iluminados por fotões que fizeram ricochete no chão, nas paredes e nos restantes objetos presentes. Figura 1. Nesta imagem pode ver como os raios vermelhos atuam como luz direta sobre a casa, enquanto o raio verde é luz indireta (primeiro atinge as nuvens, e depois atinge a casa) No âmbito dos videojogos, podemos ver um exemplo se como se desenham os dois tipos de luz com a seguinte imagem. Figura 2. Nesta imagem podemos ver os diferentes tipos de luz. Na imagem da esquerda, podemos ver uma cena sem iluminação, no meio a cena está somente iluminada por luz direta (o quadrado no teto é uma janela para o exterior), e na direita podemos ver a iluminação direta e a indireta. 2.3. TIPOS DE LUZ No Unity, podemos ter três tipos de luzes diretas: omnidirecional, pontual e foco. Nas imagens abaixo, vamos manter a mesma luz, mudando apenas o tipo. A cor da luz é um roxo intenso, para se notar bem. 2.3.1. DIRECIONAL Esta é normalmente usada como luz ambiente, a luz que todos os objetos recebem numa certa direção, independentemente da sua posição. Serve essencialmente para iluminar toda a cena. Podemos pensar nela como o Sol da nossa cena. No mundo real, a luz do Sol seria uma luz direcional. Figura 3 2.3.2. FOCO Este tipo de luz irradia ã partir de uma direção, numa certa direção e com uma certa abertura. O exemplo mais parecido com o mundo real seria um foco de luz de um candeeiro de secretária apontado a uma mesa, ou uma lanterna. Figura 4 2.3.3. OMNIDIRECIONAL Este tipo de luz irradia em todas as direções (360 graus). Imagine uma lâmpada ou uma vela. Este tipo de luz também é conhecido como luz pontual. Figura 5 2.4. CONFIGURAÇÃO DA LUZ Além da configuração das luzes individuais, a iluminação da cena é também feita com recurso ao “Lighting Settings”, onde se podem configurar vários elementos: Enviroment: parâmetros da iluminação dada pelo céu da nossa cena (skybox) ◼ Realtime Lighting: aqui se podem ajustar parâmetros relativos à iluminação em tempo real, mudando várias propriedades. ◼ Mixed Lighting: Usando esta opção, pode iluminar-se a cena com uma mistura de luzes dinâmicas em tempo-real, e luzes estáticas pré-cozinhas (baked) ◼ Lightmapping Setting: Esta secção utiliza-se para configurar as opções relativas à luz précozinhada. ◼ Figura 6 2.5. TÉCNICA RIM LIGHT Quando queremos iluminar exteriores, temos várias possibilidades. Uma das técnicas mais usadas é usar uma rim light. No que consiste a luz Rim Light? Esta técnica consiste em complementar a luz principal direcional com outra luz direcional, com outra direção (normalmente a mais de 90 graus de diferença da principal), com uma cor subtilmente diferente (a maior parte das vezes, mais azulada), e com muito menos potencia. Esta técnica é usada muitas vezes em fotografia, mas também o é no mundo dos videojogos. Para compreender melhor, vamos ver duas fotografias: Figura 7 Na primeira, podes ver que só temos uma luz, que vem do lado esquerdo, e por isso só vemos a parte da cara que está virada para esta. Se quiséssemos ver toda a silhueta, precisávamos de uma rim light, como se vê na fotografia abaixo. Figura 8 Nesta imagem, além da luz principal que vem do lado direito, temos uma luz secundárias mais ténue que vem do lado esquerdo, que complementa a luz primária e torna mais fácil ver a silhueta. 2.6. RIM LIGHT EM VIDEOJOGOS Criar o efeito de rim light nos videojogos é relativamente simples. Assim que tenhamos uma luz direcional, podemos apenas duplicar essa luz, inverter o ângulo, e baixar um bocado a intensidade. Figura 9. Nave sem rim light Figura 10. Nave com rim light aplicada 3. CÂMARAS E CAMADAS 3.1. PROPRIEDADES DAS CÂMARAS As câmaras nos videojogos funcionam de forma muito parecida com câmaras na vida real, já que os movimentos que realizam, a forma de apontar para conseguir um bom efeito e as técnicas são iguais. No entanto, no mundo virtual podemos controlar algumas propriedades extra que não têm correspondência na vida real, como o que vemos quando não há objetos para ver (o fundo ou background), a que distância podemos ver, se queremos usar uma câmara com perspetiva ou não (câmara ortográfica) Todas as câmaras têm umas propriedades que podemos alterar para conseguir diferentes efeitos, tais como o campo de visão (field of view), que nos permite ver quanto do lado em relação à câmara é que conseguimos visualizar. 3.2. POSICIONAMENTO DA CÂMARA Para posicionar uma câmara, é necessário primeiro criá-la. Portanto, para criar uma câmara em Unity é tão simples como ir à secção da hierarquia, clicar com o botão direito e selecionar “Camera”. Dependendo do jogo que quer desenvolver, as câmeras serão posicionadas de uma forma ou de outra. Embora não seja particularmente complicado, é melhor vê-lo no vídeo que temos preparado. 3.3. CAMADAS As camadas (layers) são uma forma de agrupar os GameObject em diferentes grupos. Isto permite-nos especificar mais facilmente a outros componentes sobre que objetos temos de operar. Por exemplo, que grupo queremos que seja visível com uma câmara em particular. Outro exemplo é podermos especificar que objetos podem ser atingidos por balas, que tem como vantagem melhorar a performance do nosso jogo. 3.4. CÂMARAS AVANÇADAS Existem sistemas muito mais avançados de câmaras para videojogos; não é surpreendente por isso que o Unity tenha acrescentado há pouco tempo um sistema denominado Cinemachine, que permite controlar câmaras de forma mais complexa, acrescentando-lhes componentes de uso comum nos videojogos. Este sistema é neste momento gratuito, tendo começado a sua vida como o trabalho de uma só pessoa que o vendia na Asset Store. Este sistema tem uma flexibilidade incrível quando se trata de manipular câmaras. O maior inconveniente é que foi desenhado para alguém que esteja familiarizado com a terminologia do cinema e compreenda as técnicas que estão por detrás de certos parâmetros das câmaras. Mesmo assim, manuseando o sistema permite-lhe gradualmente aprender como ele se comporta e fazer algumas transições de câmara surpreendentes. Agora que já terá visto os vídeos, vamos ver por alto algumas das câmaras que utilizam no CineMachine, caso queira experimentar utilizá-las um pouco. O primeiro passo é ir à Asset Store e descarregar o CineMachine para o projeto. Depois de descarregado, importamos o pacote para o projeto. Uma vez importado, temos um novo menu na barra superior do Unity, denominado “Cinemachine” : Vamos ver as diferentes câmaras que se podem criar: ◼ Virtual Camera: Esta é a opção por omissão, esta é uma câmara melhorada que nos dá mais flexibilidade que a câmara normal do Unity. Podemos designar-lhe um alvo (target) para a câmara seguir, um ponto para focar, entre muitas outras opções. Sever para termos uma imagem definida (como uma câmara a seguir um carro em movimento). ◼ FreeLook Camera: Usamos esta opção quando queremos criar uma câmara na terceira pessoa. Desde modo, sem necessidade de estar a criar código específico, podemos alcançar uma câmara totalmente funcional para um jogo na terceira-pessoa. ◼ State-driven Camera: Este tipo de câmara utiliza-se em jogos como God of War, onde temos várias câmaras apontadas para sítios diferentes, e uma função de estado do jogo que permite dizer ao sistema qual é a câmara que deve estar ativa num certo instante. ◼ ClearShot Virtual Camera: Este é o tipo de câmara que utilizamos para conseguir uma imagem não obstruída de um certo objeto. A câmara irá mover-se de forma a garantir que o objeto esteja sempre visível. Por exemplo, é o ideal para jogos onde queremos que o jogador esteja sempre visível, apesar dos obstáculos, paredes, etc. ◼ Dolly Camera with track: Este tipo de câmara está constrangida a um caminho definido. É necessário definir um caminho que a câmara irá seguir à velocidade que nós queremos, animando ou alterando por código um valor. Podemos ver este tipo de câmaras no futebol, ou no cinema quando se a câmara segue uma personagem, veículo ou outro objeto. ◼ Group Target camera: Este tipo de câmara utiliza-se quando queremos que vários elementos da cena estejam sempre dentro do campo de visão da câmara. Por exemplo, quando temos um grupo de três personagens e queremos que estejam sempre visíveis. A câmara vai mover-se e alterará os seus parâmetros de forma a que estes estejam sempre visíveis. 3.5. GAMEOBJECT E COMPONENTES No Unity, o objeto básico com o qual se trabalha chama-se GameObject. São nestes objetos em que se poderá acrescentar os componentes com os quais se construirá todos os elementos do jogo. 3.5.1. ACTIVAR E DESACTIVAR GAMEOBJECT E COMPONENTES Ativar e desativar GameObjects ou componentes, faz com que estes sejam ativos ou inativos durante a execução do jogo. Ou seja, se você desativar um objeto, ele não aparecerá no jogo até que reativá-lo e a mesma coisa acontece com os componentes. Para ativar um GameObject ou um componente, simplesmente devemos marcar ou desmarcar a checkbox (caixa de seleção) do mesmo. Figura 1. O quadrado vermelho corresponde à ativação/desativação do GameObject, enquanto o quadrado verde corresponde à ativação/desativação do componente. 3.5.2. ATIVAR E DESATIVAR GAMEOBJECTS E COMPONENTES POR CÓDIGO Pouco a pouco vamos vendo como realizar as operações por código. Não se preocupe se não entender completamento, pois pouco a pouco irá fortalecendo os conceitos básicos da programação. GameObjects Para ativar e desativar os GameObjects por código, simplesmente tem de se executar a seguinte instrução. ◼ Para ativar: gameObject.SetActive(true); Figura 2. Exemplo de ativação de um GameObject ao iniciar o jogo ◼ Para desativar: gameObject.SetActive(false); Figura 3. Exemplo de desativação de um GameObject no inicio do jogo Se o script for adicionado a um GameObject, não é necessário referir-se ao próprio GameObject; usando a palavra gameObject, ele automaticamente refere-se a si mesmo. Componentes Para ativar e desativar os componentes por código, simplesmente executa-se a seguinte instrução: ◼ Para ativar: componente.enable = true; Figura 4. Exemplo de ativação de um componente de tipo Renderer quando se inicia o jogo ◼ Para desativar: componente.enable = false; Figura 5. Exemplo de desativação de um componente Renderer quando inicia o jogo