Você está na página 1de 651

Sumário

Prefácio
Sobre o Autor
Recursos Utilizados neste Livro
Organização deste Livro
Resumo dos Capítulos
Convenções Utilizadas neste Livro
Tradução Conveniente
Encorajando o Leitor Para Fazer os Exemplos
Caixas de Notas
Como Entrar em Contato
Créditos
Parte 1: Introdução ao Unity
Sobre o Motor de Jogo
Sobre os Planos do Unity
Requisitos Mínimos
Instalando o Unity
Instalação com o Unity Hub
Sobre o Unity Hub
Criando um Projeto de Exemplo
Familiarizando-se com a Interface
Sobre a Janela Hierarchy
Sobre a Janela Scene
Sobre a Janela Game
Sobre a Janela Asset Store
Sobre a Janela Inspector
Sobre a Janela Project
Sobre a Janela Console
Sobre o Menu Principal
Sobre a Barra de Ferramentas
Layout das Janelas
Alterando o Layout Padrão
Salvando o Layout Atual
Parte 2: Princípios Essenciais
A Janela Scene
Salvando Uma Cena de Exemplo
Adicionando Objetos na Cena
Navegando na Cena
Zoom
Mover
Rotacionar
Navegação Livre
Referência das Teclas de Navegação
Gizmo da Cena
Transformação Básica
Barra de Controle da Cena
Modo de Exibição
Visão 2D
Luzes
Sons
Efeitos Visuais
Visibilidade dos Objetos
Ferramentas de Edição de Componentes
Configurações da Visão da Câmera da Cena
Gizmos
Barra de Busca
A Janela Hierarchy
Pesquisando Objetos
Buscando por Tipo
A Janela Inspector
Semelhanças Entre Todos os Objetos
Nome do Objeto
Estado do Objeto
Static
Tags
Layers
Componente Transform
A Janela Project
Layout de Uma e Duas Colunas
Pesquisando Assets no Projeto
Filtrar por Tipo
Filtrar por Rótulo
Filtrar por Favorito
Arquivos “.meta”
Criando Assets Internos
A Janela Game
Controles de Reprodução do Jogo
Barra de Controle de Opções
Tela de Exibição
Proporção da Tela
Escala da Tela
Maximizar ao Reproduzir
Desligar os Sons Durante a Execução
Sincronização Vertical
Estatísticas de Desempenho
Gizmos
Modificação Durante a Execução
Utilizando a Loja de Assets
Acessando a Loja de Assets
Buscando Assets
Buscando Assets por Nome
Buscando Assets por Categoria
Filtrando Assets por Preço
Filtrando Assets por Qualidade
Filtrando Assets por Data
Buscando por Subcategoria
Baixando e Importando Assets
Buscando Assets da Loja na Janela Project
Gerenciador de Atalhos do Teclado
Perfis de Atalhos
Criando um Perfil
Renomeando um Perfil
Removendo um Perfil
Layout de Atalhos
Pesquisando Comandos e Atalhos
Definindo e Editando Atalhos
Preferências do Unity
Carregar o Último Projeto ao Iniciar
Ordenação Alfabética para a Hierarchy
Editor de Código Padrão
Cores da Interface
Parte 3: GameObjects & Componentes
Sistema de Coordenadas
Dimensões 2D e 3D
Sistema de Coordenadas Cartesiano
Coordenada 2D
Sintaxe Comum para as Coordenadas
Coordenada 3D
Transformando Objetos
Mover
Rotação
Escala
Transformação Retangular
Múltiplas Transformações
Transformação em Incremento
Transformando com o Componente Transform
Posição e Direção do Gizmo de Manipulação
Posição do Manipulador
Direção do Manipulador
GameObjects e Componentes
Trabalhando com Componentes
Encolhendo e Expandindo as Propriedades
Desativando um Componente
Removendo um Componente
Adicionando um Componente
Criando GameObjects
Parentesco
Coordenada Global e Local
Câmeras
A Visão da Lente da Câmera
Propriedades e Componentes
O Componente Audio Listener
Visibilidade dos Objetos
Isolando Objetos
Prefabs
Criando um Prefab
Entrando no Modo Prefab
Modificando um Prefab
Adicionando Novos Objetos
Modificando as Instâncias do Prefab
Manipulando as Alterações
Prefab Aninhado
Criando um Asset de Prefab Variado
Desfazendo Instâncias do Prefab
Parte 4: Modelos, Materiais e Texturas
Modelos
Malhas Trianguladas e Quadriculadas
Objetos 3D Interno
Modelando com Objetos Primitivos
Importando Modelos
Importando Modelos da Loja de Assets
Materiais, Shaders e Texturas
Shaders
Texturas
Materiais
Parâmetros do Shader Padrão
Albedo
Modo de Renderização
Cutout
Fade
Transparent
Metalic
Normal Map
Definindo o Material de um Modelo 3D
Parte 5: Ambiente Externo com o Gerador de Terreno
Criando e Preparando o Projeto
Otimizando o Cálculo da Iluminação
Assets Necessários
Gerando e Configurando o Terreno
Adicionando o Objeto de Terreno
Configuração Inicial do Terreno
Resolução
Iluminação
Otimizando o uso do processador
Esculpindo o Terreno
Levantar ou Diminuir o Terreno
Definindo a Altura
Nivelando o Terreno
Suavizando a Superfície
Estampando
Pincel Personalizado
Configurações do Pincel
Pintando e Colorindo o Terreno
Aplicando Textura
Gerando Detalhes e Árvores
Pintando Detalhes
Otimização dos Detalhes
Direção do Vento
Pintando Folhas e Cogumelos
Pintando Árvores
Otimização das Árvores
Plantação em Massa
Objetos Separados do Terreno
Expandindo o Terreno
Parte 6: Primeiro Projeto de Jogo 3D
Preparando o Projeto
Assets do jogo
A Cena Principal
Configurando a Resolução de Teste
Adicionando um Personagem
Configurando o Personagem
Criando as Moedas para Coletar
A malha da Moeda
O Material da Moeda
Coletando a Moeda
Efeitos Sonoros
Animação da Moeda
Criando um Controlador de Animação
Criando e Gravando um Clipe de Animação
Reiniciando a Animação
Alterando a Curva da Animação
Velocidade da Animação
Contando as Moedas
Preparando a Interface
Criando e Definindo o Painel
Texto das Moedas
Atualizando o Total de Moedas
Atualizando as Moedas Coletadas
Temporizador de Fim de Jogo
Criando o Texto do Temporizador
Criando a Lógica do Temporizador
Reiniciando Após o Fim do Jogo
Ao Coletar Todas as Moedas
Skybox
Entendendo a Skybox
Criando e Definindo uma Skybox
Propriedades da Skybox
Música de Fundo
Exportando o Jogo
Parte 7: Sprites & Ferramentas 2D
Modo 2D
Transformando Objetos no Modo 2D
Mover
Rotação
Escala
Ferramenta Retangular
Mover
Rotacionar
Redimensionar
Encaixe por Vértice
Criador de Sprites do Unity
Formas Comuns
Importando e Configurando Sprites
Importando Sprites
Configurando Sprites
Tipo da Textura
Modo do Sprite
Pixeis por Unidade
Ponto de Manipulação (Pivot)
Modo de Filtragem
Componente Sprite Renderer
Definindo um Sprite
Alterando a Cor do Sprite
Demais Parâmetros
Editor de Sprites e Sprite Sheet
Editando o Formato do Sprite
Alterando a Forma Padrão
Editando os Pontos da Forma
Adicionando Novos Pontos
Removendo Vértices
Finalizando a Edição
Separando Sprites de um Sprite Sheet
Alterando o Modo do Sprite
Cortando o Sprite Manualmente
Ajustando a Área de Seleção
Cortando Áreas Transparentes
Movendo o Pivot
Propriedades do Sprite
Separando o Sprite Sheet do Exemplo
Corte Automático
Pivot
Método de Corte
Finalizando o Corte
Corte do Tipo Grid by Cell Size
Tamanho de Cada Sprite
Margem
Espaçamento
Pivot
Corte do Tipo Grid by Cell Count
Técnica de Escala em 9-Fatias
Repetindo um Sprite
Ordem de Exibição
Gerenciando Camadas de Exibição
Usando Máscaras de Sprites
Cenário com Tile Map
Criando uma Paleta de Tiles
Criando um Mapa de Tiles
Configurando o Tamanho dos Tiles
Isolando o Mapa de Tiles
Ferramentas de Pintura de Tiles
Ferramenta de Pincel de Pintura
Ferramenta de Apagar
Ferramenta de Seleção
Ferramenta de Mover
Ferramenta de Preencher Caixa
Ferramenta de Preencher
Ferramenta de Conta-gotas
Vídeo Sobre as ferramentas de pintura
Organizando a Paleta de Tiles
Propriedades do Componente Grid
Propriedades do Componente Tilemap
Propriedades do Tilemap Renderer
Regra de Tiles
Instalando o Complemento RuleTile
Criando um Asset de Regra de Tiles
Criando as Regras de Tiles
Parte 8: Jogo de Plataforma 2D para Celular
Preparando o Projeto
Configurando a Plataforma Android
Configurando a Plataforma iOS
Importando os Assets Necessários
Plano de Fundo
Construindo o Cenário de Plataforma
Objetos de Decoração
Adicionando um Colisor
Parede Lateral
Material de Física
Camadas de Colisão
Criando o Personagem
O GameObject do Personagem
A Tag do Personagem
A camada de Colisão do Personagem
Criando o Prefab do Personagem
Adicionando e Configurando os Componentes
Efeitos Sonoros
Animando o Personagem
Preparando as Animações
Definindo os Estados e Quadros de Animação
Criando e Definindo um Blend Tree
Animação do Estado “Parado” e “Correndo”
Animação do Estado “Pulando”
Câmera Segue com Cine Machine
Instalando o Cine Machine
Configurando uma Câmera Virtual
Configurando a Zona Morta
Moedas para Coletar
O Sprite Sheet da Moeda
Animação da Moeda
Os Componentes da Moeda
Adicionando o Colisor
Adicionando o Script da Moeda
Efeito de Partículas ao Coletar
Som da Moeda ao Coletar
Alterando as Camadas de Colisão
Exibindo o Total de Moedas
Adicionando os Gerenciadores
Completando a Fase Atual
Transição Entre Cenas
Adicionando Armadilhas
A vida do Personagem
Armadilha de Espinho
Armadilha de Buraco
Animação do Personagem Morrendo
Controles para Celular
Reprodutor de Música
Otimização Básica
Matriz de Colisão de Camadas
Empacotando Sprites
Exportando o Jogo para Android
Configurando o Projeto Antes de Exportar
Gerando o Arquivo APK
Salvando e Instalando um APK no Celular
Exportando o Jogo para iOS
Configurando o Projeto Antes de Exportar
Adicionando seu ID Apple para o Xcode
Exportando um Projeto do Xcode
Compilando o Jogo com Xcode
Parte 9: Conclusão & Apêndice
O que Esperar do Próximo Livro?
Apêndice
Introdução ao Visual Studio Code
Baixando e Instalando o Editor
Instalando os Pré-requisitos
Definindo o Editor de Código Padrão
Abrindo o Projeto
Alterando o Idioma da Interface
Acessando as Configurações do Editor
Glossário
2D
Objeto 2D
Sprite atlas
Animação
A janela Animator
A janela Animation
Clipe de Animação
Chave de Animação
Componente Animator
Controlador de Animação
Quadro-chave
Assets
Asset
Arquivo de Modelo
Loja de Assets
Modelo
Prefab
Standard Asset (ou Elementos Básicos)
Unidade do Unity
Áudio
Audio Listener
Audio Source
Clipe de Áudio
Play On Awake
Editor
A janela Console
A Visão do Projeto
A Visão da Cena
Inspector
Zoom
Física
Box Collider (Colisor de Caixa)
Capsule Collider (Colisor de Capsula)
Colisor
Character Controller (Controlador do Personagem)
Detectar Colisões
Rigidbody
Gráficos
Gizmo
Malha
Material
Mesh Filter
Mesh Renderer
Modo de Renderização (Rendering Mode)
Normal Map
Pixel
Quad
Skybox
Sprite
Shader
Standard Shader
Textura
Tile
Tilemap
Terreno
Renderizar
Geral
Billboard
Build
Câmera
Cena
Componente
Componente Transform
GameObject
Objeto 3D
Parentesco
Linha do Tempo
Animação
Interpolação
Curva de Animação
Propriedade Animável
UI (User Interface)
Canvas
Texto
UI
Scripting
Tag
Scripts
Unity Total - Fundamentos Essenciais

Copyright © 2019, escrito por Rafael Henrique Capati

Todos os direitos reservados. Nenhuma parte deste livro pode ser reproduzida, armazenada em sistema de recuperação,
ou transmitida de qualquer forma, ou por qualquer meio eletrônico, mecânico, fotocopiador, gravador ou de qualquer
outra maneira, sem o consentimento por escrito do autor (Rafael Henrique Capati), exceto pelo uso de citações breves
em artigos e resenhas.

Todo esforço foi feito na preparação deste livro para assegurar a precisão das informações apresentadas. Entretanto, as
informações contidas neste livro são vendias sem garantia, expressa ou implícita. Nem o autor, seus revendedores e
distribuidores serão responsabilizados por quaisquer danos causados diretamente, ou indiretamente por este livro.

Primeira publicação: Abril de 2019

Publicado por: Rafael Henrique Capati


Prefácio

Bem-vindo ao Unity Total: Fundamentos Essenciais! Este é o primeiro livro de uma série especial onde vou abordar
todas as etapas necessárias para desenvolver jogos com o Unity. Estou muito animado sobre este livro, e muito
orgulhoso do trabalho e tempo dedicado para escrevê-lo. Espero que você ache o conteúdo útil durante sua jornada no
desenvolvimento de jogos.

Este é o melhor momento para começar a usar o Unity. O mundo do desenvolvimento de jogos está ficando maior e
cada dia mais interessante, incluindo ferramentas e tecnologias que estão melhores que nunca.

Bom aprendizado e divertimento!


Sobre o Autor

Rafael Henrique Capati é um programador, desenvolvedor web, pixel artista e recentemente escritor com o lançamento
do livro “Unity Total: Fundamentos Essenciais”, o primeiro livro de uma série. Desde criança ele sempre foi um
entusiasta na computação e hoje em dia trabalha profissionalmente na área com o objetivo de repassar seu
conhecimento para as grandes massas.
Recursos Utilizados neste Livro

Para acompanhar os exemplos neste livro você precisa baixar os recursos necessários. Nossa página dedicada para o
livro contém informações e novidades sobre os livros da série, incluindo todos os arquivos e recursos necessários para o
leitor acompanhar durante os exemplos.

Endereço do site oficial do Unity Total:

https://unity-total.blogspot.com
Organização deste Livro

Imagine este livro como se fosse um grande tutorial, abordando todos os fundamentos que você precisa para começar a
desenvolver com o Unity. É importante que o leitor não pule os capítulos ou as seções e siga cada etapa quando for
apresentada do começo ao fim, isso significa que muita coisa descrita posteriormente depende do que foi feito antes.
Além disso, é altamente recomendável que o leitor faça os exemplos na prática, apenas desta forma você consegue
aprender e memorizar todos os detalhes. Cada pessoa têm uma maneira diferente de aprender, algumas preferem ler um
capítulo ou seção para depois reler e fazer na prática, já outras optam por uma leitura seguindo exatamente quando
descrito, de qualquer maneira é importante que você faça o mesmo como apresentado no livro e também realize seus
próprios testes e experimentos.

Resumo dos Capítulos

Veja a seguir um resumo básico de cada capítulo, assim você tem uma ideia do que será abordado durante o decorrer do
livro:

Introdução ao Unity: Este é o seu primeiro contato com o Unity, onde você vai descobrir o que é motor de jogo
(game engine) e aprender onde baixar e instalar o Unity em seu sistema.
Princípios Essenciais: É uma continuação direta do capítulo anterior com bastante relevância no ponto de vista
de introdução. O foco continua sendo no funcionamento geral das janelas e aspectos comuns do Unity. O
conhecimento adquirido neste capítulo é essencial para que você consiga aprender qualquer outra parte do Unity.
GameObject e Componentes – O que torna um jogo possível é a criação de diferentes objetos que compõem o
jogo como todo. Para manipular esses objetos você precisa aprender sobre o sistema de coordenadas do Unity,
transformar os objetos na cena e adicionar componentes para definir diferentes objetos.
Modelos 3D, Materiais e Texturas: Neste capítulo vou mostrar como trabalhar com modelos (geometria de
todos os objetos) e como aplicar materiais e texturas (a cor dos modelos).
Ambiente externo com o gerador de Terreno: Aprenda a construir mundos externos com o gerador de Terrenos
do Unity, desde a sua escultura e formação até sua coloração, vegetação, árvores, etc.
Primeiro projeto de Jogo 3D: Utilize o terreno que foi criado no capítulo anterior para criar um jogo com um
objetivo específico. Este capítulo basicamente coloca na prática tudo que você aprendeu antes, além disso, você
vai aprender sobre animações, interfaces do usuário e como escrever código.
Sprites e Ferramentas 2D: Saiba como criar um projeto 2D e utilizar ferramentas e recursos para manipular
Sprites.
Jogo de Plataforma para Celular: Utilize o conhecimento adquirido no capítulo anterior para criar um jogo de
plataforma para celular (Android e iOS). Neste capítulo você vai aprender mais sobre animações, efeitos de
partículas, obter pacotes e otimização básica do jogo.
Conclusão & Apêndice: O que esperar do próximo livro e conteúdo extra que pode ser consultado como
referência, também possui partes importantes, mas que foram separadas dos outros capítulos para não “quebrar” o
contexto atual.
Convenções Utilizadas neste Livro

Tradução Conveniente

Saber inglês é sempre uma boa habilidade, mas não é mandatório para aprender Unity ou necessário para acompanhar
o livro, mesmo se você não tiver experiência com o idioma, as janelas e propriedades que forem apresentadas durante o
decorrer do livro podem ser facilmente traduzidas para o português. Isso significa que só pelo nome você já pode ter
uma ideia do propósito de uma determinada janela ou qualquer outra propriedade do Unity, é claro que existem
diversas exceções por causa dos jargões técnicos. Entretanto, para manter o livro conveniente com o apresentado
originalmente pela “interface” do Unity, estarei mencionando os nomes em inglês e breves traduções quando
necessário. Por exemplo: Siga para o menu File (arquivo) e selecione Save (salvar).

Encorajando o Leitor Para Fazer os Exemplos

Em se tratando de um livro técnico como este, é comum encontrar muitas explicações e trechos teóricos, mas a melhor
maneira de aprender alguma coisa é praticando. Ao chegar no momento das etapas para realizar alguma tarefa, estarei
mostrando essas etapas em uma caixa própria para encorajar o leitor para fazer o mesmo, algo parecido como no
exemplo a seguir:

Criando uma pasta para os arquivos de cena

1. Siga para a janela Project (projeto) e clique no botão Create (criar) que se encontra no canto superior esquerdo
da janela:

Botão Create da janela Project

2. Selecione a opção Folder (pasta, a primeira opção no menu).

3. E assim por diante…

Caixas de Notas

Este livro possui diversas caixas de notas com o propósito de explicar pontos importantes, dicas ou alerta sobre um
assunto específico, algo parecido como no exemplo a seguir:

Versão Preferida
É a versão selecionada por padrão quando for criar um projeto.
Como Entrar em Contato

Os livros da série Unity Total possuem uma página dedicada, onde você pode encontrar uma lista de erratas, exemplos,
e qualquer informação adicional.

Endereço do site oficial do Unity Total:

https://unity-total.blogspot.com

Além disso, para dúvidas, críticas ou sugestões, fique à vontade para entrar em contado comigo diretamente pelo
correio eletrônico: rhcapati@gmail.com.
Créditos

Autor: Rafael Henrique Capati

Capa: Joberth Morais de Andrade


Parte 1: Introdução ao Unity

Neste Capítulo você vai aprender:

Descobrir o que é motor de jogo (game engine)


Criar uma conta do Unity
Instalar o Unity
Como criar um projeto e abrir um existente
Familiarizar-se com a interface

Neste capítulo você vai descobrir o que é motor de jogo (game engine) e aprender onde baixar e instalar o Unity em seu
sistema operacional. Primeiro você vai descobrir as licenças disponíveis, a diferença entre elas e em seguida baixar e
instalar o Unity Hub que será utilizado para gerenciar as instalações do Unity. Você também vai criar uma conta do
Unity que será utilizado para ativar a licença pessoal. No final, com o Unity instalado, você vai criar um projeto e se
familiarizar com a interface.
Sobre o Motor de Jogo

Se você acompanha a indústria de jogos, você já deve ter ouvido falar do termo game engine (ou “motor de jogo” em
português). Um motor de jogo basicamente é um programa feito para pessoas que desejam criar jogos. Motores de
jogos oferecem componentes reusáveis que podem ser manipulados para trazer vida ao jogo. Estes componentes fazem
parte da funcionalidade principal que geralmente inclui exibição de gráficos 3D e 2D, física, detecção de colisões, som,
script, animação, “interfaces” do usuário, inteligência artificial e redes são alguns componentes que compõem um
motor de jogo. Dessa forma podemos reutilizar ou adaptar diversos componentes no mesmo motor de jogo para criar
diferentes jogos.

O Unity é um motor de jogo que nos permite criar jogos sem precisar saber como funciona as partes internas que faz o
jogo ser executado e exibido, ou seja, desenvolvedores de jogos podem focar apenas nas mecânicas do jogo utilizando
as funcionalidades expostas pelo motor de jogo, enquanto as partes internas de como as funcionalidades são criadas é
feito pela equipe ou empresa responsável pelo desenvolvimento do motor de jogo, no caso do Unity é a “Unity
Technologies”. Desenvolver a própria game engine requer muito conhecimento avançado com programação de
gráficos, matemática e física, você pode aprender tudo isso durante todo o processo e ganhar bastante experiência,
porém, vai levar muito tempo ou senão anos para criar algo simples. Para quem está começando e quer apenas dedicar
seu tempo no desenvolvimento de jogos, é muito melhor escolher um motor de jogo existente como o Unity e deixar as
partes internas para os responsáveis no desenvolvimento do motor de jogo de sua escolha.

Sabendo disso, veja a seguir alguns benefícios ao utilizar o Unity:

Você não precisa reinventar a roda, ou seja, muita coisa já foi feita para você, tudo que você precisa fazer é criar
o conteúdo do seu jogo.
Precisa de algo específico? A Loja de Assets do Unity contém tudo que você pode imaginar para facilitar e
acelerar o desenvolvimento do seu jogo.
Facilidade de uso e aprendizado.
Desenvolva jogos de multiplataforma facilmente, sem a necessidade de realizar grandes alterações no seu projeto.
Suporte para jogos 2D, 3D e uma combinação de ambos.
Integração e suporte para diferentes ferramentas e arquivos externos que nos permite importar qualquer tipo de
conteúdo.
Utiliza o C# para programar seu jogo, é uma linguagem de programação poderosa e relativamente fácil de
aprender.
Excelente documentação e grande comunidade que facilita resolver qualquer problema ou encontrar ajuda.
Desenvolvimento ativo, isso significa que bugs (falhas no programa) são resolvidos rapidamente e novos recursos
são lançados com frequência.
E muito mais…

Sobre os Planos do Unity

A versão gratuita (plano pessoal) inclui acesso a todos os principais recursos do Unity, você pode inclusive usar a
versão “Pessoal” para comercializar seu jogo, porém, para ser elegível ao plano “Pessoal”, você ou sua empresa precisa
obter uma receita anual de até $100,000 (cem mil dólares). Isso não é algo que você precisa se preocupar agora, mas se
futuramente você se der bem com seus jogos e começar a ganhar mais de $100,000 por ano, então você vai precisar
atualizar a licença.
Veja a seguir uma breve descrição entre os planos disponíveis:

Pessoal: Para iniciantes, estudantes e entusiastas que desejam explorar e começar com a Unity. A elegibilidade
financeira deste plano permite que você ou sua empresa obtenha uma receita anual de até $100 mil dólares.

https://store.unity.com/pt/products/unity-personal

Plus: Para hobistas ou amadores. Obtenha recursos de treinamento adicional e “assets” para acelerar seu
aprendizado e desenvolvimento. A elegibilidade financeira deste plano permite que você ou sua empresa obtenha
uma receita anual de até $200,000 mil dólares.

https://store.unity.com/pt/products/unity-plus

Pro: Para equipes profissionais e trabalhadores independentes (freelancers). Possui suporte avançado que inclui
acesso direto e prioritário aos especialistas, consultores e serviços do Unity. A elegibilidade financeira deste
plano não tem limites para receita ou financiamento.

https://store.unity.com/pt/products/unity-pro

Durante o livro vamos utilizar a versão “Pessoal”.

Requisitos Mínimos

Baseando-se na versão do Unity 2019.2, veja a seguir os requisitos mínimos do sistema durante o desenvolvimento do
seu jogo:

Sistema operacional: Windows 7 SP1 +, 8, 10, apenas versões de 64 bits; Mac OS X 10.11+. Versões de
servidor do Windows & OS X não são testados.
Processador: Suporte para o conjunto de instruções SSE2.
Placa de vídeo: Com recursos DX10 (shader model 4.0).

NOTA: Requisitos para o Linux


O Unity oferece suporte oficial para o Ubuntu 12.04 ou versões mais novas. Distribuições derivadas do Ubuntu
como o Linux Mint ou outras distribuições provavelmente não terão problemas, mas não é garantido o suporte.
A máquina precisa de um processador com suporte ao conjunto de instruções SSE2 e uma placa de vídeo
moderna com drivers oficiais (fornecidos pela NVIDIA, AMD ou Intel).

O restante depende da complexidade dos seus projetos. Para obter mais informações sobre os requisitos, acesse o link
oficial:

https://unity3d.com/pt/unity/system-requirements
Instalando o Unity

A parte mais empolgante ao aprender um novo aplicativo é instalar e executar o mesmo pela primeira vez. Em seguida
vem a parte da familiarização do ambiente de edição. Se você não está acostumado a trabalhar com programas de
criação de conteúdo digital, o Unity pode parecer bastante intimidador, mas assim que você se familiarizar com a
“interface” do editor, o Unity vai se tornar um aplicativo comum como em qualquer outro programa que você já está
acostumado utilizar. Para começar a usar o Unity, você precisa baixar e instalar ele no seu computador que pode estar
rodando o sistema operacional Windows, Mac ou Linux. Existe um assistente de transferência para as três plataformas
que facilita o processo como em qualquer outra instalação de programas. Entretanto, neste livro vamos utilizar o novo
Unity Hub para gerenciar as instalações do Unity.

Versão do Unity para Linux


Vale a pena mencionar que até o fechamento deste livro a versão do Unity para Linux se encontra em fase
“prévia”, isso significa que é uma versão em desenvolvimento e não recomendada para ser usada em produção,
porém, você pode aprender Unity no Linux sem maiores problemas. Mesmo sabendo disso, muitas pessoas
utilizam em produção, pois consideram “estável” o suficiente para utilizar. Para obter mais informações, acesse
o seguinte link: https://forum.unity.com/forums/linux-editor.93/.
Instalação com o Unity Hub

É possível baixar e instalar o assistente de instalação do Unity separadamente para cada sistema operacional, porém, o
Unity pode ser facilmente instalado nos três sistemas (Windows, Mac e Linux) utilizando apenas o Unity Hub.
Entretanto, usuários do Linux deve se atentar às dependências que não são instaladas automaticamente, mais
informações em breve. O Unity Hub oferece uma nova maneira mais conveniente de gerenciar seus projetos e
instalações do Unity. Você pode usar o Unity Hub para criar seu projeto, associar uma versão do Unity para algum
projeto e gerenciar múltiplas versões do editor.

Antigamente quando você iniciava o Unity normalmente, a “Janela Inicial” era exibida onde você podia escolher um
projeto para carregar ou criar um projeto. O Unity Hub é um aplicativo separado que substituiu a janela inicial desde a
versão 2019.1.

Vantagens e características novas do Unity Hub:

Carregar e criar projetos.


Gerenciar múltiplas versões do Unity.
Associar um projeto com uma versão específica do Unity.
Instalar novos componentes com mais facilidade.
Definir a plataforma antes de carregar um projeto.

Veja a seguir como baixar e instalar o Unity Hub:

Baixando e Instalando o Unity Hub

Windows e Mac

1. Acesse o site oficial do Unity no endereço https://unity.com/pt e siga para a página de transferência (Download)
clicando no link Comece ou acesse o seguinte link:

https://store.unity.com/pt

Você será redirecionado para a loja do Unity.

2. Escolha a opção Pessoal clicando em Experimente Pessoal:


Figura 1.1 - Selecionando a versão Pessoal do Unity

3. Na próxima página, aceite os termos de serviço:

Figura 1.2 - Aceitando os termos de serviço

4. Logo em seguida clique no botão Download Unity Hub:

Figura 1.3 - Botão para baixar o instalador do Unity Hub

Assim que baixado, instale o Unity Hub normalmente como se fosse qualquer outro programa.

Linux

Como a versão para Linux se encontra com o status “prévia”, o link para baixar só está disponível nos fóruns oficiais
do Unity.
1. Acesse o fórum oficial do Unity Hub no seguinte endereço:

https://forum.unity.com/forums/unity-hub.142/

2. Entre no tópico da última versão do Unity Hub e baixe a versão para Linux. O arquivo está no formato
“.AppImage” que por padrão não é um executável.

3. Para tornar o arquivo executável, execute o seguinte comando no diretório atual do arquivo:

chmod u+x ./UnityHubSetup.AppImage

4. Clique duas vezes sobre o arquivo para executá-lo.

Assim que instalado e executado o Unity Hub pela primeira vez, a janela de “Bem-vindo ao Unity” (Welcome to
Unity) será exibida pedindo para que você se conecte com sua conta para ativar uma licença. Você precisa criar uma
conta do Unity que será utilizada para ativar o plano pessoal e futuramente para acessar a Loja de Assets que é um site
onde você pode baixar diferentes recursos prontos para o seu projeto.

Criando Uma Conta do Unity

1. Na janela Welcome to Unity (bem-vindo ao Unity), clique no botão Create a Unity ID(criar um ID do Unity):

Figura 1.4 – Criar um ID do Unity

2. Na tela de cadastro insira suas informações comuns, seu E-mail, Senha, Nome de usuário único, Nome
completo, aceite os termos de uso e política de privacidade do Unity, confirme em Não sou um robô e clique em
Criar um ID Unity:
Figura 1.5 - Criando uma conta do Unity

3. Após o cadastro, confirme sua conta do Unity acessando seu e-mail utilizado no cadastro da conta.

4. De volta no Unity Hub, em License management (gerenciamento da licença), selecione Unity Personal (a
licença gratuita). Em seguida clique em Next para continuar:

Figura 1.6 - Selecionando a licença pessoal


5. Em seguida você precisa aceitar o acordo de licença de uso que determina sua renda ao utilizar o Unity. Para o
seu caso, selecione a terceira opção “I don’t use Unity in a professional capacity” (“Eu não utilizo o Unity em uma
capacidade profissional”) e clique em “Next“ para confirmar.

Figura 1.7 - Selecionando o acordo de licença

6. A próxima etapa é responder um pequeno questionário sobre o seu perfil, responda como descrito a seguir:

Where are you located? (Onde você se encontra?), selecione “Brazil’.

In what capacity do you primarily use Unity? (Em qual capacidade você principalmente utiliza o Unity?), selecione
“Hobbyst – I use Unity in my free time” (Amador – Eu uso o Unity no meu tempo livre).

What is your primary role? (Qual seu cargo principal?), selecione quantas funções achar interessante, por exemplo
“Programmer” (programador).

How would you rate your Unity skills? (Como você avalia suas habilidades com o Unity?), selecione “Absolute
beginner-never used Unity before” (Iniciante total, nunca utilizei o Unity antes), ou selecione “Beginner” (Iniciante).

What type of content do you primarily plan to develop with Unity? (Qual tipo de conteúdo você planeja
principalmente desenvolver com o Unity?), selecione “Games”.

7. Clique no botão “Ok” para finalizar o questionário.

8. Ao finalizar, a janela “Obrigado” será exibida informando que antes de iniciar você precisa instalar o Unity,
apenas clique no botão Install Now para começar.
Figura 1.8 - Começar a instalação do Unity

A janela inicial do Unity Hub possui três abas principais, sendo elas Projects (projetos), Learn (aprender) e Installs
(instalações):

Figura 1.9 - A Janela Inicial do Unity Hub

Como essa é a sua primeira vez executando o Unity Hub, a aba Installs estará ativa por padrão, nessa aba você pode
ver as instalações do Unity no seu sistema, como não existe nenhuma instalação, a mensagem Setup Unity to begin
creating (Configure o Unity para começar a criar) será exibida.

A aba Installs é dividida em três categorias (painel no lado esquerdo):

On my machine: Instalações do Unity atualmente instaladas na sua máquina.


Official Releases: Lançamentos oficiais do Unity que estão disponíveis para serem baixados e instalados.
Beta Releases: Versões beta (experimental ou de teste) disponíveis para serem baixadas e testadas.

Baixando e Instalando a Versão Recente

1. Antes de instalar qualquer versão do Unity, crie uma pasta centralizada para armazenar as instalações do Unity.

Por exemplo, uma pasta chamada Unity em Documentos, na área de trabalho ou no diretório pessoal do seu sistema.

2. Para definir a pasta padrão, clique no ícone de engrenagem que se encontra no canto superior direito da janela:

Figura 1.10 - Acessar as configurações do Unity Hub

3. Defina o diretório padrão de instalação no campo Editors Folders Location (localização da pasta dos editores).
Clique no ícone com três pontos (...) para selecionar uma pasta ou cole o caminho no campo de texto, em seguida
clique no botão Done (finalizar) para salvar a configuração:
Figura 1.11 - Definindo o caminho de novas instalações do Unity

Para instalar uma versão estável, clique na aba Installs e entre na categoria Official Releases(lançamentos oficiais).
Nesta lista você vai encontrar no topo a versão mais recente:

Figura 1.12 - Lançamentos oficiais do Unity

A Versão Utilizada Neste Livro


A versão utilizada durante o decorrer do livro é a 2019.2 que até o fechamento deste livro se encontrava no
estágio alpha, neste caso utilize a categoria Beta Releases (lançamentos beta) para baixar a versão 2019.2 ou
mais recente. Versões beta ou alpha do Unity são estágios do programa disponíveis para serem testadas e não é
recomendável utilizar em produção. No entanto, como você está começando, vale a pena baixar a versão com os
recursos mais recentes.
4. Clique no botão Download que se encontra no lado do nome da versão:

Figura 1.13 - Escolhendo uma versão Beta (ou alpha) para baixar

Uma janela sobreposta é exibida onde você pode selecionar os componentes que serão instalados.

5. Selecione os seguintes componentes e clique em Next:

“Documentation” (documentação off-line).


“Microsoft Visual Studio” (editor de código padrão, esta opção não está disponível no Linux).

No canto inferior esquerdo você pode conferir o espaço necessário da instalação. Os demais componentes são opcionais
para acompanhar o livro e futuramente podem ser baixados a qualquer momento:
Figura 1.14 - Componentes para serem instalados

6. Na próxima tela, aceite o acordo de licença de uso do Visual Studio Community e clique em Done para iniciar a
transferência:

Figura 1.15 - Aceitando o acordo de licença do Visual Studio Community

Você pode acompanhar o progresso da transferência na categoria On my machine (na minha máquina).

Sobre o Unity Hub

Assim que finalizado, a primeira instalação do Unity será marcada como preferido (preferred). A versão preferida é a
selecionada por padrão ao criar um novo projeto:
Figura 1.16 - Instalação preferida do Unity

Se quiser selecionar uma instalação existente, clique no ícone de sinal de “+” em “Locate a Version” (localizar uma
versão) e abra o executável do editor. Você pode conferir a nova versão listada na categoria On my machine. Para
alterar uma instalação, clique no ícone de três pontos no final do nome para exibir o menu de opções:

Figura 1.17 - Menu de opções da instalação

Add Component (adicionar um componente): Permite selecionar outros componentes para baixar e instalar.
Set as preferred (definir como preferido): Define a instalação do Unity como sendo a preferida para novos
projetos.
Uninstall (desinstalar): Remove a instalação do Unity (somente instalações feitas com o Unity Hub).

Na aba Projects você pode gerenciar os projetos no disco (categoria On Disk), como ainda não existe nenhum projeto,
o Unity sugere para você criar um projeto local:
Figura 1.18 - Aba Projetos

No canto superior direito você vai encontrar o botão New que pode ser usado para criar um projeto. Já o botão Open é
utilizado para abrir um projeto existente:

Figura 1.19 - Botão Novo e Abrir

Logo em seguida você vai encontrar o botão Sign In de entrada, que é exibido quando você não está conectado com
sua conta. Se este for o seu caso, clique no botão Sign In e selecione Sign In novamente para abrir a janela Sign into
your Unity ID, informe seu e-mail e senha utilizado quando você criou sua conta do Unity:
Figura 1.20 - Entrando com sua conta do Unity

Se você já estiver conectado, o menu My account (minha conta) será exibido:

Figura 1.21 - Menu da Conta

Neste menu você pode acessar as seguintes opções da conta:

Go to account: Acessa a página da sua conta do Unity.


Manage organizations: Permite gerenciar suas organizações, basicamente é uma equipe colaborando no seu
projeto, desenvolvedores individuais ou que estão começando agora não precisam se preocupar com os recursos
da organização.
Upgrade License: Permite atualizar a licença do Unity.
Help: Central de ajuda do Unity.
Report a bug: Permite reportar um problema (bug) encontrado no Unity Hub.
Sign out: Permite sair da conta.
Criando um Projeto de Exemplo
Com o Unity e Unity Hub devidamente instalado, chegou o momento de criar seu primeiro projeto:

Criando Um Novo Projeto

1. No canto superior direito do Unity Hub, clique no botão New.

A janela vai exibir algumas configurações iniciais que você pode modificar antes que o Unity crie o seu projeto:

Figura 1.22 - Janela de criação de novo projeto

Múltiplas Versões do Unity


Repare que na figura anterior, o menu Unity Version está disponível, pois tenho múltiplas versões do Unity
instaladas com o Unity Hub. Se você instalou a primeira e única versão do Unity, este menu não será exibido.

Em Project name é definido o nome do projeto, com o nome padrão New Unity Project (novo projeto do Unity).

2. Remova o nome padrão e digite “Meu primeiro projeto”.


Figura 1.23 - Nomeando o novo projeto

O Unity vai criar uma pasta com o mesmo nome que você definir no campo Project Name, esta pasta será armazenada
no local definido no campo Location.

3. Em Location é definido o local onde o projeto será salvo. Você pode alterar esse caminho digitando o local
desejado ou clique nos três pontos para selecionar um diretório:

Figura 1.24 – Localização do novo projeto

No meu exemplo vou utilizar a pasta “Documentos” e dentro criar uma pasta chamada “Projetos do Unity”. Dessa
forma uma nova pasta chamada “Meu primeiro projeto” será criado na pasta “Projetos do Unity” que se encontra em
"Documentos".

4. No menu Template você pode escolher um modelo de projeto. Um modelo possui configurações pré-
selecionadas para um projeto específico, deixe a opção 3D selecionado:

Figura 1.25 – Modelos de projetos

Veja que você pode escolher um modelo 3D ou 2D, por padrão a opção 3D já se encontra selecionado. Ao escolher
uma das duas opções, o Unity vai definir algumas configurações padrões que facilita o trabalho naquele modo
específico. Os demais modelos são baseados no 3D, além de gerar uma cena de exemplo, esses modelos possuem
diferentes configurações visuais e de qualidade, por enquanto podemos ignorá-los.

5. Desabilite Unity Analytics (análise do Unity), por enquanto não precisamos desse recurso:
Figura 1.26 - Análise do Unity

Quando a “Análise do Unity” estiver habilitado, o Unity vai coletar algumas informações sobre o seu projeto para te
ajudar a ter uma visão geral no que está acontecendo com seu jogo. O botão Add Asset Package nos permite adicionar
arquivos já prontos para o nosso projeto que pode ser modelos 3D, partículas, scripts, sprites, e outras ferramentas e
conteúdo.

Figura 1.27 - Botão "Add Asset Package"

Ignore esta opção, pois vamos criar um projeto vazio.

6. Clique no botão Create project para criar um novo projeto.

O Unity vai criar e preparar a pasta do seu projeto e adicionar os arquivos internos:

Figura 1.28 - Criando e preparando o projeto

Assim que o editor abrir você já pode trabalhar com o Unity, mas antes de qualquer coisa, vale a pena mencionar assim
que o editor estiver em execução, caso você queira adicionar um novo projeto, basta seguir para o menu File e
selecione New Project, ou use a opção Open Project para abrir um projeto existente:
Figura 1.29 - Menu “Novo Projeto” e “Abrir Projeto”

A janela do Unity Hub será aberta exatamente como antes.

Se você acessar a aba Projects, o primeiro projeto que você acabou de criar estará listado. Futuramente quando for usar
o Unity para continuar com seu projeto, basta selecioná-lo nesta lista:

Figura 1.30 - Abrindo um projeto existente


Familiarizando-se com a Interface

Para criar coisas com o Unity, é importante entender como o Unity funciona, começando com a familiarização da
interface.

Tour Na Interface
Esta seção vai servir apenas como uma passagem rápida na interface, muitos dos recursos e funcionalidades de
cada janela serão descritos com mais detalhes durante o decorrer do livro e em módulos futuros.

Familiarizar-se com a interface é uma das primeiras e principais coisas para fazer ao começar a trabalhar com Unity. A
janela principal do editor é formada por janelas com abas que podem ser rearranjadas, agrupadas, separadas e
fixadas para atender à necessidade e preferência pessoal de cada usuário do Unity. Após carregar um projeto você vai
ver diversas janelas organizadas no Layout padrão, neste caso o termo Layout é utilizado para indicar a forma como
as diferentes janelas do Unity são arranjadas na interface. O Layout padrão é uma forma prática de acessar as janelas
mais comuns, cada janela possui uma legenda que fica no canto superior esquerdo da sua aba:

Figura 1.31 - Janelas comuns no Layout padrão

Cada uma dessas janelas faz algo único e tem um propósito dentro do Unity, veja a seguir uma descrição rápida de cada
uma delas:

Scene (cena): Permite visualizar, navegar e editar sua cena.


Hierarchy (hierarquia): Representação hierárquica de todos os objetos na cena, cada item na janela Scene possui
uma entrada na janela Hierarchy, ambas as janelas estão interligadas.
Game (jogo): Permite visualizar a lente de uma câmera, esta janela é utilizada para executar e testar seu jogo.
Asset Store (loja de assets): Loja oficial do Unity onde você pode obter diversos tipos de elementos prontos para
o seu jogo.

Asset
O termo Asset é bastante utilizado no desenvolvimento de jogos para se referir aos recursos, ou arquivos
utilizados no seu jogo, que podem ser modelos 3D, sons, texturas, imagens, etc.

Inspector (inspetor): Permite visualizar e editar todas as propriedades do objeto atualmente selecionado.
Project (projeto): Exibe sua biblioteca de assets que estão disponíveis para serem utilizados no seu projeto.
Quando você importar um Asset, por exemplo, uma textura ou modelo, eles serão exibidos nesta janela.
Console: Exibe mensagens úteis de informação, aviso e erro que são gerados pelo Unity ou pelo seu projeto.

Sobre a Janela Hierarchy

A primeira janela que vou mencionar é a Hierarchy (hierarquia), que se encontra no lado esquerdo da Interface onde
você pode encontrar um objeto chamado Main Camera e outo chamado Directional Light:

Figura 1.32 - A Janela Hierarchy

Esta janela exibe todos os objetos atualmente presentes na cena. Uma cena 3D padrão já inclui uma câmera principal
(Main Camera) e uma luz direcional (Directional Light).

Sobre a Janela Scene

No centro da interface você vai encontrar a janela Scene (cena), contendo a representação visual da cena do seu jogo:
Figura 1.33 - A Janela Scene

Esta janela exibe o conteúdo da cena que são todos os itens listados na janela Hierarchy, ou seja, cada item na janela
Hierarchy é, na verdade, um objeto na cena que você pode visualizar e modificar. No Unity, cenas são como níveis ou
fases do seu jogo onde você pode agrupar diferentes objetos e funcionalidades para uma área específica do seu jogo,
por exemplo, uma cena para o menu do jogo, uma cena para a fase do gelo, outra cena para a fase do fogo, para o chefe,
e assim por diante.

Sobre a Janela Game

Logo ao lado da aba Scene você vai encontrar a aba Game (jogo), clique sobre o título da aba para ativá-la:
Figura 1.34 - A Janela Game

Nesta janela você pode visualizar a cena da forma como seria dentro do jogo pela visão da lente de uma câmera, em
outras palavras, seria o que o jogador vai ver. Podemos usar esta janela também para executar e testar o jogo.

Como a cena padrão está vazia, você vai ver apenas uma Skybox que é uma representação do céu (área azulada da
Figura 1.34).

Sobre a Janela Asset Store

Logo ao lado da aba Game você vai encontrar a janela Asset Store (loja de assets):
Figura 1.35 - A Janela Asset Store

Nesta janela temos acesso a diversos conteúdos prontos que podemos adicionar no nosso projeto a qualquer momento.

Sobre a Janela Inspector

No lado direito da interface você vai encontrar a Janela Inspector (Inspetor), esta janela exibe informações e
propriedades do objeto atualmente selecionado:

Figura 1.36 - A Janela Inspector

Existem duas maneiras simples de selecionar um objeto:

Você pode usar a janela Hierarchy, simplesmente clique com o botão esquerdo do mouse sobre um item na lista,
o objeto selecionado é indicado pelo fundo azul:

Figura 1.37 - Objeto “Main Camera” selecionado na janela Hierarchy

Utilize a janela Scene, por exemplo, para selecionar a câmera principal, clique com botão esquerdo do mouse
sobre o ícone da câmera:

Figura 1.38 - Selecionando uma câmera na cena

O mesmo vale para selecionar a luz que possui um ícone semelhante com um sol. Repare que quando um objeto é
selecionado, a Janela Inspector é atualizada para exibir as propriedades específicas do objeto atualmente selecionado:
Figura 1.39 - A janela Inspector com o objeto “Main Camera” selecionado

Não se preocupe em entender o objeto da câmera ou da luz agora, estamos apenas fazendo uma passagem na interface.

Sobre a Janela Project

No canto inferior esquerdo da Interface você vai encontrar a janela Project, esta janela inclui todos os assets
disponíveis e que podem ser usados no seu projeto:
Figura 1.40 - A Janela Project

Sobre a Janela Console

Logo ao lado da aba Project você pode acessar a janela Console:

Figura 1.41 - A Janela Console

Esta janela exibe mensagens definidas pelo usuário ou pelo Unity, estas mensagens podem ser informações, avisos ou
erros relacionados ao seu projeto.

Sobre o Menu Principal

Além das janelas comuns e assim como em qualquer outro programa, o Unity também possui um menu principal que se
encontra no topo da janela:
Figura 1.42 - O menu principal do Unity

Este menu contém diversos comandos do Unity, muitos possuem atalhos do teclado e outros podem ser acessados por
outro local na interface.

Sobre a Barra de Ferramentas

No topo da Interface, logo abaixo do menu, você vai encontrar a barra de ferramentas principal que oferece acesso para
as ferramentas de trabalho essenciais:

Figura 1.43 - Barra de Ferramentas

Manipulação: Ferramentas básicas para manipular a cena e os objetos na cena.

Basicamente as ferramentas de manipulação permite transformar objetos na cena, por exemplo, a ferramenta de mover
(W) serve para alterar a posição do objeto.

Posição e orientação do pivot: O pivot é o ponto de manipulação dos objetos.

O ponto de manipulação determina como um objeto é movido ou rotacionado na cena.

Execução: Controles de execução do projeto que possui o botão Reproduzir (“Ctrl + P”), Pausar (“Ctrl + Shift
+ P”) e Pular (“Ctrl + Alt + P”), esses botões são semelhantes como em qualquer outro reprodutor de mídia.

Durante o aprendizado ou no desenvolvimento do seu jogo, você vai executar seu projeto muitas vezes para realizar
diferentes testes e ver como está ficando. Eventualmente você pode substituir os controles de reprodução da barra de
ferramentas pelos atalhos do teclado que são mais rápidos de acionar.

Nuvem e Conta: Serviços da nuvem e acesso à sua conta.


O botão Collaborate (colaboração) é um recurso que permite sincronizar seu projeto com uma equipe, o botão Unity
Cloud permite acessar os serviços da nuvem e o botão Account oferece acesso à sua conta do Unity.

Diversos: O botão Layers (ou camadas) permite definir quais camadas estão visíveis na cena, enquanto que o
botão Layout permite selecionar um layout de janelas pré-definido.

No Unity você pode adicionar diferentes objetos em uma camada específica e ao esconder aquela camada, todos os
objetos naquela camada vão sumir da cena:

Figura 1.44 - Menu Layers

Por exemplo, por padrão todos os objetos são adicionados na camada Default, ao clicar no ícone de olho logo ao lado
de Default, você vai esconder todos os objetos nessa camada, clique novamente no ícone para voltar a exibir os
objetos. Vale a pena mencionar que este recurso de esconder os objetos por camada não é a utilidade principal das
camadas, veremos mais sobre isso durante o decorrer do livro. No final da barra de ferramentas você vai encontrar o
botão Layout, neste menu você pode escolher alguns Layouts alternativos para as janelas do editor:

Figura 1.45 - Menu Layouts

Ao selecionar o Layout 2 by 3, o Unity vai reorganizar as janelas com uma janela Scene do lado esquerdo, logo abaixo
a janela Game e as três janelas principais que são Hierarchy, Project e Inspector são reposicionadas no lado direito.
Layout das Janelas

As janelas no Unity são bem flexíveis, ou seja, é possível mover, redimensionar, agrupar e adicionar novas janelas. Por
exemplo, para mover a janela Hierarchy, mantenha segurado o botão esquerdo do mouse sobre a aba da janela e então
arraste-a com o mouse, em seguida solte o botão do mouse quando achar a posição desejada:

Figura 1.46 - Movendo a janela Hierarchy em uma posição fixa

Repare que é possível separar a janela e movê-la para outra posição, dependendo de onde você mover a janela, o Unity
vai tentar agrupar ou fixar aquela janela em outro lugar que pode ser dentro de outra janela, lado a lado, etc. Se quiser
manter uma janela de forma livre, você precisa separá-la, por exemplo, clique e arraste a janela Game para uma área
que o Unity não tente agrupar de forma automática:
Figura 1.47 - Movendo a janela Game de forma livre

Agora você pode usar a barra no topo da janela para movê-la de forma livre como se fosse qualquer outra janela, os
controles minimizar, maximizar e fechar também está disponível.

Vídeo 1.1 - Movendo uma janela

Para fechar uma janela agrupada é bem simples, por exemplo, para fechar a janela Asset Store, clique com o botão
direito do mouse sobre a aba da janela e selecione a opção Close Tab (fechar aba).

Figura 1.48 - Fechando uma janela agrupada

Para redimensionar uma janela, basta mova o cursor do mouse em cima das bordas da janela até que o cursor se
transforme em uma seta dupla, agora clique e mantenha segurado o botão esquerdo do mouse e mova na direção que
deseja redimensionar:

Figura 1.49 - Redimensionando uma Janela

Vídeo 1.2 - Redimensionar uma Janela

Para adicionar uma nova janela, siga para o menu Window (janelas) e acesse alguma categoria de janelas. Por
exemplo, na categoria Animation (animação) abra a janela Animation:
Figura 1.50 - Abrindo a janela Animation

Por padrão a janela Animation vai ficar livre e sobreposta com as outras, mas você pode agrupá-la como se fosse
qualquer outra janela do Unity que foi visto antes. É possível também duplicar uma janela existente, por exemplo, é
comum duplicarmos a janela Scene para obter diferentes ângulos de visão ao mesmo tempo. Para duplicar uma janela,
clique com o botão direito do mouse sobre a aba de uma janela, aponte para Add Tab e selecione uma opção:

Figura 1.51 - Adicionando ou duplicando uma nova janela

Muitas das janelas possuem atalhos que podemos utilizar a qualquer momento, para descobrir os atalhos, siga para o
menu Window e veja o atalho associado para cada janela. Por exemplo, a janela Window > General > Scene possui o
atalho “Ctrl + 1”:
Figura 1.52 - Teclas de atalhos exibidos no menu principal

Repare que a janela Game possui o atalho “Ctrl + 2” e assim sucessivamente até o atalho “Ctrl + 5”, sabendo disso,
agora você pode alternar rapidamente entre as janelas comuns usando essas teclas de atalho.

Teclas de Atalho no Mac


No Mac em vez de “Ctrl” use a tecla “Cmd” seguido do atalho desejado. Para não ficar repetindo as duas
teclas durante o livro, estarei mencionando apenas a tecla “Ctrl”, usuários do Mac devem substituir pela tecla
“Cmd” equivalente.

Um atalho interessante é a opção de expandir uma janela. Por exemplo, para maximizar a janela Scene, primeiro você
precisa focar na janela que deseja expandir, faça isso movendo o cursor do mouse sobre qualquer lugar da janela que
vai receber o foco e então pressione “Shift + Espaço”:
Figura 1.53 – A janela Scene maximizada

Para restaurar a janela, pressione “Shift + Espaço” novamente.

Repare que a janela ativa ou a janela de contexto atual, é indicada pela pequena barra azul no topo da aba da janela:

Figura 1.54 - Barra azul indica a janela de contexto atual

Agora você já sabe que ao mover o cursor do mouse sobre alguma janela, essa janela vai ganhar foco e os comandos do
teclado serão enviados para a janela ativa. Por exemplo, se você quiser maximizar a janela Project, basta mover o
mouse sobre qualquer lugar desta janela e então pressione “Shift + Espaço”. Outra maneira de maximizar e restaurar
uma janela é clicando com o botão direito do mouse sobre a aba da Janela e selecione a opção Maximize:

Figura 1.55 - Menu Maximize

Para restaurar a janela, clique novamente com o botão direito do mouse sobre a aba da janela (que deve estar
expandida) e desmarque Maximize.

Alterando o Layout Padrão

Quando estou trabalhando com meus projetos, eu uso um layout diferente do padrão, que basicamente possui as
mesmas janelas comuns, mas em locais diferentes. A minha preferência pessoal pode não ser a melhor escolha para
você, o importante é que você saiba manipular as janelas como desejar.

Personalizando o Layout do Unity

1. Vamos alterar o layout com base no padrão, então siga para o canto superior direito da barra de ferramentas,
clique em Layout e selecione Default.

Ao alterar o layout, é possível que os itens na janela Hierarchy sejam encolhidos, clique na seta no topo para expandir
ou encolher todos os itens:

Figura 1.56 - Da esquerda para direita: Itens encolhidos e expandidos

2. Mova a janela Hierarchy para o lado da janela Inspector, mova de uma forma para que a janela fique fixada:

Figura 1.57 - Movendo e fixando a janela Hierarchy

3. Agora mova a janela Project para dentro da janela Hierarchy, ficando duas janelas divididas uma em baixo da
outra:
Figura 1.58 - Movendo a janela Project

Repare que a janela Project por padrão é dividida em duas colunas, a primeira coluna no lado esquerdo mostra os
favoritos e a árvore de diretórios, no lado direito é exibido o conteúdo do diretório atual. Então para esse layout, a
visualização do conteúdo da pasta ficou muito pequena, podemos resolver isso alterando a exibição para apenas uma
coluna.

4. Clique no pequeno ícone no canto superior direito da janela, e no menu que é exibido, selecione One Column
Layout (Layout de uma coluna):
Figura 1.59 - Layout de uma coluna para a janela Project

Ao escolher o layout de uma coluna para a janela Project, o conteúdo do projeto será exibido em formato de lista.
Veremos mais sobre a janela Project em uma seção própria, mas por enquanto não se preocupe com seu
funcionamento.

5. Deixe a janela Console no canto inferior esquerdo.

6. Em seguida redimensione as janelas para que ocupe apenas o espaço necessário.

É possível também dividir a janela Scene com a janela Game, podendo ficar uma em baixo da outra ou lado a lado.

7. Divida a janela Game e Scene como na Figura a seguir:


Figura 1.60 - A janela Scene e Game uma em baixo da outra

Dessa forma conforme você edita a cena, você já tem uma ideia de como está ficando na janela do jogo.

Vídeo 1.3 - Personalizando o Layout do Unity

Futuramente você pode adicionar outras janelas e alterar o Layout de uma maneira que facilite o trabalho de uma tarefa
específica.

Múltiplos Monitores
Se você estiver trabalhando com múltiplos monitores, é possível enviar uma janela para outra tela. Primeiro
separe a janela desejada, em seguida mova-a para outro monitor.

Salvando o Layout Atual

Após organizar as janelas, você precisa salvar o Layout atual, senão na próxima vez que o Unity for executado você vai
perder o Layout personalizado.

Salvando o Layout de Janelas Atual

1. No canto superior direito da barra de ferramentas, clique no menu Layout e selecione a opção Save Layout
(salvar layout).
Figura 1.61 - Salvar o layout atual

2. Na janela Save Window Layout, dê um nome para o novo Layout e clique em Save para confirmar.

Figura 1.62 - Salvando um Layout personalizado

Se você acessar o menu Layout novamente, seu Layout personalizado estará listado, agora você pode alternar para
outros layouts, inclusive o seu. Para atualizar um layout, siga as mesmas etapas anteriores e na hora de salvar, informe
o mesmo nome do layout que deseja atualizar. Caso não esteja satisfeito com o Layout atual, você pode alternar para o
Layout padrão chamado Default ou selecione a opção Reset Factory Settings (redefinir para as configurações de
fábrica).

Layout Padrão de Fábrica


Ao redefinir o Layout para o padrão de fábrica, os layouts salvos serão perdidos.

Clique em Continue para confirmar a redefinição:


Figura 1.63 - Redefinindo o Layout para o padrão de fábrica
Parte 2: Princípios Essenciais

Neste Capítulo você vai aprender:

Descobrir o essencial de cada uma das janelas comuns


Utilizar a Loja de Assets para baixar conteúdo extra para o seu projeto ou para estender as funcionalidades do
Unity
Gerenciar atalhos do teclado
Alterar as preferências básicas

Este capítulo é uma continuação direta do capítulo anterior, onde vou mostrar mais detalhes de cada uma das janelas
comuns. Tudo que você aprender neste capítulo é essencial para que você consiga trabalhar com o Unity de forma
geral.
A Janela Scene

Nesta seção vamos aprender como navegar, selecionar, manipular e modificar os objetos na janela Scene. A janela da
cena é uma forma interativa que usamos para visualizar o que estamos criando no mundo do nosso jogo. Uma cena é
comparável com um nível de jogo e todas as cenas compartilham os mesmos recursos, isso significa que uma vez que
os assets são importados para o projeto, os mesmos assets são compartilhados entre as cenas. Quando um projeto é
criado, o Unity cria uma cena padrão contendo uma câmera e uma luz direcional. Na janela Hierarchy, a câmera
principal é identificada pelo nome Main Camera, e na janela Scene ela possui um ícone de câmera:

Figura 2.1 – Câmera principal selecionada na Hierarchy e exibida na Scene

A cena inicial por padrão é salva na pasta Scenes com o nome “SampleScene” (cena de exemplo):

Figura 2.2 - Cena de exemplo salvo na pasta Scenes

Você pode identificar a cena atual usando a janela Hierarchy, repare que no topo da janela você vai encontrar um item
com o ícone do Unity e a legenda Sample Scene, que é o mesmo nome do arquivo da cena:

Figura 2.3 - Identificando a cena atual na janela Hierarchy

Salvando Uma Cena de Exemplo

Para este exemplo, vamos descartar a cena padrão removendo a pasta Scenes que foi criado pelo Unity, poderíamos
apenas renomear o diretório e o arquivo de cena atual, mas para efeito de exemplo, vamos remover tudo e recomeçar.

Removendo a Cena Padrão e Criando Uma Nova

1. Clique com o botão direito do mouse sobre a pasta Scenes na janela Project e selecione a opção Delete, na
janela de confirmação que é exibida, confirme selecionando Delete novamente:

Figura 2.4 - Removendo o diretório “Scenes


2. Pressione “Ctrl + N” para criar uma nova cena (ou siga para o menu File e selecione New Scene). Como a cena
padrão foi removida, o Unity avisa para salvar a cena atual antes de criar outra, selecione Don’t save para não salvar:

Figura 2.5 - Confirmação para não salvar a cena atual

Ao fazer isso, o Unity vai criar uma cena vazia novamente.

3. Para salvar a cena atual, pressione “Ctrl + S” ou siga para o menu File e selecione a opção Save.

Atalho para Salvar a Cena


Utilize o atalho “Ctrl + S” para salvar a cena rapidamente e com frequência, assim você pode evitar qualquer
perda do trabalho em uma ocasional queda de energia ou falha do sistema.

Como essa é a sua primeira vez salvando a cena, a janela de salvar cena será exibida já apontando para a pasta Assets.

4. Nomeie a cena para “Principal” e clique em Salvar:


Figura 2.6 - Janela de salvar uma nova cena

Repare que assim que a cena é salva, o nome da cena na janela Hierarchy é atualizada, veja também que um arquivo
de cena se encontra na janela Project:
Figura 2.7 - Nome da cena na Hierarchy e Asset da cena na janela Project

É recomendável armazenar os arquivos de cena dentro de uma pasta própria, exatamente como o Unity fez quando
criou o projeto para você, mas como a pasta foi removida no exemplo anterior, vamos criar outra pasta novamente:

Criando Uma Pasta Para os Arquivos de Cena

1. Siga para a janela Project e clique no botão Create (criar) que se encontra no canto superior esquerdo da janela:

Figura 2.8 - Botão Create da janela Project


2. Selecione a opção Folder (pasta, a primeira opção no menu).

Uma nova pasta será adicionada com o nome New Folder (nova pasta) pronta para ser renomeada.

3. Renomeie para “Cenas” e pressione “Enter” para confirmar:

Figura 2.9 - Criando e renomeando uma nova pasta

4. Para mover a cena Principal para a pasta “Cenas”, simplesmente clique e segure com o botão esquerdo do mouse
sobre o arquivo de cena e arraste-o para dentro da pasta “Cenas”:

Figura 2.10 - Movendo a cena Principal para dentro da pasta Cenas

Vídeo 2.1 - Movendo a cena principal para uma nova pasta

Adicionando Objetos na Cena

Com a cena atual devidamente salva, agora você pode adicionar novos objetos, vamos criar um Cubo 3D que vai servir
como exemplo de demonstração:

Adicionando Um Cubo 3D

1. Para criar um Cubo 3D, siga para o menu GameObject, aponte para 3D Object e selecione a opção Cube:
Figura 2.11 - Adicionando um Cubo 3D

Um cubo 3D já selecionado será adicionado na cena, você sabe que um objeto está selecionado por causa da coloração
laranja ao redor do objeto:

Figura 2.12 - Cubo 3D adicionado e selecionado na cena

Se por algum motivo o Cubo não estiver sendo exibido como na figura anterior e a cena estiver escura, você vai
precisar realizar uma alteração nas configurações de iluminação:
Figura 2.13 - Cubo 3D em uma cena escura

Se este for o seu caso, siga para o menu Window, aponte para Rendering e selecione Lighting Settings. A janela
Lighting será exibida, tenha certeza que esteja na aba Scene e na parte inferior da janela, marque a opção Auto
Generate:

Figura 2.14 - Opção Auto Generate


A opção Auto Generate basicamente realiza o cálculo da luz automaticamente.

Caso o cubo não esteja selecionado, siga para a janela Hierarchy e clique uma vez com o botão esquerdo do mouse
sobre o objeto Cube:

Figura 2.15 - Objeto Cube selecionado na janela Hierarchy

Com o cubo selecionado e com a janela Scene com foco, pressione a tecla “F”, isso fará com que a câmera se aproxime
do objeto:

Figura 2.16 - Cubo 3D com foco

Vídeo 2.2 - Focando no objeto selecionado

Foco do Objeto
Se você clicar duas vezes rapidamente no objeto na janela Hierarchy, o mesmo efeito de aproximar a câmera
sobre o objeto será acionado.

No exemplo da figura anterior, o manipulador de mover objetos está ativo, se este não for o seu caso, use a tecla de
atalho “W” ou clique no seguinte botão na barra de ferramentas para ativar a ferramenta de mover objetos:

Figura 2.17 - Ferramenta de mover objetos

As setas coloridas no centro do objeto é o Gizmo de mover que são representados pela cor vermelho, verde, azul e são
utilizados para transformar o objeto selecionado:

Figura 2.18 - Objeto selecionado e com o Gizmo do manipulador de mover

Gizmo e Transformação
Um Gizmo pode ser qualquer indicador visual na cena, no caso do exemplo anterior, o Gizmo de mover é o
manipulador de transformação que representa os eixos no sistema de coordenadas (vamos ver mais sobre o
assunto no próximo capítulo), onde o vermelho é o eixo X, verde o eixo Y e azul é o eixo Z. O termo
transformar pode se referir a mover, rotacionar e escalonar um objeto, podemos utilizar um Gizmo de
manipulação para realizar alguma transformação.

Para remover a seleção do objeto, clique uma vez com o botão esquerdo do mouse em qualquer lugar vazio da cena.
Ao fazer isso, o Gizmo desaparece e o objeto (neste caso o cubo) já não possui um contorno laranja, indicando que o
mesmo não está selecionado. Para selecionar o cubo novamente ou qualquer outro objeto, basta clicar uma vez com o
botão esquerdo do mouse sobre o objeto na janela Scene ou na Hierarchy.

Navegando na Cena

Antes de descobrir a transformar um objeto, você precisa aprender a navegar na cena. A maneira mais simples de se
navegar na cena é usando um teclado e mouse (ou touchpad se você estiver em um notebook). É comum usar um
mouse com três botões (esquerdo, direito e botão do meio), mas o Unity possui diferentes atalhos que nos permite
navegar na cena em diferentes situações, não importa se você estiver usando um PC, notebook ou um mouse com
apenas um botão (mais comum no Mac).

Zoom

Para fazer um zoom na cena (ampliar ou afastar a visão da cena), use a roda do mouse para frente para aproximar a
cena ou use a roda do mouse para trás para afastar a cena. Se você estiver usando um touchpad, use o movimento de
dois dedos como se estivesse percorrendo uma página na internet.

Zoom a Partir do Cursor


Por padrão, o zoom é aplicado no centro da cena, mas se você manter a tecla “Alt” pressionada enquanto realiza
o zoom, ele será aplicado a partir da posição atual do cursor.

Você também pode aplicar zoom na cena segurando a tecla “Alt”, o cursor deve se transformar em um ícone de olho,
agora clique e mantenha o botão direito do mouse pressionado, o cursor deve se transformar em um ícone de lupa.
Agora mova o mouse para cima e para baixo ou para esquerda e para direita para aplicar o zoom desejado:
Figura 2.19 – Cursor de lupa indica a ferramenta de zoom da cena

Veja na figura a seguir que ao usar a combinação “Alt + o botão direito do mouse”, o primeiro botão na barra de
ferramentas se torna um ícone de lupa, indicando a operação atual:

Figura 2.20 - Ferramenta de zoom ativada

Vídeo 2.3 – Fazendo zoom na visão da cena

Mover

Para mover a visão da cena, mantenha as teclas “Ctrl” e “Alt” pressionadas, dessa forma o cursor se transforma em
um ícone de mão. Agora clique e mantenha o botão esquerdo do mouse pressionado e mova o cursor para mover a
cena.

Alt + Botão da Roda do Mouse


Uma alternativa para mover a visão da cena é usando o atalho “Alt + botão do meio do mouse", em seguida
mova o cursor para mover a cena.
Figura 2.21 - Cursor de mão indica a ferramenta de mover a visão da cena

O Unity possui uma ferramenta própria para mover a cena, a combinação de teclas “Ctrl + Alt” ou “Alt + botão do
meio do mouse ” é simplesmente um atalho ou uma alternativa para ativar a ferramenta de mover a visão da cena.
Você pode acionar essa ferramenta usando a tecla de atalho “Q”, ou ative a ferramenta com o ícone de mão que se
encontra no lado esquerdo da barra de ferramentas:

Figura 2.22 - Ferramenta de Mover a visão da Cena

Dessa forma você pode mover a visão da cena usando apenas o botão esquerdo do mouse sem a necessidade das
teclas de atalho.

Vídeo 2.4 – Movendo a visão da cena

Rotacionar

Para visualizar ao redor, mantenha a tecla “Alt” pressionada, um cursor de olho deve aparecer. Agora clique e
mantenha o botão esquerdo do mouse pressionado e mova o cursor para rotacionar a visão da cena:
Figura 2.23 - Cursor de olho indica rotação da cena

Rotação ao Redor de Um Objeto


Geralmente o ponto de rotação é feito no centro da cena, se quiser rotacionar ao redor de um objeto, primeiro
selecione o mesmo, depois pressione “F” para focar no objeto selecionado, em seguida rotacione a cena
normalmente.

A ferramenta de rotação da cena também é indicada pelo ícone de olho no seguinte botão da barra de ferramentas:

Figura 2.24 - Ferramenta de rotação da Cena ativada

Vídeo 2.5 - Rotacionando a visão da cena

Navegação Livre

Você também pode navegar na cena de forma livre, como se estivesse controlando um personagem em primeira pessoa
ou literalmente “voar” ao redor da cena. Para ativar este modo, mantenha o botão direito do mouse pressionado, o
cursor deve se transformar em um ícone de olho, só que dessa vez com uma representação de algumas teclas também:
Figura 2.25 - Cursor de olho com teclas indica navegação livre

Em seguida mova o mouse para olhar ao redor, use a tecla “A” para andar para o lado esquerdo, “D” para o lado
direito, “W” para ir para frente na direção que estiver olhando e “S” para ir para trás. Para voar para baixo use a tecla
“Q” e para voar para cima use a tecla “E”. Agora você pode usar todas essas combinações para se deslocar livremente
na cena, se quiser acelerar a movimentação, mantenha a tecla “Shift” pressionada.

Vídeo 2.6 - Movimentação livre da cena

Referência das Teclas de Navegação

Confira na tabela a seguir as teclas de atalhos de navegação básica da cena, é importante que o leitor se acostume e
decore os atalhos antes de prosseguir com outras tarefas na janela da cena:

Tabela 2.1 - Atalhos de navegação da cena

Gizmo da Cena

O Gizmo da Cena exibe a orientação atual da visão da cena e nos permite alternar rapidamente para algum ângulo
comum e alterar o modo de projeção. O Gizmo da Cena se encontra no canto superior direito da janela Scene:
Figura 2.26 - Gizmo da Cena

O Gizmo da cena possui um cone em cada lado do pequeno cubo, os cones maiores e coloridos representam os eixos X,
Y e Z da cena, clique em qualquer um dos cones e a visão da cena será reposicionada naquele ângulo do Gizmo.

Exibindo a Visão do Topo Com o Gizmo da Cena

1. Clique sobre o cone verde que representa o eixo Y.

A visão da cena será posicionada para visualizar o topo da cena, repare na legenda “Top” logo abaixo do Gizmo da
cena:

Figura 2.27 - Visão do topo da Cena

Se quiser voltar para o ângulo comum, basta rotacionar a cena normalmente ou mantenha a tecla “Shift” pressionada e
clique uma vez no mini cubo do Gizmo.
Vídeo 2.7 - Exibindo a visão do topo usando o Gizmo da cena

Você também pode usar o mini cubo do Gizmo da cena para alternar entre as projeções Perspectiva e Isométrica. Por
padrão a projeção Perspectiva já se encontra ativa, você pode confirmar a projeção atual conferindo a pequena legenda
abaixo do Gizmo:

Figura 2.28 – Perspectiva (Persp)

Se quiser alternar para a projeção Isométrica, clique uma vez no mini cubo do Gizmo da cena ou clique na pequena
legenda. Para voltar ao modo de Perspectiva, clique novamente sobre o mini cubo ou sobre a legenda.

Algumas diferenças importantes entre os dois modos de visão:

Perspectiva: A característica mais importante neste modo é que os objetos tendem a ficar menores conforme
ficam distantes do observador, neste caso conforme ficam distantes da câmera, passando uma sensação de
profundidade e relevo.
Isométrica: Este é um método de visualizar os objetos 3D em duas dimensões, neste modo os objetos na cena não
possuem a sensação de profundidade.

Projeção da Visão da Cena


Alterar a projeção da visão da cena não afeta a câmera do jogo.

Repare que existe um pequeno ícone de cadeado no canto superior direito da janela, clique no cadeado para travar a
rotação da cena no ângulo atual:

Figura 2.29 - Clique no cadeado para travar a rotação da cena


Com o cadeado fechado você não vai conseguir rotacionar a cena, os comandos de rotação como “Alt + botão
esquerdo do mouse ” ou apenas o botão direito do mouse , vai mover a visão da cena em vez de rotacionar. Esta
opção pode ser útil em certos momentos no design do nível do jogo, onde o ângulo atual da cena é o ideal para
visualizar os objetos, facilitando o movimento da cena sem se preocupar com a rotação. Por exemplo, você pode
“fechar o cadeado” para evitar sair acidentalmente da visão do topo ou qualquer outro ângulo da cena.

Transformação Básica

Para começar a transformar um objeto, o primeiro passo é selecionar o objeto que deseja transformar, como já
mencionado antes, existe duas maneiras simples:

Clicar uma vez sobre o objeto na Scene.


Clicar uma vez no nome do objeto na janela Hierarchy.

Objetos selecionados são destacados na janela Scene por um contorno laranja, enquanto que na Hierarchy o item na
lista possui um fundo preenchido que pode ser azul se a janela estiver no contexto atual ou cinza se estiver fora de foco.
Com o objeto selecionado, agora você pode usar uma das ferramentas de transformação que se encontra na barra de
ferramentas, que pode ser a ferramenta de mover, rotacionar, escalonar e transformação retangular.

Movendo um Objeto na Cena


Para não sair fora do escopo dessa seção, dediquei uma seção própria para transformação de objetos, por
enquanto vou mostrar apenas como mover um objeto na cena.

A ferramenta de mover pode ser acionada usando a tecla de atalho “W” ou clique no seguinte ícone na barra de
ferramentas:

Figura 2.30 - Ferramenta de mover objetos

Neste modo, o Gizmo ao redor do objeto selecionado possui setas ou cones no final de cada eixo.

Movendo o Cubo 3D do Exemplo

1. Ative a ferramenta de mover usando o atalho “W” ou clique no botão na barra de ferramentas indicado na Figura
2.30.

2. Para mover o cubo 3D de exemplo no eixo X, clique e mantenha pressionado o botão esquerdo do mouse sobre
a seta vermelha e então arraste o cursor para mover o objeto.
Você vai notar que a cor do eixo passa a ficar amarelo indicando o eixo sendo modificado:

Figura 2.31 - Movendo um Cubo 3D no eixo X

3. Experimente e faça o mesmo para o eixo Y (seta verde) e para o eixo Z (seta azul).

Vídeo 2.8 - Movendo o cubo de exemplo

As demais ferramentas basicamente funcionam da mesma forma, porém, estaremos vendo mais detalhes sobre cada
uma delas em uma seção dedicada para o assunto.

Barra de Controle da Cena

A barra de controles na janela Scene possui diversas opções e controles para definir como a visão da cena é exibida:

Figura 2.32 - Barra de controles da janela Scene

Modo de Exibição

O modo de exibição permite escolher a maneira como os objetos são exibidos na cena. A opção padrão Shaded
(sombreado) é o modo mais utilizado onde você pode visualizar as superfícies dos objetos pela sua cor atual:

Figura 2.33 - Modo de Exibição Shaded


A opção Wireframe exibe apenas as arestas dos objetos, enquanto Shaded Wireframe é uma combinação dos dois
modos:

Figura 2.34 – Na sequência: Shaded, Wireframe e Shaded Wireframe

Visão 2D

O botão 2D alterna entre a visão 2D e 3D:

Figura 2.35 – Botão da visão 2D

Na visão 2D a orientação da câmera é travada nos eixos X e Y, com o eixo X apontando para a direita e o eixo Y
apontando para cima:

Figura 2.36 - Visão da cena no Modo 2D

A visão 2D geralmente é utilizada no desenvolvimento de jogos 2D e para criar interfaces do usuário, pode ser útil em
jogos 3D também, pois as vezes precisamos visualizar a cena de forma plana em um ângulo específico.
A Visão da Cena e a Câmera do Jogo
O botão 2D na janela Scene não altera a projeção da câmera do jogo (por padrão o objeto Main Camera). Isso
significa que a câmera principal do jogo e a visão da cena são duas visões distintas e independentes uma da
outra.

Luzes

O botão com ícone de lâmpada pode ser utilizado para ligar e desligar as luzes na cena, caso esteja desligado, uma luz
padrão será utilizada:

Figura 2.37 - Ligar e desligar a luz da cena

Sons

O botão com ícone de caixa de som pode ser utilizado para ligar e desligar os sons na cena:

Figura 2.38 - Ligar e desligar sons na janela da cena

Efeitos Visuais

O botão dos efeitos visuais é utilizado para alternar efeitos como Skybox, névoa, dentre outros. Clique uma vez no
botão para desativar ou ativar todos os efeitos de uma vez:

Figura 2.39 - Efeitos da Cena

Você pode clicar na pequena seta ao lado do botão para selecionar qual efeito deve estar ligado ou desligado, por
exemplo, apenas a Skybox (método utilizado para simular o fundo de um céu).

Visibilidade dos Objetos


O próximo botão exibe o número de objetos escondidos na cena, clique no botão para ativar ou desativar a visibilidade
dos objetos:

Figura 2.40 – Número de objetos escondidos na cena

Veremos mais detalhes na seção “Visibilidade dos Objetos”.

Ferramentas de Edição de Componentes

No lado direito da barra de controles você vai encontrar o botão que permite exibir as ferramentas personalizadas para
edição de componentes:

Figura 2.41 - Ferramentas de edição de componentes

Neste estágio do aprendizado, você pode ignorar este recurso.

Configurações da Visão da Câmera da Cena

No botão com um ícone de câmera você pode configurar a câmera da visão da cena:

Figura 2.42 - Configurações da câmera da visão da cena


Veja na tabela a seguir uma breve descrição de cada propriedade:

Tabela 2.2 - Propriedades da câmera da visão da cena


Você pode redefinir as configurações da câmera da cena clicando no ícone de engrenagem que se encontra no canto
superior direito da pequena janela, em seguida selecione Reset:

Figura 2.43 - Redefinindo as configurações da câmera da visão da cena

Lembre-se, as configurações da câmera da cena não afetam o jogo.

Gizmos

O botão Gizmos contém várias opções que determina como os objetos e ícones são exibidos. Os Gizmos podem ser
qualquer coisa relacionada ao editor do Unity, por exemplo, os ícones dos objetos, a exibição dos contornos da câmera,
etc.:

Figura 2.44 - Menu de Gizmos

Se você desativar o botão Gizmos, todos os Gizmos na cena serão escondidos, porém, com o botão ativado, se você
clicar na pequena seta ao lado você pode selecionar qual Gizmo deve ser exibido, por exemplo, para esconder o ícone
da câmera, procure pelo componente “Camera” e clique no pequeno ícone de câmera logo ao lado do nome:
Figura 2.45 - Escondendo o ícone da câmera cena

Barra de Busca

No final da barra de controles você vai encontrar a caixa de pesquisa, você pode usar essa caixa para buscar objetos por
nome ou tipo. Este recurso pode ser útil em uma cena complexa e com muitos objetos, por exemplo, digite “Cube” e
todos os objetos contendo este nome serão destacados na cena, enquanto que o restante fica com um efeito
esbranquiçado:

Figura 2.46 - Buscando objetos na cena

Para redefinir a pesquisa, basta remover ou alterar o texto da caixa de busca.


A Janela Hierarchy

Na janela Hierarchy (hierarquia) é listado todos os objetos que se encontram na cena, geralmente usaremos essa janela
para gerenciar rapidamente todos os objetos, como por exemplo, criar, selecionar, renomear e duplicar objetos e o mais
importante, alterar o parentesco entre os objetos. Por padrão a janela Hierarchy se encontra no lado esquerdo da
interface:

Figura 2.47 - A Janela Hierarchy

Podemos usar a janela Hierarchy para criar objetos:

Criando Um Objeto na Janela Hierarchy

1. Acesse o menu Create que se encontra no canto superior esquerdo da janela Hierarchy.

2. Para efeito de demonstração, crie um cubo 3D apontando para o menu 3D Object e selecione Cube:
Figura 2.48 - Criando um Cubo 3D usando a janela Hierarchy

Um cubo 3D será criado e listado na janela Hierarchy.

Se você já criou um cubo 3D antes, o Unity vai renomear o novo objeto inserindo um número no final do nome que é a
sequência em que um objeto é criado com o mesmo nome:

Figura 2.49 - Novo Cube (1)

Você vai ver na janela Scene que existe apenas um cubo, isso acontece quando um mesmo objeto é adicionado na
mesma posição do original. Use o Gizmo da ferramenta de mover (W) para mover o novo cubo para o lado no eixo X
ou no eixo Z:
Figura 2.50 - Movendo o cubo um pouco para o lado no eixo X

É possível criar uma cópia do cubo duplicando o objeto Cube:

Duplicando Um Objeto na Janela Hierarchy

1. Siga para a janela Hierarchy e clique com o botão direito do mouse no objeto Cube, em seguida selecione a
opção Duplicate:

Figura 2.51 - Duplicando objeto

Um novo cubo será criado com o nome Cube (2).

2. Mais uma vez utilize a ferramenta de mover (W) para mover o cubo um pouco para o lado, ficando 3 cubos na
cena:
Figura 2.52 - Três cubos lado a lado

A maneira mais rápida de duplicar um objeto é usando um atalho:

Duplicando Objeto Usando um Atalho

1. Selecione o objeto (ou objetos) que deseja duplicar, no nosso caso seria o objeto Cube.

2. Pressione “Ctrl + D”.

Um novo cubo será criado com o nome Cube (3).

3. Utilize novamente o Gizmo para mover o novo cubo para o lado, ficando quatro cubos na cena.

Você pode usar a janela Hierarchy para remover objetos:

Removendo Objetos na Hierarchy

1. Clique com o botão direito do mouse sobre o objeto Cube (3) na Hierarchy, em seguida selecione a opção
Delete:
Figura 2.53 - Removendo um objeto na janela Hierarchy

Removendo Objetos Rapidamente


A maneira mais rápida de remover um objeto é selecionando o objeto que deseja remover (na Hierarchy ou na
Scene) e pressione a tecla “Delete”.

Quando um objeto é removido da janela Hierarchy, ele é removido da Scene também, ou vice-versa, pois ambas as
janelas estão interligadas.

Desfazendo e Refazendo Alterações no Unity


É possível desfazer as alterações dentro do Unity utilizando o atalho “Ctrl + Z”, por exemplo, você pode
desfazer a remoção de um objeto. Caso queira refazer, utilize o atalho “Ctrl + Y”. Os comandos Desfazer e
Refazer também se encontram no menu principal Edit, use Undo para desfazer e Redo para refazer.

Repare que se você realizar qualquer modificação na cena, um asterisco será exibido no lado do nome da cena na janela
Hierarchy, indicando que a cena possui modificações não salvas:
Figura 2.54 - Indicador de cena com estado de não salvo

Lembre-se de sempre salvar a cena usando o atalho “Ctrl + S”.

Pesquisando Objetos

Podemos usar a janela Hierarchy para encontrar um objeto na lista. Talvez para uma cena simples como do nosso
exemplo, a pesquisa não faça muita diferença, mas quando você estiver trabalhando numa cena mais complexa, a
pesquisa vai ajudar bastante a achar aquele objeto perdido. O campo de pesquisa se encontra logo ao lado do botão
Create:

Figura 2.55 - Pesquisando objetos na janela Hierarchy

Por exemplo, se você quiser pesquisar e listar apenas os cubos, digite “cube” no campo de busca. Repare que na janela
Scene os cubos ficam em destaque, enquanto o restante da cena fica com um efeito esbranquiçado, justamente para
destacar apenas os itens do resultado da pesquisa (veja Figura 2.55 anterior).

Buscando por Tipo

É possível buscar objetos por tipo também, o tipo refere-se ao nome de algum componente adicionado em algum
objeto, veremos mais sobre componentes em breve, mas só para efeito de exemplo, vamos buscar objetos contendo o
tipo Camera.

Filtrando a Pesquisa Por Tipo


Você precisa especificar o filtro t: seguido do nome do tipo, onde t: significa “tipo”, por exemplo: t:Camera. Caso
queira buscar apenas por tipo sem especificar o filtro t:, clique na pequena seta no começo da barra de busca e
selecione a opção Type:

Figura 2.56 – Buscando objetos por tipo

Em seguida digite o tipo desejado, por exemplo: Camera, ao fazer isso, apenas o objeto Main Camera será listado na
hierarquia. Repare que existe a opção padrão All (tudo) que permite buscar por nome e por tipo usando o filtro t: e a
opção Name (nome) permite buscar apenas pelo nome do objeto na hierarquia. A opção All é personalizável, por
exemplo, você pode buscar por objetos do tipo Camera, mas que contenha um nome específico, por exemplo:
t:Camera Minha Câmera.

Barra de Busca da Janela Hierarchy e Scene


Ao digitar alguma coisa na busca da janela Hierarchy, a mesma busca é exibida no campo de busca da janela
Scene e vice-versa. Isso significa que ambos os campos de busca estão interligados e funcionam da mesma
maneira.

Remova o texto do campo de busca para voltar ao estado normal da cena e da lista da hierarquia ou digite um novo
texto para refazer uma nova pesquisa.
A Janela Inspector

Os jogos no Unity são feitos de vários e diferentes objetos, a janela Inspector exibe informações detalhadas do objeto
atualmente selecionado que nos permite modificar as funcionalidades do objeto na cena. Por padrão, a janela Inspector
se encontra no lado direito da interface:

Figura 2.57 - A Janela Inspector

Repare que na figura anterior, a janela Inspector está vazia, isso acontece quando não há nenhum objeto selecionado.
Para efeito de exemplo, selecione um dos cubos 3D que foi criado anteriormente. Agora se você olhar na janela
Inspector, diversas propriedades que define o cubo 3D serão exibidas, todas as propriedades são categorizadas por
Componentes que são os blocos que agrupa diversas propriedades:
Figura 2.58 - Componentes do Cubo 3D

Um Cubo 3D é criado com os seguintes componentes:

Transform: Define a posição, rotação e escala do objeto.


Cube (Mesh Filter): Define o formato do objeto 3D.
Mesh Renderer: Exibe o objeto 3D na cena.
Box Collider: Permite que o objeto interaja com outros objetos de maneira física (como em uma colisão).

Agora se você selecionar a câmera principal na janela Hierarchy (objeto Main Camera), repare que a janela
Inspector é atualizada para exibir as propriedades únicas do objeto Main Camera.
Semelhanças Entre Todos os Objetos

Cada objeto na cena seja do mesmo tipo ou não, possui suas próprias propriedades, isso significa que a janela
Inspector vai exibir propriedades diferentes dependendo do objeto atualmente selecionado. No entanto, vamos falar
sobre algumas semelhanças que todos os objetos possuem na janela Inspector.

Nome do Objeto

O nome do objeto se encontra no topo da janela, para renomear, digite o nome no campo de texto como indicado na
figura a seguir e pressione “Enter” para confirmar:

Figura 2.59 - Alterando nome do objeto na janela Inspector

Repare que o nome é atualizado na janela Hierarchy também.

Estado do Objeto

A caixa de seleção como indicado na figura a seguir pode ser utilizada para habilitar e desabilitar o objeto na cena:

Figura 2.60 - Caixa de seleção para habilitar e desabilitar o objeto

Clique uma vez para desmarcar e o objeto deve sumir da cena, na verdade, ele não foi deletado, ele está apenas
desabilitado. Na janela Hierarchy você pode identificar objetos desabilitados pelo nome com uma fonte mais clara:
Figura 2.61 – Objeto desativado possui uma fonte clara na Hierarchy

Clique novamente na caixa de seleção para habilitar e exibir o objeto novamente. Este recurso pode ser útil para
“remover” algum objeto da cena, mas que não seja deletado permanentemente.

Static

No lado direito do nome do objeto você vai encontrar uma caixa de seleção e o menu Static como indicado na figura a
seguir:

Figura 2.62 - Menu Static

Este é um recurso avançado que permite otimizar o jogo baseando-se o objeto é estático (que não se move), caso seja
estático, então o Unity pode utilizar diferentes sistemas para otimizar o desempenho do jogo. Como mencionado, este é
um recurso avançado e pode ser ignorado até realmente precisar.

Tags

As Tags são utilizadas para ajudar a identificar os objetos durante a execução do jogo, quando um objeto não possui
Tag, a opção Untagged ou “sem Tag” é selecionada por padrão.

Clique no menu Tag para exibir as Tags disponíveis:


Figura 2.63 - Menu de Tags

Repare que o Unity já cria algumas Tags que você pode usar no seu projeto, alguns objetos já possuem Tags definidas,
por exemplo, a câmera principal já possui a Tag “MainCamera” selecionada:

Figura 2.64 - Objeto Main Camera com a Tag MainCamera selecionada

O principal propósito das Tags é de simplificar a identificação dos objetos via código, por exemplo, podemos usar uma
Tag chamada “Jogador” para verificar se o jogador colidiu com algum inimigo ou coletou algum item no cenário.

Layers

O menu Layer (camadas) é utilizado para agrupar funcionalidades e identificar alguma interação durante a execução do
jogo. Este menu também possui algumas opções pré-definidas:
Figura 2.65 - Menu Layer

A diferença entre Tag e Layer é que em Tag usamos para identificar objetos no jogo, enquanto Layer usamos para
identificar coisas pela sua interatividade e como elas se interagem no jogo. Vimos em seção anterior que também
podemos usar Layer para esconder objetos na cena que estão em uma camada específica, basta acessar o menu Layers
no canto superior direito da barra de ferramentas e clicar sobre uma camada.

Componente Transform

O componente Transform (ou Transformação em português) se encontra no topo de todos os objetos, como no caso
do cubo, ou da câmera que também possui um componente Transform:

Figura 2.66 - Componente Transform

Todos os objetos, sem exceção, possuem um componente Transform que define sua localização na cena com base na
sua posição, rotação e escala. É possível adicionar, remover e desativar componentes dos objetos, porém, não é
possível remover o componente Transform que é mandatório para todos os objetos.
A Janela Project

Agora vamos falar um pouco sobre a janela Project que no Layout padrão se encontra no canto inferior esquerdo da
Interface:

Figura 2.67 - A Janela Project

A janela Project exibe todos os assets que foram importados e estão disponíveis para serem usados no projeto atual. Se
você acompanhou as seções anteriores, é provável que você tenha salvo uma cena, onde um arquivo de cena também é
um asset listado na janela Project. Basicamente se você já sabe como lidar com arquivos e diretórios no seu sistema
operacional, então você não vai ter problemas em trabalhar com a janela Project.

No lado esquerdo da janela Project você vai encontrar um painel lateral contendo três categorias principais:

Favorites (favoritos): Exibe os assets utilizados com mais frequência.


Assets: Este é o diretório principal contendo todas as subpastas e arquivos do seu projeto exibido em uma
estrutura de diretórios no formato de árvore hierárquica.
Packages (pacotes): Pacotes pré-instalados por padrão que aprimoram e estendem as funcionalidades do Unity.
Novos pacotes podem ser instalados e gerenciados usando o “Gerenciador de Pacotes”.

Você pode selecionar uma pasta clicando com o botão esquerdo do mouse , o conteúdo da pasta selecionada será
exibido no painel da direita. Para expandir ou encolher a exibição do conteúdo do diretório, clique no pequeno ícone de
seta logo ao lado do nome da pasta, você também pode segurar a tecla “Alt” para expandir ou encolher todas as pastas
de forma recursiva:
Figura 2.68 – Favoritos, Assets e Packages

Os ícones indicam o seu tipo (material, pasta, script, texturas, áudio, etc.) e podem ser redimensionados utilizando o
slider no canto inferior direito da janela:

Figura 2.69 - Controlando a exibição dos ícones

Quanto mais para direita, maior será os ícones (melhorando a pré-visualização), e quanto mais para a esquerda, menor
será os ícones, se o slider estiver posicionado exatamente no começo, a visualização será exibida em formato de lista.

No painel do lado direito você tem acesso aos arquivos e diretórios da pasta atualmente selecionada, no caso da Figura
2.68, o arquivo de cena chamado “Principal” se encontra na pasta “Cenas” que se encontra dentro do diretório raiz do
projeto (Assets). Todos os arquivos do projeto são relativos à pasta Assets, se você clicar com o botão direito do
mouse sobre o arquivo de cena “Principal” e selecionar a opção Copy Path (copiar caminho), o seguinte caminho será
adicionado na área de transferência:

Assets/Cenas/Principal.unity

Você também pode conferir o caminho do arquivo no canto superior esquerdo da janela do asset atualmente
selecionado:

Figura 2.70 - Caminho do arquivo relativo à pasta Assets

No topo do painel da direita, logo abaixo da barra de controles, você vai encontrar o painel de navegação que exibe o
diretório atualmente sendo exibido. Cada item na lista de navegação pode ser clicado para navegar na árvore de
diretórios:
Figura 2.71 - Barra de navegação da janela Project

Tudo que se encontra na janela Project são pastas e arquivos que realmente estão armazenados no seu computador,
você pode confirmar isso abrindo o diretório do seu projeto no gerenciador de arquivos do seu sistema:

Abrindo a Pasta do Projeto Fora do Unity

1. Na coluna à esquerda, clique com o botão direito do mouse na pasta Assets.

2. Selecione a opção Open in Explorer.

Abrindo a Pasta Do Projeto em Outros Sistemas


Se você estiver no Mac, a opção vai ser Reveal In Finder, ou se você estiver no Linux, a opção vai ser Open
Containing Folder. Como estou no Windows, a opção Open in Explorer é exibida.
Figura 2.72 – Abrindo a pasta do projeto no gerenciador de arquivos do sistema operacional

O diretório do projeto onde se encontra a pasta Assets será aberto, juntamente com outras pastas e arquivos do projeto:
Figura 2.73 - Diretório do projeto onde se encontra a pasta "Assets"

Os arquivos que serão utilizados pelo seu jogo devêm ser armazenados na pasta Assets, esta é a pasta que é gerenciada
pelo Unity na janela Project. Antes desta pasta, os demais diretórios e arquivos basicamente são utilizados para
configurar o projeto dentro do editor.

3. Entre na pasta Assets e você vai ver que ela contém a pasta “Cenas” que foi criada dentro do Unity
anteriormente.

Objetos que são criados na cena como por exemplo o Cubo 3D, não existe um arquivo salvo, o cubo 3D simplesmente
se encontra na cena. No entanto, todos os itens na janela Project é, na verdade, um arquivo salvo que pode ser texturas,
sprites, materiais, modelos 3D, arquivos de som, vídeos, etc.

Layout de Uma e Duas Colunas

A janela Project por padrão é dividida em duas colunas, no lado esquerdo fica a coluna da árvore de diretórios do
projeto e na coluna do lado direito é exibido o conteúdo do diretório atual.

Veja a seguir como alterar a exibição das colunas:

Janela do Projeto Exibido em Uma Coluna

1. No canto superior direito da janela Project, clique no pequeno botão com traços para exibir um menu suspenso:
Figura 2.74 - Menu da janela Project

2. Selecione One Column Layout (Layout de Uma Coluna).

O conteúdo do projeto será exibido em formato de lista, para acessar as pastas e subpastas você precisa clicar sobre a
pequena seta no lado do nome:

Figura 2.75 - Janela Project com exibição de uma coluna

O layout de uma coluna é útil quando a janela é arranjada com uma largura horizontal limitada, igual como foi feito na
seção “Alterando o Layout Padrão”.

Pesquisando Assets no Projeto

A barra de pesquisa da janela Project pode ser útil para encontrar um asset em um projeto com muitos arquivos. Já
sabemos que no nosso projeto existe um arquivo de cena chamado “Principal”, se você buscar por “principal”, o
resultado da busca vai exibir o arquivo de cena esperado:
Figura 2.76 – Pesquisando na janela Project

Para redefinir a pesquisa, simplesmente altere ou remova o que estiver inserido no campo de busca.

Filtrar por Tipo

Para filtrar a busca por tipo use o seguinte botão que se encontra no final da barra de controles da janela:

Figura 2.77 - Filtrar por Tipo na janela Project

Por exemplo, para buscar apenas por cenas, abra o menu Search by Type (buscar por tipo) e selecione a opção Scene:
Figura 2.78 - Filtrando a pesquisa para buscar apenas por cenas

Repare que você pode escolher diferentes tipos de assets, você também pode pressionar “Ctrl” para selecionar
múltiplas opções, assim que uma opção é selecionada, a pesquisa será recarregada para exibir a busca filtrada.

Filtrar por Rótulo

O botão nos permite filtrar assets por rótulo, dessa maneira podemos separar os assets por categoria. Os rótulos
disponíveis no menu são os nomes mais comuns.

Siga as etapas a seguir para criar e definir um rótulo:

Criando e Definindo Um Rótulo

Vamos utilizar um Sprite de formato quadrado como exemplo e imaginar que é uma casa ou alguma construção
parecida.

Sprites
Só para deixar claro, o termo “sprite” refere-se a um elemento gráfico, e todo sprite é, na verdade, uma imagem
que importamos para o projeto (ou pode ser criado dentro do Unity).

1. Para criar um Sprite quadrado na janela Project, siga para o menu Create, aponte para Sprites e selecione
Square.

2. Com o Sprite selecionado na janela Project, siga para a janela Inspector e no canto inferior você vai encontrar
mais informações sobre o asset, clique sobre o ícone azul indicado na figura a seguir para exibir o menu de rótulos:

Figura 2.79 - Ícone azul dos rótulos

Se você não estiver vendo o painel como exibido na figura anterior, é porque o mesmo está escondido, clique sobre a
barra escura para expandir ou encolher o painel:

Figura 2.80 - Painel das informações do asset está encolhido

Com o menu de rótulos aberto, agora você pode selecionar um ou mais rótulos para definir.

3. Para criar um rótulo, digite algum nome no campo de busca (por exemplo “Casa”) e pressione “Enter” para
confirmar:
Figura 2.81 - Criando um novo rótulo

Assim que definido, os rótulos devem aparecer no canto inferior esquerdo do painel:

Figura 2.82 - Rótulos definidos para o asset atual

4. Agora você pode filtrar a pesquisa por um rótulo específico, acesse o menu de rótulos na barra de controles da
janela Project e selecione uma opção, se o rótulo não estiver sendo exibido na lista, digite-o manualmente:
Figura 2.83 - Filtrando a pesquisa por rótulos

Para remover um rótulo de um asset, selecione o asset desejado, siga para a janela Inspector e no mesmo menu de
rótulos basta desmarcar uma opção.

Filtrar por Favorito

Na coluna à esquerda da janela Project utilize a seção Favorites para filtrar por assets utilizados com frequência, por
padrão o Unity criou três favoritos (buscar por todos os materiais, todos os modelos 3D e todos os Prefabs):

Figura 2.84 - Favoritos pré-definidos

Na barra de controles, o botão com ícone de estrela nos permite salvar a busca atual no painel de favoritos, siga as
etapas a seguir para criar um favorito de fonte de texto com o nome ”Negrito”:

Criando Um Favorito

1. No campo de busca da janela Project, digite “negrito”.

2. Abra o menu Search by Type e selecione Font.

Repare que no final da busca, o filtro t:Font (t de type ou tipo) é adicionado:

Figura 2.85 - Realizando nova pesquisa com filtro

3. Com a busca definida, clique no botão com o ícone de estrela.

4. Um novo item será adicionado no painel de favoritos, renomeie de “New Saved Search” para “Fontes Negrito”:
Figura 2.86 - Salvando um novo favorito

Agora toda vez que você selecionar o favorito “Fontes Negrito”, a janela Project vai exibir apenas assets do tipo
“Fonte” que contém no nome a palavra “negrito”. Para remover um favorito, clique com o botão direito do mouse
sobre o mesmo e selecione Delete.

Arquivos “.meta”

Arquivos “.meta” são usados internamente pelo Unity para descrever um diretório ou algum arquivo específico. Eles
são exibidos apenas fora do Unity, se você não estiver vendo os arquivos “.meta”, então pode ser que a configuração
padrão do editor esteja escondendo os arquivos.

Se este for o seu caso, volte para o Unity e faça o seguinte:

Exibindo os Arquivos “.meta”

1. Acesse o menu Edit e selecione a opção Project Settings (configurações do projeto). A janela Project Settings
será exibida, esta janela também pode ser movida, redimensionada e fixada em qualquer lugar na interface como
qualquer outra janela do Unity.

2. No painel à esquerda, selecione a categoria Editor.

3. Na seção Version Control, em Mode, certifique-se que a opção Visible Meta Files (arquivos meta visíveis)
esteja selecionado:
Figura 2.87 - Exibindo arquivos ".meta"

4. Para salvar as alterações do projeto, siga para o menu File e selecione a opção Save Project.

Agora se você voltar para a pasta no sistema, os arquivos “.meta” devem estar visíveis. Basicamente tudo que você
precisa fazer pode ser feito dentro da janela Project sem a necessidade de usar o gerenciador de arquivos do seu
sistema, porém, é recomendável sempre usar o Unity para gerenciar os assets do seu projeto. Qualquer coisa que for
realizada fora do Unity, como remover ou mover um arquivo, o Unity não vai saber ao certo o que foi feito. Por
exemplo, se você remover um arquivo fora do Unity, o arquivo “.meta” equivalente não será removido
automaticamente, podendo causar conflitos e erros no seu projeto.

Criando Assets Internos

Com o Unity é possível criar assets internos e importar assets externos. Assets internos são criados diretamente na
janela Project e assets externos são arquivos importados para o seu projeto.

Assets
Um asset é a representação de qualquer item que pode ser usado no jogo. Um asset pode vim de um arquivo
externo, como uma textura, modelo 3D ou qualquer outro arquivo suportado. É possível também criar assets
internos que pode ser pastas, sprites, mixers de áudio, controladores de animação, etc.

Você já viu antes como criar uma pasta, o processo basicamente é o mesmo para qualquer outro tipo de arquivo. Para
criar um asset interno você precisa acessar o menu de criação de assets. Uma maneira de acessar este menu é clicando
no botão Create que se encontra no canto superior esquerdo da janela Project:
Figura 2.88 - Botão "Create" da janela Project

Acessando o Menu Create


O menu Create também pode ser acessado com o botão direito do mouse sobre o diretório onde deseja criar
algo ou clique com o botão direito do mouse em uma área vazia do diretório atual.

Com o menu de criação de assets aberto, agora você pode selecionar qualquer um dos itens no menu e um arquivo será
criado no seu projeto. Por exemplo, para criar um sprite, aponte para Sprites e selecione uma das formas (Quadrado,
triângulo, etc.), para criar uma pasta selecione a opção Folder, ou para criar um arquivo de script, selecione a opção C#
Script, etc. Esses e outros assets veremos com mais detalhes durante o decorrer do livro, o importante agora é saber
que é possível criar assets internos acessando o menu de criação de assets.
A Janela Game

Com a janela do Jogo ou mais especificamente a janela Game, podemos ver uma representação de como seria o jogo
quando for executado pelo jogador. A janela Scene em conjunto com a janela Game provavelmente são as janelas mais
importantes e mais utilizadas durante o desenvolvimento, basicamente usamos a janela Scene para criar o cenário do
jogo e a janela Game para reproduzir o projeto e testar de diversas maneiras. Por padrão, a janela Game (“Ctrl + 2”) se
encontra no centro da interface, logo ao lado da janela Scene:

Figura 2.89 - A Janela Game

Para reproduzir o projeto é necessário que a cena tenha pelo menos uma câmera. Se você remover a única câmera da
cena, a janela Game fica escura exibindo uma mensagem informando que não há nenhuma câmera para renderizar
(exibir) sua cena:
Figura 2.90 - A cena não possui uma câmera para renderização

Controles de Reprodução do Jogo

Usaremos a janela Game para testar o jogo, porém, alternar para a janela Game só vai mostrar o que a câmera está
visualizando, ou seja, o projeto não está sendo executado. Para executar o jogo você precisa usar o botão Play
(reproduzir) que se encontra no centro da barra de ferramentas ou use o atalho “Ctrl + P”:

Figura 2.91 - Botão Reproduzir

Na figura a seguir você pode conferir a ação de cada botão:


Figura 2.92 - Botão Reproduzir, Pausar e Pular quadro

Quando o jogo está em execução, o Unity escurece um pouco o restante da interface e os controles de execução ficam
em destaque, indicando que estamos executando o projeto:

Figura 2.93 - Projeto em execução

Se você clicar novamente no botão Play ou pressionar a tecla “Ctrl + P”, a execução do projeto será encerrada.
Barra de Controle de Opções

A janela Game também possui uma barra de controles com algumas opções:

Figura 2.94 - Barra de controles da janela Game

Tela de Exibição

No primeiro menu no lado esquerdo da barra de controles, você pode selecionar a visão da câmera utilizada para
renderizar (exibir) seu jogo. Usamos essa opção quando temos mais de um monitor, por padrão “Display 1” já se
encontra selecionado:

Figura 2.95 - Seleção de tela

Múltiplos monitores é suportado apenas na plataforma PC (Windows, Mac e Linux).

Proporção da Tela

Logo ao lado de Display 1 você vai encontrar as proporções de tela. No modo Free Aspect que já se encontra
selecionado, a tela do jogo se expande conforme o tamanho atual da janela Game:
Figura 2.96 - Proporções de Tela

Você pode selecionar algumas opções pré-definidas (como 5:5, 16:9, etc.) ou clique no botão de sinal de mais (+)
para criar uma nova proporção de tela ou uma resolução fixa.

Escala da Tela

O slide Scale é utilizado para definir a escala da janela do jogo:

Figura 2.97 - Escala de zoom da janela do jogo

Deixe em 1x para manter a escala normal.

Maximizar ao Reproduzir

No lado direito da barra de controles você vai encontrar o botão Maximize on Play (maximizar ao reproduzir), ative
este botão para maximizar a janela Game ao reproduzir o projeto:

Figura 2.98 - Maximizar ao reproduzir o projeto

Ao encerrar a execução, a janela volta ao estado anterior.

Atalho do Teclado para Maximizar uma Janela


Só lembrando que se você quiser maximizar qualquer janela manualmente, use o atalho “Shift + Espaço” na
janela ativa (onde o cursor está posicionado).
Desligar os Sons Durante a Execução

Utilize o botão Mute Audio para desligar todos os sons durante a execução do jogo:

Figura 2.99 - Desligar o som durante a execução do jogo

Sincronização Vertical

O botão VSync quando habilitado permite ativar a sincronização vertical (ou Vertical Synchronization em inglês)
durante a execução do jogo, esta opção afeta apenas o editor do Unity:

Figura 2.100 - Sincronização vertical

O VSync é um recurso que limita a taxa de quadros conforme a frequência do seu monitor, evitando desperdício de
quadros que pode causar trêmulos na tela. Durante o desenvolvimento, este recurso também pode ser útil para
acompanhar a estabilidade e desempenho do seu jogo.

Estatísticas de Desempenho

Clique no botão Stats para exibir uma pequena janela sobreposta com diversas informações sobre os gráficos e áudio
sendo utilizados no jogo:

Figura 2.101 - Estatísticas do jogo


Você pode utilizar essas informações para monitorar o desempenho enquanto estiver no modo de execução do jogo.
Muitas dessas informações são avançadas e por enquanto podem ser ignoradas, a importância de apenas saber da
existência deste recurso é o suficiente para continuar com as próximas seções.

Gizmos

Por padrão os Gizmos não são exibidos na janela Game, mas você pode usar o botão Gizmos para alternar a
visibilidade dos Gizmos que pode ser qualquer coisa relacionada ao editor do Unity, por exemplo, os ícones dos
objetos, a exibição dos contornos da câmera, etc. Você pode clicar na pequena seta para selecionar apenas os tipos de
Gizmos que deseja exibir, esse menu basicamente funciona da mesma forma como na janela Scene:

Figura 2.102 - Menu dos Gizmos da janela Game

Modificação Durante a Execução

Outro recurso interessante no modo de execução do jogo é que se você realizar qualquer alteração na janela Scene ou
na janela Inspector, a execução do jogo será atualizada em tempo real conforme as modificações realizadas. Por
exemplo, execute o jogo e em seguida com a câmera selecionada (objeto Main Camera), no parâmetro Projection,
altere a projeção de Perspective para Orthographic e a propriedade Size altere para o valor 2:
Figura 2.103 - Alterando a câmera durante a execução do projeto

Veja como a janela Game é atualizada com as novas alterações. Talvez nesse exemplo não tenha muita utilidade, mas
digamos que você esteja trabalhando em uma cena mais complexa, então esse recurso de modificação em tempo real
vai servir de grande ajuda para testar diferentes partes do jogo.

As Alterações serão Descartadas ao Encerrar


Assim que você encerrar o projeto, as modificações realizadas serão descartadas. No caso do exemplo anterior,
a câmera deve voltar para a projeção e tamanho anteriores antes da execução do projeto. A modificação da cena
e das propriedades em tempo real de execução é útil apenas para realizar testes, se quiser que as modificações
sejam salvas, certifique-se que não esteja no modo de execução do jogo.

Você sabe que o projeto está em execução por causa da alteração da cor da interface, porém, a cor padrão é muito
discreta e parecida com a cor no modo normal, veremos como alterar esta cor na seção sobre as “Preferências do
Unity”.
Utilizando a Loja de Assets

Com o Unity podemos juntar diversos elementos que compõem todo jogo em um único lugar, esses elementos são
chamados de Assets e podem ser gráficos, modelos 3D, músicas, efeitos sonoros, scripts, entre outros. Uma forma
rápida e prática de encontrar muitos desses elementos é utilizando a Loja de Assets do Unity. Um dos maiores
benefícios de utilizar a Loja de Assets é a facilidade e rapidez para criar um protótipo ou mecânica de jogo para o seu
projeto. Assim você pode ter uma ideia de como deve ficar seu jogo antes de obter ou desenvolver a arte, ou qualquer
outro elemento final do seu jogo. Muitos assets da loja são gratuitos e pagos, então se você é um programador e está
trabalhando sozinho ou em uma pequena equipe de programadores, é muito mais barato usar a Loja de Assets do que
contratar um designer gráfico ou outro profissional para criar algo específico para o seu jogo.

Acessando a Loja de Assets

No Layout padrão, a janela Asset Store pode ser encontrada no centro da Interface, logo após a aba Game:

Figura 2.104 - A Janela Asset Store

Outra maneira de abrir a Loja de Assets é seguindo para o menu Window e selecione Asset Store ou use o atalho
“Ctrl + 9”. Dependendo da resolução da sua tela, pode ser que a janela esteja muito pequena, para melhorar a
experiência de busca, recomendo maximizar a janela, por exemplo, clique com o botão direito do mouse sobre a aba
Asset Store e selecione Maximize ou pressione “Shift + Espaço” enquanto o cursor estiver sobre a janela:

Figura 2.105 - Maximizando a janela Asset Store

Antes de qualquer coisa, você precisa verificar se está conectado com a sua conta do Unity. No final da barra de
controles da janela, você deve encontrar o nome do seu usuário:
Figura 2.106 - Nome da conta exibido na barra de controles

Se você não estiver vendo seu usuário, então quer dizer que você não está conectado, neste caso o botão de usuário
deve exibir apenas um ícone padrão, então clique nele para abrir a janela de entrada, em seguida use suas credenciais e
faça a conexão com sua conta normalmente.

Buscando Assets

Com a Loja de Assets aberta, agora você precisa se perguntar, o que deseja procurar? Gráficos 2D? Áudios? Scripts?

Buscando Assets por Nome

Se você já possui algo em mente, utilize o campo de texto “Type here to Search assets” (digite aqui para buscar
assets):

Figura 2.107 - Buscando assets na Loja de Assets

Buscando Assets por Categoria

Uma maneira de buscar por um determinado elemento é utilizando a lista de categorias All Assets que se encontra no
canto superior esquerdo:

Figura 2.108 - Menu “All Assets” (todos os assets)

Dentre as categorias disponíveis, selecione Textures & Materials:


Figura 2.109 - Selecionando uma categoria de assets

Nesta categoria você pode encontrar diversos gráficos 2D, que podem ser cenários, imagens de fundo, personagens,
texturas para modelos, etc.

Filtrando Assets por Preço

Talvez você tenha notado que muitos dos assets são pagos e com diferentes valores, mas é possível filtrar melhor a
busca usando as ferramentas de filtro que se encontra no topo do resultado da busca. Clique em Price (preço) e defina
em Price Range (alcance do preço) o preço mínimo e máximo. Para buscar por assets gratuitos, deixe ambos os preços
mínimo e máximo no começo, dessa forma filtraremos apenas assets sem preço. Clique no botão Apply para recarregar
a busca com o novo filtro:
Figura 2.110 - Filtrando assets por preço ou sem preço

Todos os preços na loja são em dólares, por exemplo, se você quiser buscar assets que estejam na faixa de até $20
dólares, basta arrastar o slider do preço máximo até a faixa 20:

Figura 2.111 - Faixa de preço até 20$ dólares

Filtrando Assets por Qualidade

Para descobrir se um asset é de boa qualidade, você também pode filtrar pelo sistema de resenhas da loja. Usando o
menu Rating (avaliações), selecione a opção de 5 estrelas para garantir que os assets que serão exibidos são de grande
qualidade, clique em Apply para confirmar:
Figura 2.112 - Filtrando por avaliações

A opção padrão All, exibe assets com qualquer estrela. Recomendo não desmerecer outros assets só porque tem 4 ou 3
estrelas, alguns desses assets pode ter sofrido por algum problema que já foi resolvido, mas as resenhas não estão
atualizadas.

Filtrando Assets por Data

O filtro Released é utilizado para especificar uma data limite em que o asset foi adicionado, a opção All exibe assets de
todo tempo, mas você pode filtrar por dia, semanas, meses e até um ano:
Figura 2.113 - Filtrando Assets por 6 meses

Esta opção é útil para filtrar assets antigos ou que não foram atualizados por muito tempo.

Buscando por Subcategoria

Cada categoria de assets também possui uma subcategoria que você pode navegar no painel no lado esquerdo da janela:
Figura 2.114 - Subcategorias de Assets

Se você não estiver vendo o painel lateral, pode ser que a largura da janela é muito curta, neste caso recomendo
maximizar a janela da Loja de Assets.

Baixando e Importando Assets

Assim que definir a busca desejada, agora você pode escolher algum asset da lista. Para baixar um asset e adicioná-lo
no seu projeto, selecione uma opção para abrir a página de informações do asset, em seguida clique no botão
Download:
Figura 2.115 - Botão "Download" para baixar um asset

Repare que o asset do exemplo da figura anterior é gratuito como indicado pelo texto FREE. Se o asset fosse pago, o
preço seria exibido e em vez do botão Download, o botão Buy (comprar) seria exibido no lugar, indicando para que
você efetue o pagamento antes de baixar o asset. Assim que terminar de baixar, o botão passa a ser exibido com o nome
Import (importar), clique neste botão e a janela de importar pacote será exibida, listando todos os elementos que se
encontram no pacote:
Figura 2.116 - Importando um asset

Por padrão todos os elementos já se encontram selecionados, mas você pode utilizar o botão None para desmarcar tudo
ou botão All para selecionar tudo. Clique no botão Import para importar os assets selecionados para o seu projeto.
Assim que finalizar, uma pasta contendo os arquivos dos assets será adicionado na janela Project, dependendo de como
o pacote foi estruturado, diversas pastas podem ter sido adicionadas.

Sobre os Assets da Loja


Por enquanto não se preocupe muito em como utilizar os elementos baixados pela loja, esta seção foi apenas
para mostrar o funcionamento da Loja de Assets. Mais para frente quando você estiver confortável com o
Unity, você já sabe onde procurar assets e como usá-los no seu projeto.

Buscando Assets da Loja na Janela Project

É possível pesquisar elementos da Loja de Assets usando a janela Project. Por exemplo, no campo de busca da janela
Project, digite “forest” e pressione “Enter” para confirmar:
Figura 2.117 - Buscar por "forest" resulta em uma pesquisa sem resultado

Como não existe nada relacionado a “forest” no projeto local, nada será exibido no resultado. Entretanto, na barra de
controles da busca, clique em “Asset Store”, dessa maneira a busca será feita na Loja de Assets em vez do projeto
local:

Figura 2.118 - Buscando por assets da Loja de Assets na janela Project

Os elementos serão exibidos na categoria Free Assets (assets gratuitos) e Paid Assets (assets pagos). Para exibir mais
itens, clique no botão More que se encontra no final da lista de cada resultado no canto inferior direito:

Figura 2.119 - Exibir mais (more) assets


Para importar um asset FREE, clique sobre ele e suas informações serão exibidas na janela Inspector, clique no botão
Import Package (importar pacote) para iniciar a transferência do pacote:

Figura 2.120 - Botão de importar pacote selecionado na janela Project

Assim que finalizar, a janela de importar os assets será exibida, clique no botão Import para importar tudo. Se você
quiser obter mais informações do asset selecionado, clique no botão Open Asset Store para abri-lo na Loja de Assets:

Figura 2.121 - Abrindo um asset na Loja de Assets

É mais simples usar a janela Asset Store, mas para fazer uma busca rápida, a janela Project pode ser mais prática.
Recomendo você ir navegando e filtrando na loja, assim você tem uma ideia do que é possível encontrar.
Gerenciador de Atalhos do Teclado

Podemos usar o Gerenciador de Atalhos do teclado para definir um atalho para qualquer tipo de comando do Unity.
Para abrir o Gerenciador de Atalhos, siga para o menu Edit (ou menu Unity no Mac) e selecione Shortcuts:

Figura 2.122 - Gerenciador de Atalhos (a janela Shortcuts)

Perfis de Atalhos

Antes de definir qualquer atalho, você precisa selecionar qual perfil os atalhos serão gravados. Por padrão, o Unity cria
uma cópia do perfil original onde você pode definir seus atalhos personalizados, dessa forma evita-se alterar o perfil
original. Para acessar e editar os perfis disponíveis, acesse o menu de perfis clicando no seguinte menu suspenso que se
encontra no canto superior esquerdo da janela:
Figura 2.123 - Menu de perfis de atalhos

O perfil padrão chamado “Default copy” já deve estar selecionado (assumindo que o Unity criou), na figura anterior
você pode ver que também existe o perfil “UserProfile” e “Default”.

O Perfil Padrão
O perfil padrão (“Default”) pode ser utilizado, mas não pode ser removido ou alterado, se você tentar alterá-lo,
o Unity vai criar uma cópia do perfil.

Criando um Perfil

Selecione a opção Create new profile para criar um perfil. A janela Create Profile é exibida, em Profile Name,
defina um nome para o perfil e clique em Create:

Figura 2.124 - Criando um novo perfil de atalhos

O novo perfil será criado baseado no padrão e definido como atual, dessa forma as alterações serão gravadas no perfil
atualmente selecionado.

Renomeando um Perfil
Para renomear o perfil atual, acesse o menu de perfis e selecione a opção Rename Profile, uma janela com mesmo
nome será exibida, renomeie o perfil usando o campo Profile Name e clique em Rename para confirmar:

Figura 2.125 - Renomeando um perfil de atalhos

Removendo um Perfil

Para remover o perfil atual, acesse o menu de perfis e selecione a opção Delete Profile, uma janela com mesmo nome
será exibida, clique no botão Delete Profile para confirmar a remoção do perfil:

Figura 2.126 - Removendo um perfil de atalhos

Após remover o perfil atual, o perfil Default será selecionado automaticamente.

Layout de Atalhos

Você deve ter notado na janela Shortcuts o layout de atalhos em destaque, que assemelha com um teclado virtual.
Você pode usar o layout de atalhos como referência para os atalhos que já foram definidos ou que estão disponíveis:
Figura 2.127 - Layout de atalhos

Cada cor de tecla representa um estado:

Branco: Teclas não definidas e disponíveis para serem atribuído.


Azul: Teclas que já foram atribuídas.
Rosa: Teclas globais que podem ser acionadas a qualquer momento em qualquer contexto no Unity.
Cinza: Teclas de modificação, utilizadas para criar combinações.
Cinza-claro: Teclas que não podem ser definidas.

Contexto Atual
O contexto atual geralmente é definido onde o cursor do mouse for passado ou clicado, por exemplo, com um
objeto selecionado, passe o cursor do mouse sobre a janela Hierarchy, em seguida pressione a tecla “F”, repare
que nada acontece, pois a tecla “F” não é global. Agora passe o mouse sobre a visão da cena na janela Scene e
pressione “F” novamente, o comando de focar no objeto será executado. Lembrando que a janela no contexto
atual possui uma linha azul logo acima da aba da janela.

Figura 2.128 - Janela Scene no contexto atual

Para descobrir qual comando foi atribuído para uma determinada tecla, passe o cursor do mouse sobre alguma tecla no
layout de atalhos, uma mensagem de dica de ferramenta será exibida mostrando o comando atribuído:
Figura 2.129 - Tecla "2" permite alternar entre o modo 2D da visão da cena

O layout de atalhos é interativo também, por exemplo, clique na tecla Control e Shift e veja que o teclado virtual é
atualizado, dessa forma você pode visualizar quais combinações foram definidas e quais estão disponíveis. Você
também pode usar seu teclado físico para testar as combinações (caso não reconheça as teclas, certifique-se de clicar
uma vez em qualquer lugar no teclado virtual para definir o contexto).

Pesquisando Comandos e Atalhos

Além de usar o layout de atalhos como referência, você também pode pesquisar por um comando ou atalho usando o
campo de busca indicado na figura a seguir:

Figura 2.130 - Campo de busca para pesquisar comandos e atalhos

Por exemplo, digite “cube” no campo de busca, o painel inferior (Command) será atualizado com uma lista de
comandos contendo o nome especificado:
Figura 2.131 - Pesquisando por um comando

Para selecionar um tipo de pesquisa diferente, clique no pequeno ícone de lupa:

Figura 2.132 - Tipos de pesquisa de atalhos

Repare que a opção Command já está selecionada, selecione a opção Shortcut para pesquisar por atalhos, por
exemplo, pressione “Ctrl + P” no campo de busca, o painel inferior será atualizado para exibir os comandos com a
tecla pesquisada:

Figura 2.133 - Pesquisar pelo atalho "Ctrl + P" exibe o comando de reproduzir o projeto

Você também pode usar o painel Category no lado esquerdo da janela para filtrar por categoria de atalhos, selecione
uma opção para exibir a lista de comandos nesta categoria. É possível também combinar a pesquisa com as categorias,
por exemplo, ao buscar pelo atalho “Espaço” (space) com a categoria Animation selecionada, a pesquisa vai resultar
em apenas comandos na categoria atualmente selecionada. Você pode alternar entre pesquisar na categoria atual ou em
todos os comandos (All Unity Commands) usando a barra de controles de pesquisa como indicado na figura a seguir:
Figura 2.134 - Pesquisando pelo atalho "Espaço" na categoria "Animation"

Definindo e Editando Atalhos

Agora que você já sabe encontrar comandos e atalhos, nesta seção vou mostrar como definir e editar um atalho para um
determinado comando. Por exemplo, atualmente a própria janela Shortcuts não possui um atalho, então vamos definir
um. Comece pesquisando pelo comando “shortcuts” na categoria All Unity Commands (todos os comandos do Unity).
O comando “Main Menu/Edit/Shortcuts” será listado, para definir um atalho, clique duas vezes sobre o item na lista,
um campo de texto será exibido na aba Shortcut, onde você pode especificar e gravar algum atalho.

Para este exemplo, use o atalho “Alt + S”:

Figura 2.135 - Definindo um atalho

Se o atalho já existir, uma janela de confirmação será exibida informando o atalho em conflito, perguntando se você
deseja reatribuir (Reassign), criar um conflito (Create conflict) ou cancelar (Cancel), selecione cancelar e atribua um
atalho diferente:

Figura 2.136 - Mensagem informando conflito de atalho

Para testar o atalho, feche a janela Shortcuts e em seguida pressione “Alt + S”, a janela deve ser aberta como esperado.
Atalhos Não São Intercaláveis Entre Perfis
Os atalhos definidos vão funcionar apenas no perfil atual, se você alternar de perfil, os atalhos podem mudar ou
não existir em outro perfil.

Para remover um atalho de algum comando, clique com o botão direito do mouse sobre o comando na lista, aponte
para o menu do atalho e selecione Remove shortcut:

Figura 2.137 - Removendo um atalho de um comando

Para restaurar um atalho padrão (assumindo que o comando possui atalho padrão), clique com o botão direito do
mouse sobre o comando na lista, aponte para o menu do atalho e selecione Reset to Default (restaurar para o padrão):

Figura 2.138 - Restaurando atalho do comando para o padrão


Preferências do Unity
Vamos agora ver algumas preferências do Unity que podemos realizar, estas preferências são relativas do editor e não
afeta a experiência do seu jogo. Para abrir as Preferências do Unity, siga para o menu Edit (ou o menu Unity no Mac)
e selecione a opção Preferences, a seguinte janela será exibida:

Figura 2.139 - Abrindo a janela de Preferências do Unity

Nesta seção não vou falar de todas as configurações possíveis, mas vale a pena mencionar as mais comuns.

Carregar o Último Projeto ao Iniciar

Na categoria General, a opção Load Previous Project on Startup (carregar projeto anterior ao iniciar), quando
desmarcada, ao executar o Unity, a janela do Unity Hub será aberta onde você pode carregar ou criar um projeto:
Figura 2.140 - Carregar projeto anterior ao iniciar o Unity

No entanto, se você ativar esta opção, ao executar o Unity, o último projeto que você estava trabalhando será
carregado, ignorando a janela do Unity Hub.

Ordenação Alfabética para a Hierarchy

Os objetos na janela Hierarchy são listados na ordem em que foram criados ou movidos de forma livre na lista.
Entretanto, você pode alterar a posição ou a ordem dos objetos na lista da forma como desejar. Na categoria General,
marque a opção Enable Alpha Numeric Sorting, (habilitar ordem alfanumérica) para permitir que a janela Hierarchy
possa ser exibida em ordem alfabética. Com esta opção ativada, siga para a janela Hierarchy, clique no botão no canto
superior direito e selecione Alphabetical Sorting:

Figura 2.141 - Alterando a ordem de exibição da janela Hierarchy

Com a opção Alphabetical Sorting ativada, se você tentar deslocar um item fora de ordem, não será possível.

No Topo da Hierarquia
Na ordenação alfabética, se quiser que um objeto fique sempre no topo da lista, basta renomear este objeto com
um sublinhado no começo do nome:

Figura 2.142 - _Main Camera no topo da hierarquia em ordem alfabética

Se quiser voltar para a ordenação padrão (recomendado), clique novamente no ícone de ordenação e selecione
Transform Sorting, neste modo a ordenação é livre e você pode mover (transformar os objetos na lista) na ordem
como quiser.
Editor de Código Padrão

Na categoria External Tools (ferramentas externas), a opção mais importante é a External Script Editor (editor de
script externo) que é aonde definimos o editor de script padrão utilizado para editar os códigos do seu jogo. O Unity já
vem com um editor padrão instalado chamado “Visual Studio Community” (assumindo que você selecionou a opção
durante a instalação do Unity), que já deve estar selecionado nessa lista:

Figura 2.143 - Editor de Script externo: Visual Studio 2017 (Community)

Verifique se a opção Visual Studio 2017 Community está selecionada. Escolha a opção “Browse” (procurar) para
selecionar outro editor, usuários no Linux devem utilizar esta opção para definir o Visual Studio Code, veremos mais
sobre isso em breve.

Cores da Interface

Na categoria Colors você pode alterar as cores da interface do Unity, uma cor que recomendo alterar é a Playmode tint
(Tinta no Modo de Execução) que se encontra na seção General:
Figura 2.144 - Cor da janela no modo de execução

Ainda com a janela de Preferências aberta, siga para a barra de ferramentas do Unity e clique no botão “Reproduzir”
para entrar no modo de execução do projeto:

Figura 2.145 - Executar o projeto

Veja que a interface escurece um pouco indicando que o projeto está em execução, mas pelo fato da cor padrão ser
discreta, às vezes nos confundimos e continuamos usando o Unity no modo de execução, e como as alterações são
descartadas ao encerrar o projeto, pode existir a possibilidade de perdermos muitas horas de trabalho. Para garantir que
você reconheça facilmente quando estiver no modo de execução, você pode alterar a cor padrão para uma cor com
melhor destaque:

Alterando a Cor da Interface no Modo de Execução

1. Na janela Preferences, acesse a categoria Colors.

2. Clique na caixa de cor ao lado do nome da propriedade Playmode Tint:

Figura 2.146 - Abrindo a janela de seleção de cor

A janela de seleção de cor será exibida, antes de realizar qualquer alteração, seria interessante guardar a cor atual como
backup. Na parte inferior da janela de seleção de cor você vai encontrar os Swatches (amostra de cores), clique no
pequeno quadrado (o último na lista) para salvar a cor atual:
Figura 2.147 - Salvando a cor atual na lista de amostra de cores

Feito isso, agora você pode alterar a cor, use o modo visual da janela de seleção de cor para selecionar uma cor, clique
e mantenha segurado o botão esquerdo do mouse na roda para definir a matriz ou no quadro do centro para definir a
saturação da cor.

3. Você também pode definir uma cor usando os controles RGB, por exemplo, para definir uma cor azul-claro,
altere o parâmetro R para o valor 110, G o valor 230 e B o valor 230:
Figura 2.148 - Alterando a cor da interface no modo de execução

Transparência
No parâmetro A (de “Alpha” ou transparência), você pode usar o valor 200 ou outro valor menor que 255 para
deixar a cor um pouco opaca.

Repare que é possível visualizar a alteração da cor em tempo real, pois ainda estamos no modo de execução.

Vídeo 2.9 - Alterando a cor da interface no modo de execução

A cor azul-claro foi apenas um exemplo, sugiro que você experimente diferentes cores e escolha uma que achar
interessante. Para redefinir todas as cores para o padrão de fábrica, clique no botão Use Defaults (usar padrões) que se
encontra na parte inferior da janela:
Figura 2.149 - Botão para redefinir as cores para o padrão de fábrica
Parte 3: GameObjects & Componentes

Neste Capítulo você vai aprender:

Sobre o sistema de coordenadas onde os objetos se encontram


Transformar objetos na cena utilizando diversas ferramentas
Aprender sobre GameObjects e Componentes
Definir parentesco entre objetos
Utilizar o recurso da visibilidade dos objetos
Identificar e configurar a câmera principal do jogo
Criar objetos prontos (Prefabs) para serem reutilizados

Os capítulos e seções anteriores serviram como base para você se familiarizar com o Unity, porém, o que torna um jogo
possível é a criação de diferentes tipos de objetos que compõem o jogo como todo. Neste capítulo você vai começar
aprendendo sobre o sistema de coordenadas utilizados por todos os objetos na cena. Em seguida você vai aprender a
transformar objetos facilmente no sistema de coordenadas que foi mencionado. A partir deste ponto estarei
apresentando diversas maneiras de criar e manipular diferentes tipos de objetos e componentes.
Sistema de Coordenadas

Antes de você aprender a trabalhar com qualquer tipo de objeto na cena, você precisa entender como funciona o
sistema de coordenadas. A cena do seu jogo se encontra em uma dimensão que pode ser 2D ou 3D, e todo objeto
nessa dimensão possui uma localização que é um ponto no sistema de coordenadas. As coordenadas de um objeto não
se resumem em apenas sua posição, mas também define sua rotação e escala dentro das dimensões do espaço em que
o objeto se encontra.

Dimensões 2D e 3D

No sistema de coordenadas 2D (ou duas dimensões) os objetos se encontram em um espaço plano representado apenas
na horizontal e na vertical (cima, baixo, esquerda e direita). Jogos clássicos como Tetris, Pong, PacMan ou o mais
recente CupHead (desenvolvido no Unity pela “Studio MDHR”) são exemplos de jogos de duas dimensões:

Figura 3.1 - Exemplo de jogo 2D: CupHead

A coordenada 3D (ou três dimensões) é como se fosse uma coordenada 2D, só que com uma dimensão a mais. Em 3D
você tem o espaço horizontal e vertical (cima, baixo, esquerda e direita), mas também possui profundidade que nos
permite criar a ilusão de como enxergamos o mundo ao nosso redor, onde objetos distantes ficam menores a partir do
ponto de vista do observador:
Figura 3.2 - Exemplo de jogo 3D

Aprender Sobre 2D e 3D
O Unity é um motor de jogo em 3D, isso significa que todos os jogos feitos nele utilizam as três dimensões.
Contudo, o Unity possui ferramentas próprias para desenvolver jogos 2D, mas mesmo assim o jogo se encontra
no espaço tridimensional. As diferenças estão nas técnicas implementadas e a dimensão extra no 3D não é
utilizado com frequência em jogos 2D (pelo menos não no contexto de profundidade, mas ainda sim está
presente e tem suas utilidades).

Sistema de Coordenadas Cartesiano

No Unity, os objetos em ambas as dimensões 2D e 3D se encontram no sistema de coordenadas cartesiano que define
um ponto em um plano por uma coordenada numérica. Este plano pode ser representado por um gráfico com linhas
perpendiculares que chamamos de eixos (X e Y em 2D e X, Y e Z em 3D). O ponto onde as coordenadas se encontram
começa a partir da origem (nas coordenadas X = 0, Y = 0 e Z = 0 se estiver na dimensão 3D).

Sistema de Coordenadas Cartesiano


Para saber mais sobre o assunto recomendo a seguinte
leitura:https://en.wikipedia.org/wiki/Cartesian_coordinate_systemhttps://es.wikipedia.org/wiki/Coordenadas_cartesianas

Coordenada 2D

Veja na figura a seguir o sistema de coordenadas cartesiano em um plano bidimensional (2D):


Figura 3.3 - Exemplo de um plano 2D no sistema de coordenadas cartesiano, fonte: Wikipédia

Cada coordenada numérica se encontra em uma linha representada pelos eixos X e Y, enquanto que o ponto de
origem (indicado pela cor roxa na Figura 3.3) se encontra nas coordenadas (X = 0, Y = 0). Baseando-se no exemplo da
Figura 3.3 e partindo do ponto de origem, valores positivos para X vai colocar o ponto cada vez mais para direita
(ponto verde na coordenada X = 2), enquanto valores positivos para Y vai colocar o ponto cada vez mais para cima
(ponto verde na coordenada Y = 3). Valores negativos para a coordenada X vai colocar o ponto cada vez mais para a
esquerda (ponto vermelho na coordenada X = -3.1 e ponto azul na coordenada X = -1.5). Valores negativos para a
coordenada Y vai colocar o ponto cada vez mais para baixo (ponto azul na coordenada Y = -2.5).

Cores dos Eixos no Editor


Não confunda as cores na Figura 3.3 com as cores dos eixos no Unity, os eixos no Unity são identificados com
as seguintes cores: X é vermelho, Y é verde e Z é azul.

Sintaxe Comum para as Coordenadas

Quando especificamos uma coordenada podemos dizer X = 2, Y = 3 ou coordenada X é igual a 2 e coordenada Y é


igual a 3. No entanto, repare que na Figura 3.3 as coordenadas X e Y são representadas dentro dos parênteses, onde
cada coordenada é separada por uma vírgula (X, Y, Z), dessa forma fica mais simples de escrever e ler as
coordenadas. Daqui para frente vou utilizar esta sintaxe, por exemplo, se um objeto está na coordenada X = 2 e Y = 3
vou apenas especificar (2, 3). Se este mesmo objeto possuir um eixo Z = 10, vou especificar (2, 3, 10).

Coordenada 3D

A coordenada 3D basicamente funciona da mesma forma como no 2D, só que com a adição do eixo Z que gera a
profundidade. Para efeito de explicação, siga os passos a seguir para criar uma cena de exemplo e demonstrar o plano
2D e 3D no Unity:

Preparando a Cena de Exemplo

1. Crie uma cena vazia pressionando “Ctrl + N” ou siga para o menu File e selecione New Scene.

2. Adicione um Cubo 3D seguindo para o menu principal GameObject ou o botão Create na janela Hierarchy,
aponte para 3D Object e selecione Cube.

3. Certifique-se que a posição do Cube esteja na origem da cena (0, 0, 0). Para redefinir a posição do objeto
selecionado, siga para a janela Inspector, clique com o botão direito do mouse sobre o título do componente
Transform e selecione a opção Reset:

Figura 3.4 - Redefinindo as coordenadas de um objeto

As coordenadas serão redefinidas com a posição na origem da cena (0, 0, 0), rotação (0, 0, 0) e escala normal
(1, 1, 1):

Figura 3.5 - Componente Transform com as coordenadas padrão

4. Alterne a visão da janela Scene para o modo 2D, basta ativar o botão 2D que se encontra na barra de controles da
janela:
Figura 3.6 - Ativando a visão 2D da cena

5. Se preferir, esconda os ícones da cena, assim fica mais fácil de visualizar o exemplo. Desative o botão Gizmos
que se encontra no final da barra de controles da janela Scene:

Figura 3.7 - Escondendo os ícones 3D da Cena

6. Ative a ferramenta de mover objetos usando a tecla de atalho “W”, assim podemos ver o Gizmo de setas que
representa os eixos das coordenadas.

Com o cubo na origem da cena, imagine a linha do eixo X e Y se encontrando com o ponto do Cubo 3D que por padrão
se encontra no centro do objeto (ponto roxo ilustrado na figura a seguir):
Figura 3.8 - Cubo 3D na visão 2D

Ponto do Objeto
O ponto do objeto utilizado para manipulá-lo na cena é chamado de Pivot, por padrão o pivot se encontra no
centro dos objetos.

Imagine as linhas dos eixos na visão 3D com a adição do eixo Z:


Figura 3.9 - Cubo 3D na visão 3D

Baseando-se na Figura 3.3, você pode posicionar o cubo nas coordenadas (2, 3), para realizar esta alteração siga para
a janela Inspector, no componente Transform, no parâmetro Position, altere os campos de texto X e Y conforme as
coordenadas (2, 3):

Figura 3.10 - Alterando as coordenadas da posição do cubo

Teremos o seguinte resultado na cena no modo 2D:


Figura 3.11 - Cubo 3D posicionado nas coordenadas (2, 3, 0)

O cubo foi posicionado 2 unidades no eixo X e 3 unidades no eixo Y (2, 3), neste caso 1 unidade no Unity
corresponde a 1 metro.
Transformando Objetos

Já vimos um pouco sobre como mover um objeto na cena, nesta seção vamos reforçar o entendimento em como
transformar qualquer objeto de forma geral (mover, rotacionar e escalonar). As ferramentas principais de
manipulação dos objetos se encontram no canto superior esquerdo da barra de ferramentas que são 5 botões, basta
clicar no botão para ativar a ferramenta desejada:

Figura 3.12 - Ferramentas de manipulação de objetos

Cada ferramenta possui seu próprio Gizmo de manipulação:

Figura 3.13 - Mover, rotação, escala e ferramenta retangular

E cada uma dessas ferramentas possui um atalho do teclado:

Tabela 3.1 - Teclas de atalho das ferramentas de manipulação de objetos


Repare que a ferramenta de Múltiplas Transformação (Y), exibe o Gizmo para mover, escalonar e rotacionar tudo ao
mesmo tempo.

Teclas de Atalho na Sequência


As teclas “Q, W, E, R, T e Y” no teclado estão posicionados na mesma linha, e as ferramentas na barra de
ferramentas se encontram na mesma sequência, isso facilita bastante memorizar e alternar entre os tipos de
ferramentas.

Mover

Ative a ferramenta de mover usando a tecla de atalho “W” ou ativando o seguinte botão na barra de ferramentas:

Figura 3.14 - Ferramenta de Mover na barra de ferramentas

Para mover o objeto simplesmente clique e segure com o botão esquerdo do mouse em algum eixo e então mova o
mouse para mover o objeto. O eixo sendo transformado fica amarelo indicando o eixo atual:

Figura 3.15 - Movendo um objeto no eixo Z

Repare que no centro do Gizmo existe três quadrados pequenos que você pode usar para mover o objeto em um único
plano. Ou seja, você pode mover em dois eixos ao mesmo tempo, enquanto o terceiro continua imóvel:
Figura 3.16 - Plano do Gizmo de mover

Esta opção pode ser muito útil quando queremos mover um objeto de forma livre em um plano sem afetar um eixo. Por
exemplo, se você clicar e arrastar o quadrado verde, o objeto pode ser movido no eixo X e Z enquanto o Y fica imóvel:

Figura 3.17 - Movendo em ambos os eixos X e Z

Agora se você segurar a tecla “Shift”, um pequeno quadrado plano será exibido no centro do Gizmo. Clique dentro do
quadrado e arraste o mouse para mover o objeto na direção relativa com a visão da cena, a visão inteira da janela
Scene:
Figura 3.18 - Gizmo ao segurar a tecla Shift

Vídeo 3.1 - Movendo um objeto

Rotação

A ferramenta de Rotação pode ser acionada usando a tecla de atalho “E” ou ativando o seguinte botão na barra de
ferramentas:

Figura 3.19 - Ferramenta de Rotação na barra de ferramentas

O Gizmo de rotação possui arcos ao redor do objeto que você pode usar para rotacionar. Basicamente o funcionamento
é o mesmo que na ferramenta de mover, por exemplo, para rotacionar o cubo no eixo Y, clique e mantenha pressionado
o botão esquerdo do mouse no arco verde e mova o mouse para rotacionar o objeto:
Figura 3.20 - Rotacionando um Cubo 3D no eixo Y

Repare que um arco amarelo é exibido, indicando o ângulo total.

Para rotacionar o objeto de forma livre, clique e mantenha o botão esquerdo do mouse pressionado em uma área vazia
dentro do Gizmo e mova o cursor para começar a rotacionar:

Figura 3.21 - Rotacionando um objeto de forma livre em todos os eixos

Você também pode usar as arestas ao redor do Gizmo para rotacionar o objeto no eixo Z da cena, ou seja, na visão atual
em que a cena está visualizando:
Figura 3.22 - Rotacionando um objeto conforme o eixo Z da cena

Para descobrir a direção do eixo Z da cena, use o Gizmo da Cena como referência que se encontra no canto superior
direito da janela Scene:

Figura 3.23 - Gizmo da Cena

Vídeo 3.2 - Rotacionando um objeto

Escala

A ferramenta de Escala pode ser acionada usando a tecla de atalho “R” ou ativando o seguinte botão na barra de
ferramentas:

Figura 3.24 - Ferramenta de escala na barra de ferramentas

Neste modo o Gizmo possui um pequeno cubo em cada ponta que determina a direção da escala, por exemplo, se você
quiser aumentar a altura do cubo no eixo Y, clique e mantenha pressionado o botão esquerdo do mouse no Gizmo
verde que representa o eixo Y e então mova o mouse para transformar a escala:
Figura 3.25 - Escalonando um objeto no eixo Y

Se você usar o pequeno cubo no centro, o objeto será escalonado em todos os eixos, enquanto mantém sua proporção:
Figura 3.26 - Escalonando o objeto a partir do centro

Vídeo 3.3 - Escalonando um objeto

Transformação Retangular

A ferramenta de Transformação Retangular pode ser acionada usando a tecla de atalho “T” ou ativando o seguinte
botão na barra de ferramentas:

Figura 3.27 - Ferramenta de Transformação Retangular na barra de ferramentas

Repare que nesse modo o Gizmo possui uma forma retangular no centro do objeto e pontos azuis ao redor. A
ferramenta de transformação retangular combina mover, rotacionar e escalonar em um único Gizmo. Este modo
geralmente é utilizado quando formos trabalhar com elementos 2D como Sprites e Interface do usuário, mas pode ser
bastante útil no modo 3D também. Para mover o objeto de forma livre, clique e arraste dentro de uma área vazia da
representação retangular:
Figura 3.28 - Movendo um objeto de forma livre usando a ferramenta retangular

Para mover em um eixo especifico, comece movendo exatamente como descrito anteriormente e em seguida mantenha
a tecla “Shift” pressionada, isso vai limitar a transformação na direção em que você estava movendo inicialmente.

Posição do Gizmo na Visão da Cena


Repare que se você rotacionar a cena, o Gizmo é reposicionado para satisfazer a transformação conforme a
visão atual da cena.

Para escalonar, mova o mouse sobre uma aresta até que o cursor se transforme em uma seta dupla, agora clique e
arraste o cursor para começar a transformação:
Figura 3.29 - Escalonando um objeto usando a ferramenta retangular

Podemos escalonar usando dois eixos ao mesmo tempo também, mova o cursor do mouse sobre um dos 4 pontos nos
cantos do Gizmo até que o cursor se transforme em uma seta apontando para uma direção. Em seguida clique e arraste
o cursor para começar a escalonar:
Figura 3.30 – Escalonando em dois eixos com a ferramenta retangular

Para rotacionar o objeto, mova o cursor do mouse para um pouco além de um dos pontos azuis até que o cursor se
transforme em duas setas circulares, em seguida clique e arraste o cursor para começar a rotacionar:

Figura 3.31 – Rotacionando um objeto usando a ferramenta retangular


Vídeo 3.4 - Transformação retangular

Múltiplas Transformações

A versão mais recente do Unity adicionou uma nova ferramenta de manipulação que pode ser acionada com a tecla de
atalho “Y” ou ativando o seguinte botão na barra de ferramentas:

Figura 3.32 - Ferramenta de múltiplas transformações

Essa ferramenta é uma combinação do Gizmo de mover, rotacionar e escalonar, tudo em um só, o funcionamento é o
mesmo como nas ferramentas individuais:

Figura 3.33 - Gizmos da ferramenta de múltipla transformação

A diferença desta ferramenta com a ferramenta retangular que também combina as três ferramentas, é que na retangular
o Gizmo é mais discreto e indicado para trabalhar com elementos 2D.

Transformação em Incremento

É possível transformar os objetos na cena em unidades de incremento, ou seja, podemos transformar com mais precisão
em uma unidade específica com base na grade 3D. Para utilizar este recurso simplesmente mantenha a tecla “Ctrl”
pressionada enquanto realiza a transformação desejada.

Movendo Em Incremento
1. Selecione um Cubo 3D que foi criado nas seções anteriores.

2. Ative a ferramenta de Mover usando o atalho “W”.

3. Mantenha a tecla “Ctrl” pressionada e em seguida use o manipulador vermelho para mover no eixo X.

Repare como o objeto é movido 1 unidade por vez.

Por padrão a transformação da posição é realizada em 1 unidade, a escala em 0.1 unidade e a rotação em 15 degraus.
Para alterar os valores padrões, siga para o menu Edit e selecione Snap Settings, a seguinte janela será exibida:

Figura 3.34 - Configurações de Incremento de transformação

As configurações padrão são mais comuns, mas você pode alterar os valores conforme a situação atual do seu projeto.
Utilize os botões Snap All Axes, X, Y e Z para deslocar os objetos selecionados automaticamente conforme os valores
que foram definidos, muito útil para determinar o ponto inicial.

Transformando com o Componente Transform

Vale a pena notar que é possível transformar um objeto usando o componente Transform que se encontra na janela
Inspector do objeto atualmente selecionado. Conforme o objeto é transformado na cena, os valores no componente
Transform são atualizados de acordo com a transformação atual. Se você quiser inserir os valores manualmente, use a
propriedade Position (posição), Rotation (rotação) e Scale (escala) para definir um valor com mais precisão nas
coordenadas x, y e z:
Figura 3.35 - Alterando a posição Y de um objeto no componente Transform

Ao trabalhar com números, a janela Inspector possui um recurso interessante, se você passar o mouse sobre o nome de
alguma propriedade numérica, por exemplo, a propriedade x da posição, repare que o cursor se transforma em uma seta
dupla apontando para a esquerda e direita:

Figura 3.36 - Posicionando o cursor sobre uma propriedade numérica

Quando isso acontecer, clique com o botão esquerdo do mouse e arraste o mouse para esquerda para diminuir o valor
ou para direita para aumentar o valor. O mesmo vale para outras propriedades numéricas, independentemente do tipo
do componente. Outro ponto interessante do componente Transform é a possibilidade de redefinir ou reiniciar a
transformação do objeto para os valores padrões. Para fazer isso, basta clicar no pequeno ícone de engrenagem que se
encontra no final do título do nome do componente, ou clique com o botão direito do mouse sobre o título do
componente e selecione Reset:
Figura 3.37 - Redefinindo os valores do componente Transform

Redefinir Componente
A opção de redefinir um componente não é exclusiva do componente Transform, o mesmo vale para os demais
componentes.

Posição e Direção do Gizmo de Manipulação

Na barra de ferramentas, logo após as ferramentas comuns de transformação você vai encontrar dois botões chamados
Center e Global que pode ser usado para definir respectivamente a localização e a direção do Gizmo de manipulação:

Figura 3.38 - Botão "Center" e "Global"

Esses dois botões e seus modos podem ser útil em diferentes situações, seja para criar o design do cenário ou para
mover algum objeto seguindo um padrão específico.

Posição do Manipulador

Da esquerda para direita, o primeiro botão é utilizado para posicionar o Gizmo de manipulação que por padrão se
encontra no centro dos objetos selecionados:

Figura 3.39 - Gizmo da ferramenta de mover posicionado no centro

Ao clicar no botão Center (assumindo que realmente esteja neste estado) você vai alternar para o modo Pivot,
lembrando que o pivot é a posição que o Gizmo considera para realizar a transformação do objeto, por padrão o pivot
se encontra no centro do objeto. Repare que alternar para Center e Pivot não altera a posição do Gizmo de
manipulação, como mencionado antes, a posição padrão do pivot do objeto se encontra no centro e o modo Center e
Pivot dependendo da situação pode ter o mesmo efeito.

No entanto, as coisas podem mudar se mais de um objeto estiver selecionado, para efeito de demonstração, ative a
ferramenta de mover (W) e usando dois cubos 3D como exemplo, selecione ambos os cubos usando a tecla “Ctrl”.
Repare que agora no modo Center, o Gizmo do manipulador de mover é posicionado no centro entre os dois objetos
selecionados:

Figura 3.40 - Posição do Gizmo de mover com dois objetos selecionados

Já no modo Pivot o Gizmo é posicionado no ponto de manipulação individual dos objetos selecionados, neste caso o
Gizmo é posicionado no centro do último objeto selecionado:
Figura 3.41 - Modo Pivot com dois objetos selecionados

Agora ative a ferramenta de Rotação (E) e use o modo Pivot, em seguida rotacione os cubos, veja que ambos os cubos
são rotacionados igualmente e de forma individual. Em seguida alterne para o modo Center e use o Gizmo de rotação
novamente, repare que dessa vez os objetos são rotacionados relativos ao centro entre os dois objetos:

Figura 3.42 - Posição do Gizmo no modo "Center" é relativo ao centro dos objetos selecionados

Vídeo 3.5 - Posição do manipulador

Direção do Manipulador

O próximo botão define a rotação ou a direção do Gizmo ao redor do objeto, que atualmente se encontra na rotação
Global. Por exemplo, selecione a ferramenta de mover (W) e tente visualizar a direção do Gizmo no objeto em relação
ao Gizmo da Cena que se encontra no canto superior direito da janela Scene:
Figura 3.43 - Direção do Gizmo do objeto e do Gizmo da Cena

Repare que ambos os Gizmos estão alinhados na mesma direção, quando a rotação do Gizmo é Global ele é relativo ao
espaço da cena do jogo. Agora se você clicar no botão Global, a rotação do Gizmo será alterada para Local, neste
modo o Gizmo é rotacionado na direção em que o objeto está olhando, veja que assim que é alterado para Local, a
direção do Gizmo permanece do mesmo jeito, isso acontece porque ainda não rotacionamos o cubo de exemplo para
perceber a diferença:

Figura 3.44 - Rotação do Gizmo em Local

Agora use a ferramenta de rotacionar (E) para rotacionar o cubo no eixo Y (arco verde). Em seguida ative a ferramenta
de mover e veja que os manipuladores do Gizmo estão apontando na direção das faces do cubo, ou seja, na direção em
que o objeto está olhando:
Figura 3.45 - Rotação do Gizmo no modo Local é relativo à face do objeto

Repare que na figura anterior, a direção do Gizmo do objeto selecionado é diferente do Gizmo da Cena. Se você
alternar para a direção Global, o Gizmo é rotacionado para refletir com a rotação do espaço global da cena, já na
direção Local o Gizmo é rotacionado para refletir com a rotação do próprio objeto:

Figura 3.46 - Da esquerda para direita: Local e Global

Vídeo 3.6 - Direção do manipulador


GameObjects e Componentes

Em seções anteriores já mencionei sobre GameObjects e Componentes, não há nada mágico sobre eles, basicamente
um GameObject (ou Objeto do Jogo) é tudo aquilo que faz parte da cena do jogo e podem ser representados por
personagens ou qualquer item no cenário. Enquanto Componentes são o que define a funcionalidade de cada
GameObject. Tudo que estiver listado na janela Hierarchy é considerado um GameObject, na cena de exemplo padrão
que criamos antes, a câmera (Main Camera), luz (Directional Light) e cubos (Cube, Cube (1), etc.) são todos
considerados GameObject.

Você pode criar ou adicionar objetos de duas maneiras:

Seguindo para o menu GameObject:

Figura 3.47 - Menu GameObject

Botão Create que se encontra na janela Hierarchy:

Figura 3.48 - Menu de criar objetos na janela Hierarchy

Outro grande potencial dos GameObjects são os Componentes que determina sua funcionalidade. Você pode modificar
e adicionar componentes para um objeto usando a janela Inspector, por exemplo, no caso do Cubo 3D, cada bloco em
negrito e destacado em vermelho na figura a seguir é um componente que agrupa diversas propriedades:
Figura 3.49 - Componentes padrão de um Cubo 3D

Já vimos também que todo objeto possui um componente Transform que define sua posição, rotação e escala do
objeto no mundo do jogo. Até mesmo um objeto vazio possui um componente Transform, para criar um objeto vazio,
pressione “Ctrl + Shift + N” ou siga para o menu GameObject, ou clique no botão Create na janela Hierarchy e
selecione Create Empty. Repare que na janela Inspector do novo objeto vazio, você vai encontrar o componente
Transform que não pode ser removido, pois todo objeto precisa de uma posição e orientação dentro da cena que é
determinado por este componente. Um objeto vazio geralmente serve como um contêiner para adicionar novos
componentes, por exemplo, podemos converter um objeto vazio em uma fonte de áudio para reproduzir um som no
jogo.
Trabalhando com Componentes

Componentes são o que definem cada objeto e é um aspecto muito importante da janela Inspector. Nesta seção você
vai apenas aprender como trabalhar com qualquer componente, enquanto que as propriedades únicas serão analisadas
na seção em que o componente for utilizado.

Encolhendo e Expandindo as Propriedades

Para encolher as propriedades de um componente, clique com o botão esquerdo do mouse no título do próprio
componente:

Figura 3.50 - Componentes encolhidos

Clique novamente sobre o título para expandir as propriedades.

Ao Encolher Um Componente
O Gizmo de alguns componentes não é exibido se o componente associado estiver encolhido na janela
Inspector. Por exemplo, se você selecionar o GameObject MainCamera e encolher o componente Camera, o
Gizmo que mostra a projeção da câmera na cena não será exibido.

Desativando um Componente

Para desativar algum componente, desmarque a caixa de seleção logo ao lado do nome do componente:
Figura 3.51 - Componente "Mesh Renderer" desativado

Um componente desativado não vai exercer sua funcionalidade, ou seja, no exemplo da figura anterior, o componente
Mesh Renderer é utilizado para exibir um objeto 3D na cena, se você desativar este componente, o objeto não será
exibido.

Removendo um Componente

Para remover um componente, clique no pequeno ícone de engrenagem no final do título do componente e selecione a
opção Remove Component:

Figura 3.52 - Removendo um componente


Este mesmo menu de contexto também pode ser acessado clicando com o botão direito do mouse no título do
componente:

Figura 3.53 - Menu do componente acessado ao clicar com direito no título

Adicionando um Componente

Para adicionar um componente no objeto selecionado, clique no botão Add Component e navegue entre as categorias
de componentes disponíveis:
Figura 3.54 - Botão de adicionar componentes

Componentes
Não se preocupe sobre como funciona todos os componentes agora, você está apenas descobrindo como usar a
janela Inspector para manipular e adicionar novos componentes.

Para efeito de exemplo, vamos criar uma câmera a partir de um GameObject vazio:

Criando Uma Câmera

1. Primeiro remova a câmera atual para não entrar em conflito com a nova câmera que será criada, selecione o
GameObject Main Camera na janela Hierarchy e pressione “Delete”.

2. Use o menu principal GameObject ou o menu Create da janela Hierarchy e selecione a opção Create Empty,
ou use o atalho “Ctrl + Shift + N”.

Um novo objeto vazio chamado “GameObject” será criado, por ser um objeto vazio, repare que o mesmo ainda não
possui nenhum tipo de visualização na cena, exceto pelo Gizmo de transformação. Agora se você olhar na janela
Inspector, repare que mesmo sendo um objeto vazio, podemos ver as propriedades comuns incluindo o componente
Transform que é adicionado automaticamente em todo objeto:

Figura 3.55 - Janela Inspector de um objeto vazio

3. Renomeie o objeto para “Main Camera” ou “Câmera Principal” (selecione o objeto na janela Hierarchy e
pressione “F2” ou use o campo de texto do nome na janela Inspector).

4. No menu Tag, selecione a opção MainCamera:

Figura 3.56 - Definindo a Tag MainCamera

No componente Transform, no parâmetro Position, você pode alterar a posição do objeto usando as coordenadas x, y e
z. Para alterar o valor basta clicar sobre o campo de texto e digitar o valor desejado.

5. Altere Position para as coordenadas (0, 1, -10):


Figura 3.57 - Alterando a posição de um objeto na janela Inspector

Agora você precisa adicionar o componente que define uma câmera no Unity.

6. Clique no botão Add Component, navegue na categoria Rendering, em seguida selecione o componente
Camera:

Figura 3.58 - Selecionando o componente "Camera"

Outra maneira de adicionar um componente para o objeto selecionado é seguindo para o menu Component, navegue
entre as categorias e selecione o componente desejado.

7. A câmera principal que foi removida tinha mais um componente chamado Audio Listener, então clique
novamente em Add Component, só que agora em vez de navegar por categoria, digite “Listener” na busca e
adicione o componente encontrado:
Figura 3.59 - Buscando e adicionando o componente "Audio Listener"

Uma maneira rápida de adicionar uma câmera na cena, é seguindo para o menu GameObject e selecione a opção
Camera. Dessa forma o Unity vai adicionar um novo objeto chamado Camera com os mesmos componentes que
adicionamos antes. Essa é uma das grandes vantagens de se trabalhar com o Unity, cada componente define uma
característica para o objeto. Muitos dos componentes listados na janela Add Component ou no menu Component, são
todos pré-definidos pelo Unity, mas é possível também criar nosso próprio componente via Script ou instalar plugins
que estende o Unity com mais componentes.

Criando GameObjects

Você pode criar um GameObject vazio e adicionar alguns componentes internos para definir um objeto em particular,
exatamente como você fez na seção anterior quando criou uma câmera. Para reforçar o entendimento, vamos recriar um
Cubo 3D desde o começo, o resultado vai ser o mesmo objeto que pode ser criado acessando o menu GameObject >
3D Object > Cube.

Criando Um Cubo 3D

1. Inicie uma nova cena pressionando “Ctrl + N” ou siga para o menu File e selecione New Scene.

2. Crie um GameObject vazio pressionando “Ctrl + Shift + N”, em seguida renomeie de GameObject para Cubo.

3. Reinicie as coordenadas do Cubo seguindo para a janela Inspector, em seguida clique com o botão direito do
mouse no componente Transform e selecione Reset.

Para definir o formato do Cubo ou de qualquer outro objeto 3D, utilizamos o componente Mesh Filter.
4. Na janela Inspector, clique no botão Add Component, entre na categoria Mesh e selecione o componente Mesh
Filter.

Assim que o componente Mesh Filter é adicionado, o parâmetro Mesh fica em branco (sem nada selecionado).

5. No final do parâmetro Mesh, clique no pequeno botão com um ícone de círculo para abrir a janela de seleção de
malha, selecione a opção Cube e feche a janela:

Figura 3.60 - Definindo o formato de um cubo

Repare que na cena nada é exibido, pois ainda não foi adicionado o componente Mesh Renderer responsável por
renderizar (exibir) o formato do Cubo.

6. Clique em Add Component novamente, navegue na categoria Mesh e selecione o componente Mesh Renderer.

Agora sim o formato do cubo será exibido, porém, ele está completamente rosa. A cor rosa geralmente indica que o
material ou a textura do objeto ainda não foi aplicado:

Figura 3.61 - Objeto sem material definido

7. Para aplicar um material padrão, siga para o componente Mesh Renderer e no parâmetro chamado Materials,
clique na pequena seta ao lado do nome (ou na própria barra do nome) para expandir a lista de materiais:
Figura 3.62 - Expandindo a lista de materiais

8. O parâmetro Size será revelado, certifique-se que este parâmetro possui o valor 1 (pelo menos 1 material).

9. No parâmetro Element 0 (o primeiro material) clique no pequeno botão de círculo para abrir a janela de seletor
de materiais, selecione o material padrão chamado Default-Material e fecha a janela:

Figura 3.63 - Selecionando o material padrão para o Cubo

Com o material padrão selecionado, o Cubo 3D será exibido normalmente.

Vídeo 3.7 - Criando um Cubo 3D desde o começo

Repare que o componente Mesh Filter define o modelo 3D que é exibido pelo componente Mesh Renderer. Se você
abrir o seletor de malha novamente (etapa 5 anterior) veja que você pode escolher outros modelos 3D pré-definidos
(capsula, cilindro, plano, esfera e quadrante, veja a Figura 3.60). Todos esses modelos 3D padrão podem ser
adicionados já com os componentes definidos, basta seguir para o menu GameObject (ou botão Create da janela
Hierarchy) e aponte para 3D Object:
Figura 3.64 - Menu de criação de objetos 3D

Sobre os Objetos 3D
Não se preocupe com as terminologias 3D e os parâmetros do Cubo 3D, o passo a passo anterior foi apenas para
demonstrar como criar um GameObject adicionando componentes e definindo seus parâmetros. Modelos 3D e
termos derivados serão vistos com mais detalhes no capítulo “Modelos, Materiais e Texturas”.
Parentesco

O termo Hierarchy ou Parentesco é a relação de domínio de um objeto sobre o outro, por exemplo, quando você cria
um grupo de objetos, o objeto no topo da hierarquia é chamado de objeto pai e todos os objetos agrupados dentro da
hierarquia do pai são chamados de objetos filhos. As alterações na relação entre pai e filho é muito importante para
criar diversas situações no nosso jogo, sabendo disso, vamos criar um grupo de cubos para 3 cubos na cena:

Criando Um Parentesco de Cubos

1. Se você acompanhou os exemplos anteriores, você deve ter criado 3 cubos, caso contrário, crie os três cubos e
posicione-os como na figura a seguir:

Figura 3.65 - Três cubos posicionados lado a lado

Para criar um parentesco você precisa criar o objeto pai, pois os 3 cubos serão filhos de uma hierarquia, para fazer isso
podemos criar um objeto vazio.

2. Ainda na janela Hierarchy, clique no botão Create e selecione a opção Create Empty:

Figura 3.66 - Criando um objeto vazio na janela Hierarchy


Sobre Um Objeto Vazio
Um objeto vazio basicamente é um objeto que ainda não possui componentes que definem seu propósito, eles
servem como ponto de partida para criar um objeto específico ou podem servir para criar parentesco entre
objetos.

3. Renomeie de GameObject para “Grupo de Cubos”.

Existe 3 maneiras de renomear um objeto na janela Hierarchy:

Clique com o botão direito do mouse sobre o objeto que deseja renomear e selecione a opção Rename.

Ao fazer isso, o nome do objeto na janela Hierarchy se torna um campo de texto pronto para ser modificado:

Figura 3.67 - Renomeando objetos na janela Hierarchy

Selecione o objeto que deseja renomear e pressione “F2”.


Após selecionar um objeto, clique novamente sobre o objeto na lista e o campo de renomear será exibido.

Vídeo 3.8 - Renomeando objetos na janela Hierarchy

Agora você precisa adicionar os cubos como filhos do Grupo de Cubos (o objeto pai do parentesco).

4. Clique e arraste o botão esquerdo do mouse no primeiro cubo (objeto com o nome Cube) para dentro do objeto
Grupo de Cubos, quando o mesmo ficar com um fundo azul-claro, esse é o momento para liberar o botão do mouse:

Figura 3.68 - Adicionando um objeto em uma hierarquia


Repare que o objeto Grupo de Cubos agora possui uma pequena seta no lado esquerdo do nome que você pode usar
para encolher ou expandir a exibição dos objetos na hierarquia:

Figura 3.69 - Parentesco de um objeto

Isso significa que o objeto Grupo de Cubos possui um parentesco com o objeto Cube como filho.

Vídeo 3.9 - Criando um parentesco

Para adicionar os cubos restantes, em vez de adicionar um por um, você pode selecionar múltiplos objetos.

5. Selecione o objeto Cube (1), em seguida mantenha a tecla “Ctrl” ou “Shift” pressionada e selecione o objeto
Cube (2).

Veja na cena que agora os dois cubos estão selecionados.

6. Clique e arraste a seleção dos dois cubos para dentro do objeto Grupo de Cubos:

Figura 3.70 - Adicionando múltiplos objetos em um parentesco

Agora selecione o objeto Grupo de cubos e veja que na cena os três cubos estão selecionados também. Isso significa
que se você realizar qualquer transformação no objeto pai, os filhos também receberão a mesma transformação. A
hierarquia não se limita a apenas um pai, você pode criar quantos objetos pais for necessário, você também pode
inclusive criar uma hierarquia dentro de outra hierarquia, esse parentesco será um filho pai que possui seus próprios
objetos filhos.

Criando Um Parentesco Dentro de Outra Hierarquia


1. Duplique o primeiro cubo (“Ctrl + D”).

Um novo cubo chamado Cube (3) será criado, repare que ao duplicar um objeto dentro de um parentesco, este objeto
permanece na mesma hierarquia.

2. Com o Cube (3) selecionado, siga para a janela Scene e mova o cubo um pouco para cima (use a ferramenta de
mover (W) e o manipulador verde que representa o eixo Y).

3. De volta na janela Hierarchy, mova o Cube (3) para dentro do parentesco do Cube:

Figura 3.71 - Parentesco dentro de outra hierarquia

Isso fará com que o objeto Cube tenha sua própria hierarquia, com o objeto Cube (3) como filho. Contudo, o objeto
Grupo de Cubos continua sendo o objeto pai dominante:

Figura 3.72 - Parentesco dentro de outro parentesco

Se você quiser remover algum objeto da hierarquia (do parentesco, não da cena), basta mover o objeto para fora do
parentesco:

Removendo Um Objeto do Parentesco

1. Selecione o objeto que deseja remover do parentesco.


2. Arraste o objeto segurando o botão esquerdo do mouse para fora do parentesco, em cima do objeto Grupo de
Cubos (ou qualquer outro lugar fora do parentesco atual), até que uma linha azul seja exibida indicando a posição
onde o objeto será deslocado na lista:

Figura 3.73 - Removendo um objeto de um parentesco

3. Agora solte o botão do mouse.

O objeto será removido da hierarquia do primeiro Cube e do Grupo de cubos também. Isso fará com que o Cube (3)
fique livre de qualquer parentesco.

Vídeo 3.10 - Removendo um objeto de um parentesco


Coordenada Global e Local

Você já aprendeu sobre as dimensões (2D e 3D) e sobre o sistema de coordenadas que define a localização de um
objeto em um espaço tridimensional. O que você vem trabalhando até agora é chamado de Sistema de Coordenadas
Mundial (ou global). O sistema de coordenadas mundial tem uma origem e orientação fixa em que todos os objetos
compartilham (a origem da cena). No entanto, no Sistema de coordenadas Local cada objeto possui seus próprios
eixos e origem que são diferentes e não são utilizados por outros objetos. A coordenada local é utilizada por objetos
filhos em um parentesco, a diferença está na maneira como o objeto filho se comporta, a transformação do objeto filho
é relativa ao objeto pai e não ao espaço do mundo do jogo. Isso significa que se o objeto pai for transformado, os filhos
no parentesco também serão afetados pela transformação, porém, a transformação do objeto filho mantém inalterado.

Exemplo de Coordenada Local

Para entender como o sistema de coordenadas local funciona, vamos criar um exemplo prático utilizando dois Cubos
3D em um parentesco.

1. Crie uma nova cena (“Ctrl + N”).

2. Adicione um Cubo 3D (menu GameObject ou o botão Create da janela Hierarchy, aponte para 3D Object e
selecione Cube).

3. Certifique-se que a posição do cubo esteja na origem da cena (0, 0, 0).

4. Duplique o cubo inicial e mova sua posição 2 unidades no eixo X (2, 0, 0):

Figura 3.74 - Dois cubos posicionados um do lado do outro

5. Coloque o segundo cubo como filho do primeiro cubo:


Figura 3.75 - Objeto "Cube (1)” filho do objeto pai "Cube"

6. Ative a ferramenta de Rotação (“E”) e deixe a posição do Gizmo em Pivot, em seguida selecione o GameObject
Cube que é o pai no parentesco.

7. Rotacione o Cube no eixo Y, repare que o filho é afetado pela rotação:

Figura 3.76 - Rotacionando o objeto pai

Com o objeto pai ainda selecionado, siga para a janela Inspector, no componente Transform, repare que no parâmetro
Rotation a coordenada Y foi alterada como esperado. Agora selecione o objeto filho no parentesco e veja que sua
rotação e posição não foi alterada (mesmo recebendo a transformação do pai). Isso acontece porque o que foi
transformado é o objeto pai, já o objeto filho possui sua própria coordenada local relativa ao pai. No exemplo anterior o
cubo pai se encontra na coordenada global e o cubo filho no parentesco se encontra na coordenada local. Você pode
transformar o objeto filho normalmente da mesma forma como você já aprendeu, a diferença é que sua transformação é
relativa ao pai e não a origem da cena, você pode confirmar isso movendo o objeto pai para a posição (-2, 0, -2):
Figura 3.77 - Posição do objeto pai

Agora selecione o objeto filho e redefina sua posição para sua origem (0, 0, 0), isso vai fazer com que o objeto filho
seja deslocado na mesma posição do objeto pai, pois a posição de origem do filho é a posição atual do pai, enquanto
que a posição de origem do pai no exemplo é a posição de origem da cena.

Vídeo 3.11 - Coordenada Global e Local


Câmeras

Câmeras no Unity são como dispositivos que capturam a cena do jogo, o que a câmera está vendo é o que o jogador vai
ver também, ou seja, onde você colocar a câmera principal, vai definir o que será visto quando o jogo for executado.
Dependendo do estilo do jogo você pode utilizar uma câmera de diferentes maneiras, por exemplo, um jogo de quebra-
cabeça ou tabuleiro a câmera deve ficar fixa para visualizar toda as peças do jogo. Para um jogo de tiro em primeira
pessoa, a câmera pode ficar em um parentesco com o personagem na mesma altura dos olhos, dessa forma quando o
personagem se mover, a câmera deve seguir o movimento.

Por padrão, a câmera principal é identificada na janela Hierarchy pelo GameObject chamado Main Camera e na
janela Scene ela pode ser identificada pelo Gizmo ou ícone de câmera:

Figura 3.78 - Câmera principal selecionada na janela Hierarchy e o Gizmo da câmera na janela Scene

Se você não estiver vendo o ícone da câmera, verifique se o botão Gizmos está ativado na barra de controles da janela
Scene.

Visão da Câmera da Cena


A visão da cena na janela Scene não é o que a lente da câmera está visualizando. A visão da cena e a visão da
câmera do jogo são duas visões distintas e independentes uma da outra.

A Visão da Lente da Câmera

Para visualizar o que a câmera está vendo a partir de sua lente, use a janela Game (“Ctrl + 2”):
Figura 3.79 - Visão da câmera principal vista pela janela Game

Se você selecionar a câmera principal (GameObject Main Camera), a janela Scene vai exibir no canto inferior direito
uma prévia do que a câmera está visualizando:
Figura 3.80 - Prévia da visão da Câmera na janela Scene

Alinhando a Câmera Com a Visão da Cena


É possível alinhar a câmera principal com a visão atual da cena, por exemplo, mova a visão da cena para um
local que deseja que a câmera visualize também, em seguida com a câmera principal ainda selecionada
(GameObject Main Camera), siga para o menu GameObject e selecione a opção Align with view (alinhar
com a visão) ou use o atalho “Ctrl + Shift + F”.

Com a câmera selecionada, você deve ter notado também na janela Scene o Gizmo com contorno branco que representa
a projeção cônica da câmera, se você não estiver vendo a projeção cônica da câmera, certifique-se que o componente
Camera do GameObject Main Camera não esteja encolhido:
Figura 3.81 - Gizmo da projeção cônica da câmera

A representação visual dos planos da câmera determina o quê a câmera vai visualizar, objetos fora deste campo de
visão não serão exibidos durante a execução do jogo.

Propriedades e Componentes

A câmera padrão e como qualquer outro GameObject também possui um componente Transform, isso significa que
você pode mover e rotacionar a câmera como desejar. No entanto, o componente Camera é o principal de toda câmera
do Unity. Para visualizar ou alterar as propriedades da câmera principal, selecione o GameObject Main Camera e siga
para a janela Inspector:
Figura 3.82 - Propriedades de uma câmera no Unity

Veja na tabela a seguir uma breve descrição sobre as diferentes propriedades:

Tabela 3.2 - Parâmetros (propriedades) do componente “Camera”


Como você pode ver, a câmera não é só uma maneira de exibir objetos, existe muita coisa acontecendo por “traz da
cortina”. No começo do aprendizado com Unity você não precisa se preocupar em adicionar múltiplas câmeras e um
entendimento preliminar das propriedades deve ser suficiente para continuar.

O Componente Audio Listener

No Unity existe dois componentes que trabalham em conjunto, que é o Audio Listener e o Audio Source. Imagine o
Audio Listener como sendo os ouvidos ou um microfone que captura o som a ser reproduzido por uma fonte de áudio
(Audio Source). Por padrão, o componente Audio Listener é adicionado na câmera principal:

Figura 3.83 - Componente Audio Listener adicionado na câmera principal

O Unity adiciona um Audio Listener na câmera principal pelo fato de ser comum a câmera seguir o jogador, mas você
pode inserir o Audio Listener em qualquer objeto.

Audio Listener Duplicado


Repare que se você duplicar a câmera principal ou adicionar uma nova câmera, você vai duplicar o componente
Audio Listener também, porém, apenas um Audio Listener é necessário por cena, nesse caso, para não gerar
conflito, desative o Audio Listener das demais câmeras duplicadas.
Visibilidade dos Objetos
Quando uma cena se torna muito complexa, fica difícil visualizar, selecionar e editar objetos específicos, pois os
objetos ao redor podem obstruir sua visibilidade, dificultando sua edição. Um recurso interessante no Unity é a
visibilidade dos objetos que nos permite esconder objetos ou isolar o restante. Seguindo na janela Hierarchy, você vai
notar uma coluna no lado esquerdo que exibe o status da visibilidade de cada objeto na hierarquia:

Figura 3.84 – Esta coluna exibe o status da visibilidade dos objetos

Ao passar o cursor do mouse sobre algum item na Hierarchy, um ícone de olho será exibido, se você já utilizou
programas de edição de imagem, já deve estar familiarizado com este ícone, ele simplesmente exibe o status de
exibição de algum objeto e pode mudar dependendo da situação atual. Continuando com o exemplo dos cubos
anteriores, veja a seguir como esconder um objeto usando a janela Hierarchy:

Escondendo Um Objeto

1. Continuando com os exemplos anteriores, siga para a janela Hierarchy e passe o mouse sobre o objeto Cube (2).

2. Clique uma vez no ícone de olho que se encontra na coluna no lado esquerdo da janela, ao fazer isso, um ícone de
olho “escondido” será exibido:
Figura 3.85 - Objeto com status de "escondido" na hierarquia

O objeto na cena deve ter desaparecido como esperado.

Se após clicar no ícone de olho e o objeto continua visível na cena, é provável que a visibilidade dos objetos esteja
desativada. Se este for o seu caso, siga para a janela Scene e na barra de controles, ative o botão indicado na figura a
seguir:

Figura 3.86 - Ativar ou desativar a visibilidade dos objetos na cena

Este botão exibe um contador de quantos objetos estão escondidos na cena e também pode ser utilizado para ativar ou
desativar a visibilidade dos objetos.

A Visibilidade Afeta Apenas a Cena


A visibilidade dos objetos é afetada apenas na visão da janela Scene, mantendo a visibilidade normal durante o
jogo e também não afeta outros sistemas do Unity. Além disso, a caixa de seleção na janela Inspector que
permite desabilitar um objeto afeta sua visibilidade na cena e no jogo também, porém, um objeto desabilitado
não é marcado como “escondido”, isso significa que ambos os recursos são distintos um do outro.

Voltando na janela Hierarchy, você deve ter notado também que um ícone de olho é exibido no objeto Grupo de
Cubos, neste caso o ícone está indicando que o objeto pai está visível, mas possui algum objeto filho escondido:

Figura 3.87 - Parentesco contendo algum filho escondido

Você pode esconder todos os objetos de uma hierarquia clicando no ícone de olho em cada objeto, porém, uma maneira
rápida de fazer isso é segurando a tecla “Alt” e em seguida clique no ícone de olho do objeto pai, dessa forma o objeto
pai e todos os seus filhos serão escondidos, incluindo qualquer parentesco aninhado:
Figura 3.88 - Todos os objetos no parentesco, incluindo o pai, estão escondidos

Para exibir tudo novamente, segure “Alt” e clique mais uma vez no ícone de olho do objeto pai.

Visibilidade no Parentesco
Repare que a visibilidade é exclusiva para cada objeto, isso significa que se você esconder apenas o objeto pai,
os filhos continuam visíveis na cena.

Na Tabela 3.3 a seguir você pode conferir todos os status da visibilidade dos objetos:

Tabela 3.3 - Status da visibilidade dos objetos

Isolando Objetos

Você viu como é fácil esconder e isolar os objetos na cena, para isolar um objeto específico, você precisa esconder os
demais objetos manualmente. Entretanto, é possível isolar um objeto completamente usando um atalho do teclado.
Atualmente o atalho para isolar um objeto precisa ser definido manualmente seguindo para o menu Edit (ou menu
Unity no Mac) e selecione Shortcuts. A janela Shortcuts é utilizada para definir atalhos para todos os tipos de
comandos do Unity:

Figura 3.89 - A janela Shortcuts (define atalhos do teclado)

No painel Category do lado esquerdo, selecione a categoria Scene Visibility (visibilidade da cena), o painel do lado
direito vai exibir os comandos da visibilidade da cena, procure pelo comando Isolate Selection (isolar seleção):
Figura 3.90 - Comandos da visibilidade da cena

Para definir um atalho clique duas vezes no comando Isolate Selection, um pequeno campo de texto será exibido logo
ao lado do nome do comando, quando isso acontecer, todas as entradas do teclado serão gravadas no atalho. Para este
exemplo, defina o atalho “Ctrl + Shift + I”. Assim que definir o atalho, feche a janela Shortcuts e siga para a janela
Scene, em seguida selecione o objeto que deseja isolar e pressione o atalho que foi definido. Com o objeto isolado,
agora você pode focar nele sem se preocupar com os demais objetos.

Para sair da visão de isolação, veja no canto inferior direito da janela Scene o painel Isolation View, clique no botão
Exit (sair):

Figura 3.91 - Painel Isolation View e botão Exit


Prefabs
O que são Prefabs e, porque você precisa saber disso agora? Prefab é um termo muito comum e é um recurso muito
importante no Unity. Por ser uma parte essencial, é bom já saber como funciona no começo do aprendizado.

Imagine a seguinte situação, você criou um objeto inimigo que possui diversos componentes e propriedades, porém, o
nível atual do jogo precisa de mais inimigos, então você duplica o primeiro objeto inimigo algumas vezes. Agora você
decide que esse inimigo precisa ser alterado de alguma forma, por exemplo, diminuir a quantidade de vidas do inimigo.
Você pode realizar esta alteração em todos os objetos inimigos que você criou e duplicou. Em um cenário simples com
5 inimigos pode ser que não seja muito trabalho, afinal é possível selecionar todos os objetos e alterar as propriedades
de uma vez.

Mesmo assim isso não é nada prático, ainda mais em uma cena grande ou em um projeto com diversas cenas com o
mesmo objeto duplicado em vários lugares. É aí que entra o uso dos Prefabs, o termo Prefab significa pré-fabricado,
em outras palavras, é um objeto pronto que podemos reutilizar no nosso projeto. O Prefab do inimigo é o próprio objeto
do inimigo, a diferença é que agora em vez de alterar os objetos inimigos de forma individual, agora você só precisa
alterar o Prefab do inimigo e o restante dos objetos serão alterados automaticamente em qualquer cena que o Prefab foi
utilizado. Isso significa que você só precisa alterar um objeto em apenas um lugar e as cópias restantes serão afetadas
também.

Para efeito de exemplo, vamos criar uma cena com alguns cubos que podem ser utilizados como “caixas”.

Preparando a Caixa de Exemplo

1. Crie uma nova cena (“Ctrl + N”).

2. Adicione um GameObject vazio que vai servir como pai do Prefab (“Ctrl + Shift + N”), esta etapa não é
mandatória, mas pode ser útil para definir o contêiner do objeto.

3. Renomeie o GameObject vazio para Caixa.

4. Na janela Hierarchy, clique com o botão direito do mouse sobre o GameObject Caixa e a adicione um Cubo
3D (aponte para 3D Object e selecione Cube).

5. Renomeie de Cube para Modelo da Caixa:

Figura 3.92 - Hierarquia da Caixa

6. Duplique a primeira caixa 3 vezes e posicione de forma aleatória, algo parecido como na figura a seguir:
Figura 3.93 - Duplicando as caixas

Vamos supor que agora você decide que as caixas deveriam ser mais altas, então você precisa selecionar a primeira
caixa, depois no componente Transform, no parâmetro Scale, altere a coordenada y para o valor 2. É possível também
selecionar todos os objetos e alterar a escala deles ao mesmo tempo. Entretanto, esse processo pode ser repetitivo e
nada prático, seria melhor criar um Prefab da caixa.

7. Pressione “Ctrl + Z” algumas vezes para desfazer o que foi feito até que apenas uma Caixa esteja presente na
cena.

Criando um Prefab

Digamos que a primeira caixa inicial seja o objeto final, com isso feito agora você pode criar um Prefab da caixa.

Criando Um Prefab

1. Para criar um Prefab da caixa é muito simples, clique e mantenha segurado o botão esquerdo do mouse no
objeto Caixa na janela Hierarchy e arraste-o para dentro da janela Project:
Figura 3.94 - Criando um Prefab do objeto Caixa

Um novo asset será criado na janela Project, neste caso seria um asset do tipo Prefab do GameObject Caixa:

Figura 3.95 – Asset de Prefab da Caixa

2. Para manter o projeto organizado, crie uma pasta chamada Prefabs e mova o Prefab da Caixa para esta pasta.

Para criar uma pasta clique no botão Create da janela Project e selecione Folder ou clique com o botão direito do
mouse sobre uma área vazia do diretório atual, aponte para o menu Create e selecione Folder.

Você pode confirmar que o GameObject Caixa é um Prefab por causa da cor azul no ícone e no nome do item na janela
Hierarchy:

Figura 3.96 - Um Prefab na janela Hierarchy

Feito isso, agora você pode duplicar o Prefab existente da Caixa na cena, repita o processo como você fez
anteriormente quando duplicou as caixas:

Figura 3.97 - Cópias do Prefab da Caixa

Você também pode adicionar o asset do Prefab da Caixa que foi criado na janela Project, simplesmente clique e
mantenha segurado o botão esquerdo do mouse sobre o asset do Prefab e arraste-o para dentro da Scene ou dentro da
Hierarchy:
Figura 3.98 - Adicionando o asset do Prefab na cena

Entrando no Modo Prefab

Para editar um Prefab você precisa entrar no Modo Prefab do Prefab desejado, existe 4 maneiras simples de entrar
neste modo:

Clique duas vezes sobre o asset do Prefab na janela Project.


Selecione o asset do Prefab na janela Project e seguindo na janela Inspector, clique no botão Open Prefab (abrir
prefab):

Figura 3.99 - Abrindo o Prefab no Modo Prefab a partir do asset do Prefab

Clique uma vez sobre o ícone de seta apontando para direita em uma das cópias do Prefab na janela Hierarchy:
Figura 3.100 - Abrindo o Prefab no Modo Prefab pela janela Hierarchy

Clique no botão Open na janela Inspector de uma das cópias do Prefab atualmente selecionado:

Figura 3.101 - Abrindo o Prefab no Modo Prefab na janela Inspector a partir de uma cópia do Prefab

Ao entrar no Modo Prefab, a janela Scene e a janela Hierarchy vai exibir apenas o conteúdo do Prefab aberto,
isolando o restante da cena, dessa forma você pode focar sua atenção apenas no Prefab que estiver editando. Você vai
perceber também que o fundo da janela Scene ficou azul, indicando que os efeitos da cena estão desativados e que você
realmente está no Modo Prefab:
Figura 3.102 - Janela Hierarchy e Scene no Modo Prefab exibe apenas os GameObjects do Prefab

Se você não estiver vendo o fundo azul, é porque os efeitos da cena estão ativados, desative os efeitos para isolar o
fundo também:

Figura 3.103 - Efeitos da cena desativados

Repare que na janela Scene é exibido uma barra logo abaixo da barra de controles, no lado esquerdo você vai encontrar
a barra de navegação do Prefab, o último item na navegação é o Prefab atualmente aberto:

Figura 3.104 - Barra de navegação do Modo Prefab

Itens à esquerda da barra de navegação do Prefab podem ser utilizados para voltar para a cena atual ou outro Prefab que
estiver aberto. Ao clicar em Scenes você vai sair do Modo Prefab do Prefab atualmente aberto e vai voltar para a cena
atual. Outro detalhe no Modo Prefab é o cabeçalho do Prefab que se encontra no topo da janela Hierarchy:

Figura 3.105 - Cabeçalho do Prefab na janela Hierarchy

Este cabeçalho exibe o nome do Prefab atualmente aberto, além disso, você pode utilizar a pequena seta de voltar para
navegar uma etapa atrás, este recurso é equivalente à barra de navegação anterior que se encontra na janela Scene.

Modificando um Prefab

Continuando com o exemplo anterior, agora em vez de alterar as caixas individuais, simplesmente entre no Modo
Prefab da Caixa e realize as modificações necessárias, por exemplo, selecione o Modelo da Caixa e altere a escala y
para o valor 2:
Figura 3.106 - Alterando a escala do Prefab da Caixa no Modo Prefab

Em seguida saia do Modo Prefab e repare que todas as caixas na cena são atualizadas com a nova escala, se você
tivesse outra cena contendo o mesmo Prefab, as caixas seriam atualizadas também:

Figura 3.107 - Resultado das caixas na cena após editar o Prefab da Caixa

Alterações na Posição e Rotação


Pelo fato das cópias de um Prefab possuir diferentes posições e rotação, o Unity não leva em consideração as
modificações realizadas nas propriedades Position e Rotation do componente Transform, com exceção da
propriedade Scale.

Por padrão, todas as modificações realizadas no Modo Prefab são salvas automaticamente no asset do Prefab. Caso
queira controlar quando salvar as modificações, desmarque a caixa de seleção Auto Save (salvamento automático) que
se encontra no final da barra de controle do Prefab da janela Scene:
Figura 3.108 - Salvamento automático desativado

Para salvar as alterações, você precisa clicar no botão Save que se encontra logo ao lado da opção Auto Save. O
salvamento automático desativado pode ser útil quando você não tem certeza do resultado final ou para evitar certo
atraso no salvamento em Prefabs muito grande, pois o salvamento automático é acionado toda vez que uma propriedade
é modificada. Se você tentar sair do Modo Prefab com alterações pendentes, uma janela será exibida pedindo
confirmação para salvar (Save), descartar (Discard Changes) ou cancelar (Cancel):

Figura 3.109 - Janela de confirmação de Prefab modificado

Adicionando Novos Objetos

Assim que um Prefab é construído, você pode continuar adicionando novos objetos como desejar. Por exemplo,
continuando no Modo Prefab da Caixa, siga para o menu GameObject, aponte para 3D Object e selecione Sphere.
Repare que uma esfera é adicionada como filho da Caixa, mova a esfera um pouco acima da Caixa:
Figura 3.110 - Esfera adicionada no topo da caixa

Ao sair do Modo Prefab com as alterações salvas, teremos o seguinte resultado:

Figura 3.111 - Novo objeto adicionado no Prefab da Caixa

Modificando as Instâncias do Prefab

É possível também alterar uma das cópias (instâncias) do Prefab de maneira individual, ou seja, fora do Modo Prefab.
Por exemplo, selecione uma das cópias do Modelo da Caixa na cena e seguindo na janela Inspector, no componente
Transform, altere sua escala (propriedade Scale) para os valores (0.5, 0.5, 0.5):

Figura 3.112 - Uma cópia do Prefab da caixa alterada separadamente

Repare que se você realizar alguma alteração no Prefab que não seja no Modo Prefab, a janela Inspector vai exibir
uma barra azul indicando as propriedades que foram sobrescritas, o nome da propriedade também fica em negrito,
como no caso do exemplo da propriedade Scale indicado na figura a seguir:

Figura 3.113 - Propriedade Scale indicando que é diferente do Prefab

Dessa forma você pode criar uma variação do Prefab enquanto mantém uma ligação com o asset do Prefab original.

Prioridade Das Alterações


As alterações realizadas na cópia individual de algum Prefab têm mais prioridade sobre o estado original do
asset do Prefab. Isso significa que se você alterar uma propriedade no asset do Prefab durante o Modo Prefab,
estas alterações não terão efeitos na cópia do Prefab em que esta mesma propriedade foi sobrescrita. Por
exemplo, no exemplo anterior a escala de um dos cubos foi alterada individualmente, esta propriedade da escala
não é mais afetada pela alteração da escala no Modo Prefab daquela cópia, garantindo que a alteração
permaneça consistente.
Manipulando as Alterações

Existe 4 maneiras de sobrescrever uma cópia do Prefab:

Sobrescrever um valor de alguma propriedade (como no exemplo da propriedade Scale do componente


Transform).
Adicionar um componente.
Remover um componente.
Adicionar um filho no parentesco.

Para manipular as alterações individuais você precisa utilizar o menu Overrides que se encontra na janela Inspector da
cópia do Prefab atualmente selecionado. Quando uma cópia do Prefab é selecionada na janela Scene ou na Hierarchy,
a janela Inspector exibe três botões no topo categorizado pela legenda Prefab:

Figura 3.114 – Cópia de um Prefab na janela Inspector

Open: Abre o Prefab no Modo Prefab.


Select: Seleciona o asset do Prefab, destacando a seleção do mesmo na janela Project, igual como acontece ao
clicar com o botão direito do mouse sobre uma cópia do Prefab na janela Hierarchy e selecione Select Prefab
Asset.
Overrides: Este menu exibe uma lista das modificações realizadas na cópia do Prefab selecionado. Clique sobre
uma opção para exibir uma comparação do que foi alterado.

No exemplo da figura a seguir o componente Mesh Renderer do Modelo da Caixa está selecionado na lista de
alterações e sendo comparado com os valores originais do Prefab, as propriedades alteradas são a Cast Shadows e
Receive Shadows:
Figura 3.115 - Comparando as alterações do Prefab

É possível reverter ou aplicar estas alterações no asset do Prefab original, você pode fazer isso no componente todo
usando o botão Revert (reverter) e Apply (aplicar) ou clique com o botão direito do mouse sobre uma propriedade e
selecione uma opção:

Figura 3.116 - Revertendo ou aplicando as alterações

No exemplo da figura anterior, cliquei com o botão direito do mouse sobre a propriedade Cast Shadows e decidi
selecionar a opção Apply to Prefab ‘Caixa’ para aplicar a alteração da propriedade no asset do Prefab da Caixa. Se
você selecionar Revert, a alteração atual na propriedade será descartada e revertida para o valor original do asset do
Prefab. Agora se você tem certeza que deseja aplicar ou reverter todas as alterações no componente, utilize o botão
Revert ou Apply como indicado na figura anterior. Logo abaixo da lista de alterações, você vai encontrar o botão
Revert All que desfaz de todas as alterações realizadas individualmente no objeto e reverte para as propriedades
originais do asset do Prefab. Já o botão Apply All salva todas as alterações no asset do Prefab original e aplica as
modificações nos demais objetos na cena também:

Figura 3.117 - Reverter (Revert All) ou aplicar (Apply All) todas as alterações

O menu de contexto que nos permite aplicar ou reverter uma propriedade específica também pode ser acionado
diretamente no componente que foi alterado:

Figura 3.118 - Menu de contexto de uma propriedade específica


Componentes que são adicionados também fazem parte das alterações e são destacados na janela Inspector com uma
barra azul, por exemplo, selecione uma das cópias do Prefab da Caixa, clique no botão Add Component, navegue na
categoria Audio e selecione Audio Source:

Figura 3.119 – Novo componente é destacado com uma barra azul

Se você seguir no menu Overrides, você vai notar que o componente Audio Source é listado como Added
(adicionado):

Figura 3.120 - Componente Audio Source indicado como "adicionado"


O mesmo vale para os componentes que foram removidos, por exemplo, com uma das cópias do Modelo da Caixa
selecionado, siga para a janela Inspector, clique com o botão direito do mouse sobre o título do componente Box
Collider e selecione Remove Component. As propriedades do componente serão removidas, mas o título é mantido
com uma cor diferente e com a legenda Removed (removido), indicando que o mesmo foi removido:

Figura 3.121 - Componente removido de uma das cópias do Prefab

Se você seguir no menu Overrides novamente, você vai ver que o componente Box Collider é listado e marcado como
Removed:

Figura 3.122 - Componente Box Collider listado como removido

Você também pode aplicar ou reverter as alterações diretamente pelo componente afetado usando o mesmo menu de
contexto do componente (clique com o botão direito do mouse sobre o título do componente). O menu Added
Component ou Removed Component será exibido caso o componente tenha sido adicionado, ou removido
respectivamente:
Menu Added Component:

Figura 3.123 - Menu Added Component

Menu Removed Component:

Figura 3.124 - Menu Removed Component

Quando um novo objeto é adicionado em uma cópia do Prefab, ele é exibido na Hierarchy com um sinal de +,
exatamente como na Sphere (1) da figura a seguir:

Figura 3.125 - Novo objeto adicionado em uma das cópias do Prefab

Você também pode conferir esta alteração no menu Overrides:


Figura 3.126 - Menu Overrides exibindo novo objeto adicionado

Outra maneira de aplicar ou reverter a adição de um novo GameObject é clicando com o botão direito do mouse sobre
o mesmo na Hierarchy, aponte para Added GameObject (gameobject adicionado) e selecione uma opção:
Figura 3.127 - Aplicar ou reverter a inserção de um novo objeto do Prefab

Prefab Aninhado

Você pode incluir instâncias de um Prefab como filhos dentro de outro Prefab, enquanto mantém a conexão com o asset
original do Prefab. Dessa forma podemos criar um jogo modular com diferentes partes conectadas. Vamos pensar em
um exemplo simples, digamos que existe um Prefab de mesa e outro de xícara, ou seja, ambos Prefabs separados:

Figura 3.128 - Mesa e xícara criado usando modelos primitivos

Agora você pode adicionar o Prefab da xícara como filho do Prefab da mesa, dessa forma podemos realizar as
alterações separadamente ao mesmo tempo que estão conectados. Para fazer isso, entre no Modo Prefab da mesa (o
objeto pai), em seguida clique e arraste o Prefab da xícara (o objeto filho) da janela Project para dentro da janela:

Figura 3.129 - Prefab adicionado como filho dentro de outro Prefab

Repare que no Modo Prefab, o Prefab no topo da hierarquia possui um ícone comum, enquanto o Prefab aninhado
possui um ícone azul na janela Hierarchy. Você também pode entrar no Modo Prefab do Prefab aninhado (clicando
no ícone de seta no lado direito do nome na janela Hierarchy). Na figura a seguir você pode conferir a barra de
navegação na janela Scene do Prefab aninhado, dessa forma após editar o Prefab aninhado, você pode voltar para o
Prefab anterior na hierarquia:
Figura 3.130 - Barra de navegação da hierarquia dos Prefabs aninhados

Assim que voltar para a cena com o Prefab salvo, o resultado pode ser visto nas outras instâncias da mesa:

Figura 3.131 - Instâncias da mesa com a xícara

Agora se você realizar qualquer alteração no Prefab da xícara (o Prefab aninhado), por exemplo, colocar um prato,
todos as instâncias da mesa serão atualizadas também:
Figura 3.132 - Prefab da xícara atualizado dentro de outros Prefabs

Criando um Asset de Prefab Variado

Na seção “Modificando as Instâncias do Prefab”, você descobriu que é possível criar uma variação do Prefab alterando
uma das cópias do Prefab de maneira individual, ou seja, fora do Modo Prefab. Dessa forma você pode criar um
Prefab base e alterar suas instâncias para ir além dos valores herdados. Além disso, você também pode criar um asset
de Prefab variado, onde a grande vantagem é que você pode usá-los para criar instâncias variadas em tempo real
durante a execução do jogo.

Para criar um Prefab Variado, clique com o botão direito do mouse no Prefab desejado na janela Project, aponte
para Create e selecione a opção Prefab Variant:

Figura 3.133 - Criando um Prefab Variado usando o menu Create da janela Project

Atalho Para Criar Um Prefab Variado


Você pode usar a janela Shortcuts para definir um atalho do teclado para criar um Prefab Variado do Prefab
atualmente selecionado na janela Project.

Outra maneira de criar um Prefab Variado é clicando e arrastando uma instância do Prefab da janela Hierarchy para
dentro da janela Project, a seguinte janela será exibida perguntando se você deseja criar um Prefab original (Original
Prefab) ou um Prefab Variado (Prefab Variant), selecione a opção Prefab Variant:

Figura 3.134 - Criando um Prefab ou Prefab Variado

Repare na janela Hierarchy que um Prefab Variado possui um ícone diferente, com algumas setas em volta do cubo
azul:

Figura 3.135 - Prefab Variado na janela Hierarchy

Agora você pode entrar no Modo Prefab do Prefab Variado e realizar as alterações desejadas. Vale a pena mencionar
que estas alterações podem ser controladas no menu Overrides também (veja a seção “Modificando um Prefab” para
saber mais), você pode inclusive aplicar as alterações de volta no Prefab base, mas geralmente isto não é o que você
deseja fazer. O propósito de um Prefab Variado é de oferecer uma maneira de armazenar um conjunto significativo e
reusável de modificações únicas, e é por isso que as alterações normalmente são mantidas e não são aplicadas no asset
do Prefab base.

Desfazendo Instâncias do Prefab

Para tornar uma instância de um Prefab em um GameObject comum, podemos desempacotar seu conteúdo, enquanto
mantém o asset do Prefab intacto. Você pode desfazer (desempacotar) uma instância do Prefab clicando com o botão
direito do mouse no mesmo na janela Hierarchy e selecione a opção Unpack Prefab:
Figura 3.136 - Desfazendo (desempacotando) uma instância do Prefab

Veja alguns pontos a ser notado ao selecionar Unpack Prefab:

O GameObject resultante não terá nenhuma conexão com o asset do Prefab e o próprio asset do Prefab não será
afetado.
Qualquer modificação realizada (Overrides) serão aplicadas na instância. Modificações futuras não serão
controladas, pois o GameObject não faz parte de um Prefab.
Ao desempacotar um Prefab que possui Prefabs aninhados em dentro, os Prefabs aninhados continuam sendo
Prefabs e mantém sua conexão com asset do Prefab.
Se você desempacotar um Prefab Variado, o mesmo se tornará uma instância do Prefab base.

Para se desfazer (desempacotar) um Prefab completamente, incluindo Prefabs aninhados e Prefabs Variados, clique
com o botão direito do mouse sobre o mesmo na janela Hierarchy e selecione a opção Unpack Prefab Completely.
Parte 4: Modelos, Materiais e Texturas

Neste Capítulo você vai aprender:

Sobre Modelos 3D e como eles são construídos


Modelagem básica com objetos primitivos
Importar Modelos 3D externos criados por outro aplicativo
Utilizar a Loja de Assets para baixar e importar Modelos 3D
Como os gráficos dos Modelos 3D são feitos e exibidos
Utilizar o shader padrão do Unity

Modelos 3D são a geometria que define todos os objetos 3D do jogo, pode ser um personagem, montanhas, terrenos,
itens, etc. Materiais e texturas são o que definem o aspecto visual ou a cor de cada Modelo 3D. Neste capítulo estarei
mostrando como trabalhar com modelos e como aplicar materiais e texturas.
Modelos

Os modelos 3D são construídos por malhas (ou “mesh”) que são uma coleção de vértices, arestas e polígonos que
descreve o formato do modelo 3D.

Um vértice representa um único ponto:

Figura 4.1 - Exemplo de um único vértice

Uma aresta é um segmento de linha reta conectado por dois pontos:

Figura 4.2 - Exemplo de aresta conectado por dois vértices

Um polígono (ou face) é uma superfície plana fechada por arestas, três pontos conectados cria-se um triângulo
fechado:
Figura 4.3 - Exemplo de polígono

Por padrão o Unity não oferece ferramentas de modelagem para criar modelos 3D, mas é possível importar modelos
que foram criados em um programa próprio para modelagem 3D.

Diferença Entre Malha e Modelo


Uma malha possui pontos e linhas que define o formato do modelo 3D, um modelo 3D possui uma malha que
define suas dimensões e formato, mas também pode possuir animações, texturas, materiais, shaders e outras
malhas que define o modelo 3D como todo, desde sua estrutura até a parte visual.

Malhas Trianguladas e Quadriculadas

O Unity suporta ambas as malhas trianguladas e quadriculadas, porém, assim que você importar um modelo 3D, o
Unity vai triangular todos os polígonos da malha. As principais razões porque motores de jogos empregam o uso de
triângulos é justamente por causa da simplicidade e performance. Triângulos possui propriedades que as torna fáceis e
rápidas para o computador processar e exibir. Um triângulo pode ser criado usando três vértices, para criar outro
triângulo basta adicionar mais um vértice, resultando em um quad:
Figura 4.4 - Exemplo de quad criado por dois triângulos

Com um triângulo formado, basta adicionar mais um vértice para gerar um quad composto por dois triângulos. Como o
triângulo é o polígono mais simples, todos os polígonos mais complexos podem ser reduzidos a triângulos, nenhuma
outra forma possui tanta flexibilidade e desempenho. Se você estiver apenas importando um modelo 3D para dentro do
Unity, você não precisa se preocupar em saber como a malha é criada, o Unity já faz o trabalho de construir a malha
dentro do jogo para você.

Exibindo a Malha Triangulada dos Objetos

1. Adicione um Cubo 3D seguindo para o menu GameObject ou o botão Create na janela Hierarchy, em seguida
aponte para 3D Object e selecione Cube.

2. Na barra de controles da janela Scene, no menu do Modo de Exibição, selecione a opção Shaded Wireframe:

Figura 4.5 - Modo de Exibição em Shaded Wireframe

Neste modo de exibição, a cor dos objetos é exibida incluindo as arestas da malha:
Figura 4.6 - Cubo 3D sendo exibido no modo Shaded Wireframe

Objetos 3D Interno

Você já deve estar cansado de lidar com o Cubo 3D que foi utilizado nos exemplos anteriores, mas você já deve ter
notado também que é possível criar outras formas primitivas (cubo, esfera, capsula, cilindro, plano e quad). Para criar
um objeto 3D embutido pelo Unity, siga para o menu GameObject ou o botão Create na janela Hierarchy, em
seguida aponte para 3D Object e selecione uma das formas primitivas disponíveis:

Figura 4.7 - Menu de criação de objetos 3D primitivos


Modelando com Objetos Primitivos

Você pode utilizar os objetos 3D criados pelo Unity para criar algo mais interessante, simplesmente adicione e
posicione os diferentes tipos de objetos 3D de uma maneira que fique parecido com que deseja criar. Para criar algo
mais complexo e detalhado, você vai precisar de um programa de modelagem 3D, mas os objetos 3D criados no Unity
pode servir como objeto temporário que podem ser substituídos quando obter o modelo 3D final. Siga as etapas a seguir
para criar uma cena usando apenas objetos primitivos, resultando em algo parecido como na figura a seguir:

Figura 4.8 - Cena utilizando apenas objetos primitivos

Criando Um Personagem Usando Cubos 3D

1. Antes de qualquer coisa, crie um novo projeto ou cena.

2. Adicione um Cubo 3D, em seguida renomeie para “Cabeça”, altere o componente Transform para as
coordenadas: Posição (0, 1.55, 0), Rotação (0, 0, 0) e Escala (1, 0.7, 1.2).

3. Adicione um Cubo 3D e renomeie para “Corpo”, altere o componente Transform para as coordenadas: Posição
(0, 0.8, 0), Rotação (0, 0, 0) e Escala (0.7, 1, 0.8).

4. Adicione um Cubo 3D e renomeie para “Pernas”, altere o componente Transform para as coordenadas: Posição
(0, 0.15, 0), Rotação (0, 0, 0) e Escala (0.4, 0.3, 0.6).

5. Adicione um Cubo 3D e renomeie para “Braço Esquerdo”, altere seu Transform para as coordenadas: Posição
(0, 0.8, 0.54), Rotação (0, 0, 40) e Escala (0.25, 0.6, 0.25).

6. Duplique o GameObject “Braço Esquerdo” e renomeie para “Braço Direito”, altere sua posição Z para o valor
-0.54.
7. Crie um GameObject vazio e renomeie para “Personagem”. Redefina sua posição para a origem da cena (0, 0,
0).

8. Adicione as partes do personagem que foi criado nas etapas anteriores como filhos do GameObject
“Personagem”.

Confira na figura a seguir como deve ter ficado na Hierarchy:

Figura 4.9 - Parentesco do Personagem

Criando Uma Nuvem Com Esferas

1. Crie um GameObject vazio, renomeie para “Nuvens” e altere sua posição para (-7.89, 8.90, 0.25).

2. Para as nuvens vamos usar algumas esferas, então siga para a janela Hierarchy, clique com o botão direito do
mouse sobre o GameObject “Nuvens”, aponte para 3D Object e selecione Sphere. Dessa forma podemos adicionar
um filho no parentesco no mesmo momento da criação do objeto.

3. Renomeie de Sphere para “Nuvem”.

4. Siga para a janela Inspector e remova o componente Sphere Collider que não será utilizado (clique com o botão
direito do mouse sobre o título do componente e selecione Remove Component):
Figura 4.10 - Removendo o componente "Sphere Collider"

5. Altere o Transform da “Nuvem” para a Posição (0, 0.95, -0.43), Rotação (0, 0, 0) e Escala (1.3,
1.14, 2.35).

6. Duplique a nuvem e altere seu Transform para a Posição (-0.57, 1.38, 0), Rotação (0, 0, 0) e Escala
(1.3, 1, 2.3).

7. Duplique a nuvem anterior e altere seu componente Transform para a Posição (-0.08, 0.71, 1.08), Rotação
(0, 0, 0) e Escala (1.1, 0.84, 1.5).

8. Duplique a nuvem anterior e altere seu componente Transform para a Posição (0.27, 0.71, 0.44), Rotação
(0, 0, 0) e Escala (1.1, 0.84, 1.5).

Confira na figura a seguir como deve ter ficado na Hierarchy:

Figura 4.11 - Conjunto de Nuvens

9. Duplique o GameObject Nuvens (o pai contendo as nuvens) e altere sua posição para as coordenadas (-5.55,
8.90, -5.77). Duplique mais uma vez para criar outro conjunto de nuvens, altere sua posição para (-12.40,
8.90, -4.35).
Criando o Plano do Terreno

1. Adicione um plano seguindo para o menu GameObject ou o botão Create na janela Hierarchy, aponte para 3D
Object e selecione Plane. Em seguida renomeie para “Terreno”.

2. Altere o componente Transform do “Terreno” para a Posição (0, 0, 0), Rotação (0, 0, 0) e Escala para
(10, 1, 10).

Basicamente é isso, se quiser você pode adicionar mais nuvens ou criar outros objetos usando a mesma ideia.

Importando Modelos

Como você viu na seção anterior, é possível criar simples modelos 3D usando as formas primitivas, mas geralmente
você vai precisar importar assets mais complexos que foram criados por outro programa. O Unity suporta arquivos 3D
exportados por outro programa no formato .fbx, .dae, .3ds, .dxf, .obj, e .skp, sendo o .fbx o mais comum. Isso nos
permite trabalhar com praticamente qualquer ferramenta de modelagem 3D.

Importando Modelos no Formato Proprietário


É possível importar arquivos proprietários, por exemplo, o programa de modelagem Blender salva seus
arquivos no formato .blend, você pode importar este arquivo diretamente no Unity, assim, qualquer mudança
feita no Blender, o Unity vai reimportar o arquivo automaticamente para sincronizar as alterações (assumindo
que o Blender também esteja instalado).

Siga as próximas etapas para importar um Modelo 3D no Unity:

Importando Seu Próprio Modelo 3D

1. Crie um projeto ou uma nova cena (“Ctrl + N”).

2. Na janela Project, crie uma pasta chamada “Modelos” no diretório raiz.

3. Localize o arquivo “Macaco.fbx” que está disponível nos arquivos do livro.

Existem três maneiras de importar um asset no Unity:

Com ambas as janelas do gerenciador de arquivos do seu sistema e o editor do Unity aberto lado a lado, arraste o
arquivo de modelo para dentro da janela Project:
Figura 4.12 - Importando um modelo 3D arrastando de outra pasta

Copie e cole o arquivo de modelo para dentro do diretório “Assets > Modelos” usando o gerenciador de arquivos
do seu sistema. Assim que você voltar para o Unity, o asset será detectado e importado automaticamente:

Figura 4.13 - Importando um modelo 3D copiando na pasta do projeto

Siga para o menu Assets e selecione a opção Import New Asset. Navegue até o local onde se encontra o modelo
3D, selecione-o e clique em Import:
Figura 4.14 - Importando um modelo 3D usando o menu principal

Maneiras de Importar um Asset


As maneiras utilizadas anteriormente para importar um modelo 3D são as mesmas etapas para importar
qualquer tipo de asset suportado pelo Unity.

Caso a importação tenha ocorrido normalmente, você vai ver na janela Project algo parecido como na figura a seguir:

Figura 4.15 - Modelo 3D importado para o projeto do Unity

4. Para adicionar o Modelo 3D na origem da cena, clique no asset “Macaco” e arraste-o para dentro da janela
Hierarchy.

Repare que o GameObject do Modelo 3D já contém o componente Mesh Filter que define a malha do modelo 3D e o
componente Mesh Renderer utiliza a malha definida no Mesh Filter para renderizar (exibir) o modelo 3D na cena.

Importando Modelos da Loja de Assets

Se você não é um artista 3D ou quer apenas economizar tempo, uma maneira de obter Modelos 3D é utilizando a Loja
de Assets:

Importando Modelos da Loja de Assets

1. Crie uma nova cena (“Ctrl + N”).

2. Siga para a barra de busca da janela Project e digite robot t:Model (a opção t: serve para filtrar assets apenas
por tipo).

3. Por padrão a busca é realizada no projeto local, para pesquisar na loja, clique no botão Asset Store:

Figura 4.16 - Filtrando busca por modelos

4. Na seção Free Assets, selecione uma das versões do modelo “Robot Kyle”, por exemplo, o “Space Robot
Kyle”.

5. Na janela Inspector, clique no botão Import Package.

Se você não estiver conectado com sua conta do Unity, uma janela será exibida pedindo para você inserir suas
credenciais.

6. Após finalizado a transferência, a janela Import Unity Package será exibida, deixe tudo marcado e clique no
botão Import.
Uma pasta chamada “Robot Kyle” será criada na raiz do projeto (diretório Assets).

7. Entre no diretório “Assets > Robot Kyle > Model” e adicione o modelo Robot Kyle na cena:
Figura 4.17 - Modelo Robot kyle

Como já mencionado antes, é possível pesquisar assets da loja diretamente na janela Project, siga as etapas a seguir
para importar um modelo 3D de exemplo:

Veja que dentro do diretório Robot Kyle existe uma pasta chamada Materials e uma chamada Textures, dentro
contém assets separados, mas que fazem parte do Modelo 3D, você vai saber mais sobre materiais e texturas na
próxima seção.
Materiais, Shaders e Texturas

Os gráficos do jogo são constituídos a partir de materiais, shaders e texturas, todos os três possui uma relação
próxima e funcionam em conjunto:

Shaders: São códigos de scripts contendo o algoritmo utilizado para renderizar (exibir) a cor de cada pixel na
tela.
Materiais: Define como uma superfície é exibida, isso é feito selecionando um shader para o material. As opções
disponíveis para o material dependem das propriedades expostas pelo shader selecionado.
Texturas: É simplesmente uma imagem referenciada pelo material, dessa forma um shader pode utilizar imagens
para calcular a cor da superfície de uma malha.

Shaders

Todos os jogos podem conter uma grande variedade de superfícies: madeira, metal, borracha, plástico, vidro, etc. Os
shaders basicamente expõe propriedades e texturas para o material, dessa forma podemos configurá-lo de diversas
maneiras e fazer com que cada material possua sua própria aparência.

Sobre Shaders
O conceito de shaders vai fazer mais sentido na seção “Materiais” e “Parâmetros do Shader Padrão”.

Escrever um shader está fora do escopo deste livro, porém, o shader interno disponível pelo Unity é ideal para a
maioria dos objetos, especialmente quando você está começando.

Texturas

Texturas são imagens que são aplicadas nas malhas 3D, dessa forma um material pode referenciar uma textura e tornar
uma malha branca ou sem cor em um objeto 3D cheio de detalhes:

Figura 4.18 - Textura de tijolos que pode ser aplicado em uma parede

As texturas em um Modelo 3D são aplicadas usando materiais, o processo de aplicar uma textura em uma malha é
chamado de Mapeamento de Textura (ou Texturização). Este processo projeta um mapa de textura em uma malha
3D que diz exatamente como uma textura plana deve cobrir a malha. Para criar um mapa de textura utilizamos uma
técnica chamada “Desdobramento” que nos permite abrir uma malha em um plano 2D. Desta forma, quando uma
malha é desdobrada, podemos colorir e criar a textura desejada usando ferramentas como Photoshop e projetar o mapa
de textura de volta na malha. Um exemplo de desdobramento é o Modelo 3D Robot Kyle que importamos antes, dentro
da pasta Robot Kyle, entre na pasta Textures e abra a imagem Robot_Color, veja como as partes da malha são
arranjadas em uma imagem plana:

Figura 4.19 – Na esquerda o mapa de textura e na direita a mesma textura aplicada no modelo

O Unity suporta todos os formatos de imagem comum que pode ser utilizado como textura, sendo eles BMP, XR, GIF,
HDR, IFF, JPG, PICT, PNG, PSD, TGA e TIFF. Para importar uma imagem como textura, o projeto deve estar no
modo 3D, acesse o menu Edit e selecione Project Settings, em seguida na categoria Editor, verifique em Default
behaviour mode se a propriedade Mode está com a opção 3D selecionada, caso esteja 2D, as imagens serão
importadas como Sprites.

Diretório para Texturas em Geral


Normalmente um modelo 3D já vem com uma pasta Textures separada, as vezes a textura está embutida no
próprio modelo. De qualquer maneira, recomendo criar uma pasta chamada Texturas na raiz do projeto
especialmente para conter os arquivos de texturas em geral.

Criar modelos 3D, texturas e gerar desdobramentos está longe do escopo deste livro, porém, um conhecimento
preliminar de como as coisas funcionam deve ser o suficiente para continuar aprendendo Unity. Para obter mais
informações, acesse os seguintes endereços no site da Wikipédia:

https://pt.wikipedia.org/wiki/Mapeamento_de_textura

https://pt.wikipedia.org/wiki/Mapeamento_UV

Materiais

Materiais basicamente são um contêiner para shaders e texturas que são aplicados nos modelos. A melhor maneira de
entender como os materiais são criados e aplicados é praticando:
Criando Um Material

1. Crie uma nova cena (“Ctrl + N”).

2. Adicione uma esfera que vai servir de exemplo (menu GameObject ou botão Create na janela Hierarchy,
aponte para 3D Object e selecione Sphere).

Você vai perceber que a esfera possui uma cor esbranquiçada, isso significa que todos os objetos 3D criados no Unity
possuem um material padrão.

3. Antes de criar um material, crie uma pasta chamada “Materiais” no diretório raiz do seu projeto, em seguida
entre nesta pasta.

4. Para criar um material, clique no botão Create que se encontra no canto superior esquerdo da janela Project e
selecione a opção Material. Renomeie para “MeuMaterial” ou qualquer nome que descreva melhor o material a ser
criado.

5. Para aplicar um material, primeiro selecione a esfera que foi criado na etapa 2, agora na janela Inspector e no
componente Mesh Renderer, expanda a propriedade Materials, no parâmetro Element 0 (o primeiro material),
clique no pequeno círculo para abrir a janela de seleção de material, selecione o material “MeuMaterial” e feche a
janela:

Figura 4.20 - Aplicando um material

Lembrando que a outra maneira de aplicar um material rapidamente é clicando e arrastando o asset do material da
janela Project até a caixa do material na janela Inspector:
Figura 4.21 – Outra maneira de aplicar um material

Vídeo 4.1 - Criando e aplicando um material

Repare que ao aplicar o novo material, a esfera não muda de aparência devido às configurações padrões do shader.
Você pode alterar o shader atual do GameObject selecionado expandindo suas propriedades na janela Inspector:

Figura 4.22 - Expandindo as propriedades do shader do material

As propriedades do shader também podem ser alteradas selecionando o asset do material na janela Project, as mesmas
propriedades serão exibidas na janela Inspector.

Alteração do Shader do Material


Todos os GameObjects utilizando o shader serão afetados pelas alterações.
O Unity também possui outros shaders interno que pode ser selecionado como indicado na Figura a seguir em qualquer
material atualmente selecionado, sendo que a opção Standard é o shader padrão:

Figura 4.23 - Menu de seleção de shader com o shader padrão (Standard)

Entretanto, por questões de aprendizado, recomendo focar nos parâmetros do shader padrão (Standard) que são
essenciais para aprender qualquer outro shader.
Parâmetros do Shader Padrão
O shader do material padrão do Unity possui diferentes parâmetros que à primeira vista pode parecer um pouco
intimidador e complicado, mas assim que você aprender o básico, o restante vai ser mais fácil de entender.

Confira na tabela a seguir uma descrição de cada parâmetro:

Tabela 4.1 - Parâmetros do Shader padrão

O shader padrão possui 4 modos diferentes de renderização que pode ser selecionado no parâmetro Rendering Mode:
Figura 4.24 - Opções do "Rendering Mode"

Opaque: Esta é a opção padrão, é utilizada para renderizar objetos opacos com aparência sólida e sem
transparência.
Cutout: Permite renderizar objetos com partes completamente transparentes ou opacas. Este modo não suporta
áreas semitransparentes, ou seja, a textura deve possuir partes 100% transparentes ou 100% opacas. Esta opção é
útil para renderizar folhas e gramados.
Fade: O nível de transparência da textura pode ser utilizado para criar um efeito de desaparecimento como em um
holograma.
Transparent: Permite renderizar (exibir) objetos transparentes e semitransparentes como vidros, garrafas
plásticas, etc.

Repare que se você alterar o modo de renderização, o GameObject atual não vai mudar de aparência, isso acontece
porque o modo de renderização é afetado conforme as configurações no parâmetro Albedo.

Albedo

O parâmetro Albedo define a cor e transparência do material. Para definir uma cor sólida, clique na pequena caixa de
cor logo ao lado do nome do parâmetro para exibir a janela de seleção de cor, em seguida selecione uma cor usando a
roda de cor e feche a janela.

Figura 4.25 - Alterando a cor do material

A cor será aplicada no modelo inteiro:


Figura 4.26 - Esfera vermelha

Especificar uma cor no parâmetro Albedo pode ser útil em alguns casos, mas a maneira mais recomendada e comum é
utilizando uma textura que representa as cores da superfície do objeto.

Definindo Uma Textura Para o Material

1. Importe a textura “TexturaDeExemplo.png” que se encontra nos arquivos do livro para o seu projeto do Unity.
Essa textura é parecida com um tabuleiro de xadrez.

2. Com um material selecionado no Unity, no parâmetro Albedo, clique no pequeno círculo ao lado do nome do
parâmetro para exibir a janela de seleção de textura:

Figura 4.27 - Selecionando textura para o parâmetro "Albedo"

3. Selecione a textura “TexturaDeExemplo” e feche a janela.

Outra maneira de selecionar a textura é clicando e arrastando a textura da janela Project até a pequena caixa logo ao
lado do nome do parâmetro:
Figura 4.28 - Outra maneira de definir uma textura

Vídeo 4.2 - Definindo uma textura

Com a textura aplicada, agora você pode ver uma prévia do material no painel de informações do asset que se encontra
na parte inferior da janela Inspector:

Figura 4.29 - Prévia da textura na janela Inspector

Clique e segure com o botão esquerdo do mouse na prévia e mova o cursor para olhar ao redor do modelo (por padrão
uma esfera), você pode alterar o modelo da prévia clicando no ícone indicado na figura a seguir:
Figura 4.30 - Alterando o modelo da prévia

O resultado também pode ser visto na janela Scene, onde a esfera de exemplo deve possuir uma textura aplicada:

Figura 4.31 - Esfera com uma textura aplicada

Textura Estranha
Se você tentar aplicar uma textura não mapeada em um modelo, igual como foi feito nas etapas anteriores, pode
ser que a textura fique estranha. Como mencionado antes, a textura é aplicada desdobrando o modelo, caso
contrário, o modelo 3D não vai saber exatamente como aplicar a textura na malha.

Veja que se você alterar a cor do parâmetro Albedo enquanto possui uma textura definida, a cor do material será
multiplicada com a cor da textura:
Figura 4.32 - Esfera com uma textura e cor vermelha

Para utilizar apenas a cor da textura, a cor do parâmetro Albedo deve estar 100% branco, ou seja, os parâmetros RGBA
deve possuir o valor 255, enquanto que o canal A (alfa ou transparência) define a transparência inteira do material:
Figura 4.33 – Esfera com uma textura e cor 100% branca

Modo de Renderização

A textura do exemplo anterior possui partes transparentes, mas como você deve ter notado, o material está
completamente opaco, isso acontece quando o modo de renderização (Rendering Mode) está com a opção Opaque
selecionada. Para conferir o canal alfa da textura, selecione a mesma na janela Project e seguindo na janela Inspector,
no painel de informações do asset, clique no pequeno botão com a letra A como indicado na figura a seguir:

Figura 4.34 - Exibindo o canal alfa da textura


O nível de transparência é representado pela cor branca e preto, sendo que totalmente branco significa completamente
opaco e totalmente preto significa completamente transparente:

Figura 4.35 - Canal alfa da textura

Cutout

Para renderizar as partes transparentes da textura do exemplo, altere o parâmetro Rendering Mode para Cutout:

Figura 4.36 - Alterando o modo de renderização do shader

Na figura a seguir você pode conferir a mesma esfera do exemplo anterior só que com “buracos” devido à transparência
da textura:
Figura 4.37 - Esfera no modo de renderização em Cutout

Sabendo disso, agora podemos criar uma cerca sem precisar modelar todos os arames, crie um quad e aplique uma
textura com partes transparentes:

Criando Uma Cerca Usando o Modo Cutout

1. Salve a cena atual e crie uma nova cena (“Ctrl + N”).

2. Crie um Quad seguindo para o menu GameObject, em seguida aponte para 3D Object e selecione Quad.

3. Renomeie para “Arames” e redefina suas coordenadas.

4. Dentro da pasta Modelos crie uma pasta chamada Cerca, dentro desta pasta crie mais três pastas chamada
Materiais, Prefabs e Texturas.

5. Importe a textura “cerca_cor.png” dos arquivos do livro para dentro da pasta “Assets > Modelos > Cerca >
Texturas”.

6. Dentro da pasta “Assets > Modelos > Cerca > Materiais” crie um material chamado “CercaMat” (acesse o
menu de criação da janela Project e selecione Material).

7. Defina o material CercaMat para o GameObject Arames:

Figura 4.38 - Definindo o material da cerca

8. Com o material CercaMat selecionado, defina a textura cerca_cor para o parâmetro Albedo:
Figura 4.39 - Definindo uma textura para o parâmetro Albedo

Repare na janela Scene que o objeto Arames está com partes brancas onde na verdade seria as partes transparentes.

9. Para exibir as partes transparentes da textura, altere o parâmetro Rendering Mode para a opção Cutout:

Figura 4.40 - Alterando o modo de renderização

Se a textura possuir níveis de transparência variado, utilize o slider do parâmetro Alpha Cutoff para ajustar a
transparência.

10. Para remover as partes esbranquiçadas ao redor das áreas transparentes da textura, ajuste o parâmetro Alpha
Cutoff para o valor 0.8.

Teremos o seguinte resultado:

Figura 4.41 - Cerca criada utilizando apenas um quad e uma textura


Repare que se você rotacionar a visão da cena para o outro lado da Cerca, nada será exibido. Isso acontece porque o
shader padrão do Unity exibe apenas um lado da face do objeto, neste caso, para resolver este problema podemos
duplicar o objeto atual e rotacionar para o outro lado.

11. Duplique o GameObject Arames. Em seguida na janela Inspector, no componente Transform, altere o
parâmetro Rotation para as coordenadas (180, 0, 0).

É possível ajustar o quanto a textura é repetida usando o parâmetro Tiling na seção Main Maps do shader padrão,
dessa forma podemos estender o arranjo dos arames.

12. Altere o parâmetro Tiling (na seção Main Maps) para o valor 1.5 em ambas as coordenadas:

Figura 4.42 - Repetindo a textura

Resultado após alterar o parâmetro Tiling:

Figura 4.43 - Da esquerda para direita: Tiling (1, 1) e (1.5, 1.5)

Vídeo 4.3 - Criando uma cerca usando o modo Cutout


13. Para aumentar o cercado ainda mais, altere a escala de ambos os Arames para os valores (8, 8, 1). Em
seguida altere Tiling novamente para compensar a escala atual, use o valor 4 para ambos x e y.

14. Crie um GameObject vazio (“Ctrl + Shift + N”), em seguida renomeie para “Cerca” e redefina suas
coordenadas.

15. Adicione as duas cópias dos Arames como filhos da Cerca (selecione ambos os Arames na janela Hierarchy e
arraste-os para dentro do GameObject Cerca).

16. Crie um Prefab da Cerca arrastando o mesmo da janela Hierarchy para dentro da janela Project, no diretório
“Assets > Modelos > Cerca > Prefabs”.

17. Repare que a textura do exemplo foi feita para ser repetida, isso significa que você pode duplicar o GameObject
para aumentar ainda mais o arranjo das cercas. Use a tecla “Ctrl” para mover a cópia 1 unidade por vez (assumindo a
configuração atual).

Na figura a seguir você pode conferir 2 cópias da Cerca:

Figura 4.44 - Posicionando as cópias da Cerca para criar uma cerca maior

Fade

Para esmaecer o material, altere o parâmetro Rendering Mode para a opção Fade, em seguida na propriedade Albedo,
clique na caixa de cor para abrir a janela de seleção de cor e defina a transparência reduzindo o valor do parâmetro A:
Figura 4.45 - Cor da esfera com o canal alfa em 120

Transparent

Se o seu material possuir níveis diferentes de transparência, utilize o Rendering Mode no modo Transparent e defina
uma textura com níveis diferentes de transparência. Neste modo, as partes transparentes do material é afetado pela
iluminação e recebe reflexão igual como acontece com um copo de vidro:

Figura 4.46 - Esfera no modo de renderização em "Transparent"

Metalic

O parâmetro Metalic define a quantidade de luz refletida pelo material que pode deixá-lo com uma aparência
“metálica”, isso não quer dizer que este parâmetro é exclusivo para modelos ou superfícies metálicas, o nome
simplesmente é uma forma de identificar como o reflexo da luz é exibido. Já o valor Smoothness define o quão suave é
o material, o valor 0 deixa a luz na superfície de forma plana e espalhada em várias direções, já um valor alto deixa o
material mais brilhante e com o reflexo concentrado.

Altere os parâmetros e confira uma prévia em tempo real:


Figura 4.47 – Metalic e Smoothness no máximo

É possível também usar um mapa de textura contendo níveis diferentes de Metalic e Smoothness, um mapa de textura
simplesmente descreve quais partes de um material é de metal e quais partes não são de metal. Veja na figura a seguir
um exemplo de mapa de textura para o parâmetro Metalic:
Figura 4.48 - Exemplo de mapa de textura "Metalic"

Pixeis brancos são áreas metálicas, enquanto pixeis pretos são áreas não-metálicas. O valor de Smoothness é definido
no canal alfa do mesmo mapa de textura. O slider Smoothness também pode ser utilizado para multiplicar com o valor
da textura.

Normal Map

Normal Map é um tópico um pouco mais avançado, mas seu funcionamento é bem simples de entender. Basicamente
um normal map descreve a direção da luz onde é calculado o ângulo das sombras na textura que nos permite simular
um relevo ou endentação na superfície sem a necessidade de adicionar mais polígonos na malha. Dessa forma podemos
aumentar o desempenho do nosso jogo, pois muitos detalhes podem ser “modelados” usando um normal map em vez de
adicionar os detalhes diretamente na malha do Modelo 3D. Um exemplo de normal map pode ser conferido no modelo
Robot Kyle que foi importado antes, siga para a pasta Robot Kyle > Textures e abra a textura “Robot_Normal”:

Figura 4.49 - Exemplo de mapa de textura "normal map"

Repare que os detalhes na textura definem as endentações e relevos. Esta textura é definida usando o parâmetro
Normal Map do material padrão:
Figura 4.50 - Parâmetro "Normal Map"

Confira na figura a seguir um exemplo de modelo com e sem o normal map aplicado:

Figura 4.51 - Da esquerda para direita, com e sem normal map


Definindo o Material de um Modelo 3D

Praticando é a melhor maneira de entender como os materiais funcionam, nesta seção vamos obter um modelo sem cor
e aplicar as texturas específicas. Para este exemplo, vamos utilizar o modelo 3D “PBR low poly Magine Gun MG61”
que pode ser adquirido gratuitamente na “Loja de Assets” do Unity:

Figura 4.52 - PBR low poly Magine Gun MG61

O mesmo modelo disponibilizado nos arquivos do livro não contém as texturas aplicadas, mas todos os créditos são do
autor oficial do modelo. Na figura a seguir você pode comparar antes e depois de aplicar as texturas:

Figura 4.53 - Resultado final, antes e depois de aplicar as texturas

Ao importar um modelo 3D, o material e as texturas não estão definidos, a não ser que você tenha baixado o modelo
diretamente da Loja de Assets que já deve conter o Prefab pronto. Caso contrário, você vai precisar aplicar as texturas
manualmente no material exatamente como descrito nas etapas a seguir:
Definindo o Material de Um Modelo 3D

1. Crie um novo projeto ou uma nova cena.

2. Importe o diretório MG61 contido nos arquivos do livro para a pasta Modelos do seu projeto do Unity.

3. Dentro da pasta "Assets > Modelos > MG61 > Prefab", adicione na origem da cena o Prefab “mg61_mesh”.

Repare que este modelo possui o material padrão aplicado, que é o material com uma cor esbranquiçada.

4. Dentro da pasta MG61, crie uma pasta chamada Materiais.

5. Dentro da pasta Materiais do MG61, crie um material (acesse o menu Create na janela Project e selecione
Material), em seguida renomeie o novo material para “Mg61Mat”.

6. Seguindo na janela Hierarchy, expanda o parentesco do GameObject mg61_mesh e dentro você vai encontrar as
diferentes partes da arma:

Figura 4.54 - Parentesco do GameObject mg61_mesh

O GameObject mg61_mag é o pente de munição. Dentro do parentesco de mg61_gun encontramos as outras partes,
sendo que mg61_ejection é o mecanismo que ejeta as balas, mg61_gun é o corpo da arma e mg61_trigger é o gatilho.

7. Entre no Modo Prefab do GameObject mg61_mesh.

8. Todas as partes da arma utilizam o mesmo material, então selecione as quatro partes na janela Hierarchy
(mg61_mag, mg61_ejection, mg61_gun e mg61_trigger).

9. Na janela Inspector, no componente Mesh Renderer, expanda a propriedade Materials, verifique se Size possui
o valor 1 (pelo menos 1 material) e defina no Element 0 (o primeiro material) o material “Mg61Mat” que foi criado
antes:

Figura 4.55 - Material selecionado


10. Selecione o material “Mg61Mat” na janela Project, agora na janela Inspector, defina no parâmetro Albedo a
textura mg61_albedo que se encontra na pasta Texturas do modelo.

Selecionando e Definindo uma Textura


Clique no pequeno botão com círculo logo ao lado do nome do parâmetro Albedo para abrir a janela de seleção
de textura, ou arraste a textura para dentro da pequena caixa ao lado do nome do parâmetro Albedo.

Repare que já é possível ver na cena a textura aplicada, porém, a arma está com uma aparência muito opaca.

11. Para deixar o material um pouco mais escuro e menos opaco, altere a cor do parâmetro Albedo para o valor
RGB (204, 204, 204), resultando em uma cor cinza claro.

12. Para deixar a arma com uma aparência metálica, defina no parâmetro Metalic o mapa de textura mg61_metalic.

Repare que assim que um mapa de textura é definido no parâmetro Metalic, o slider do parâmetro é removido, pois
agora o valor é controlado pela textura carregada, enquanto o slider do parâmetro Smoothness pode ser utilizado para
multiplicar com o valor do mapa da textura.

13. Certifique-se que o parâmetro Smoothness possua o valor 1, isso vai deixar o material brilhante.

Para completar os detalhes, podemos utilizar um normal map.

14. No parâmetro Normal Map, defina a textura mg61_normal.

Vídeo 4.4 - Definindo o material de um Modelo 3D


Parte 5: Ambiente Externo com o
Gerador de Terreno

Neste Capítulo você vai aprender:

O que são terrenos


Criar um terreno usando o Gerador de Terrenos do Unity
Esculpir o formato do terreno utilizando diversas ferramentas
Colorir o terreno com diversas texturas
Adicionar detalhes de vegetação, como gramado, plantas, etc.
Plantar árvores
Expandir o terreno

Todo jogo possui alguma forma de mundo onde o personagem pode percorrer e interagir com o cenário. Em um
ambiente externo, podemos chamar o nível de terreno. Um terreno pode constituir de montanhas, vegetações densas,
pântanos, etc., com o sistema de Terreno do Unity você pode criar vastas paisagens para os seus jogos de maneira
rápida e interativa.
Criando e Preparando o Projeto

Para começar este capítulo, recomendo criar um novo projeto para evitar conflito ou confusão com os exemplos
anteriores. Com o Unity Hub aberto, siga as etapas a seguir:

Criando Um Novo Projeto 3D

1. Clique no botão New.

2. No campo Project Name, defina o nome “Meu Terreno 3D”.

3. No campo Location defina o local onde o projeto será salvo.

4. Desabilite a análise do Unity (“Unity Analytics”).

5. No menu Template, escolha o modelo 3D.

6. Para finalizar, clique em Create project e aguarde até que o Unity crie os arquivos do seu projeto.

Figura 5.1 - Criando um novo projeto 3D

Otimizando o Cálculo da Iluminação

Esculpir um terreno requer bastante recursos do sistema, para aliviar esta carga, podemos realizar uma configuração
básica de iluminação para aumentar o desempenho do Unity durante o processo de criação do terreno.

Otimizando o Cálculo da Iluminação


1. Siga para o menu Window, aponte para Rendering e selecione Lighting Settings (Configurações da
Iluminação). Na janela que é exibida, na seção Scene, percorra até a categoria Lightmapping Settings
(Configurações do Mapa de Iluminação) e altere o parâmetro Lightmap Resolution (Resolução do Mapa de
Iluminação) para o valor 0.1:

Figura 5.2 - Alterando a resolução do mapa de iluminação

2. Desative o cálculo automático da luz desmarcando a caixa de seleção Auto Generate que se encontra na seção
Debug Settings, na parte inferior da janela:

Figura 5.3 - Opção Auto Generate desativada

Redefinir configurações
As configurações anteriores são recomendadas apenas durante a edição do terreno, ou seja, não esqueça de
redefini-las quando terminar de editar.

Assets Necessários

Os assets que serão utilizados neste capítulo fazem parte do pacote “Fantasy Landscape” criado por Pxltiger e pode
ser obtido usando a Loja de Assets:

Figura 5.4 - Asset "Fantasy Landscape"

Para facilitar o processo, empacotei apenas o necessário, inclusive alguns extras, siga as etapas a seguir para importar
todos os assets necessários para este capítulo:

Importando os Assets Necessários

1. Para importar todos os assets para este capítulo, utilize o seguinte pacote disponibilizado nos arquivos do livro:
“MeuTerrenoInicial.unitypackage”.

Repare que o arquivo está no formato “.unitypackage”, é um arquivo mais conveniente para empacotar diferentes
assets do Unity e importá-los em qualquer projeto, funciona de maneira semelhante como em um arquivo ZIP ou RAR.

Importando Assets
Ao importar assets utilizando a Loja de Assets ou o arquivo “.unitypackage”, os arquivos “.meta” são
importados também, isso significa que as configurações dos assets realizadas pelo autor do pacote serão
mantidas no seu projeto também.

2. Para importar um pacote “.unitypackage”, siga para o menu Assets, aponte para Import Package, selecione
Custom Package e abra o arquivo de pacote.

Dependendo do seu sistema, você também pode clicar duas vezes sobre o arquivo “.unitypackage” usando o
gerenciador de arquivos do seu sistema.

3. Na janela de importação que é exibida, todos os assets já estarão selecionados por padrão, apenas clique em
Import para importar tudo para o seu projeto:

Figura 5.5 - Importando os assets necessários


Gerando e Configurando o Terreno

Nesta seção você vai aprender a utilizar as ferramentas iniciais que são mais que suficientes para começar a criar o
mundo do seu jogo, depois quando necessário você pode ir completando outras áreas do cenário.

Adicionando o Objeto de Terreno

Todo terreno no Unity começa com uma superfície plana onde você pode esculpir para gerar a forma desejada. Siga as
próximas etapas para adicionar um objeto de Terreno:

Adicionando Um Objeto de Terreno

1. Acesse o menu GameObject ou o botão Create na janela Hierarchy, aponte para 3D Object e selecione
Terrain.

Veja que um GameObject chamado “Terrain” é adicionado na janela Hierarchy. Além disso, um asset chamado “New
Terrain” é adicionado na raiz do seu projeto, este asset contém todas as informações e modificações realizadas no
terreno.

2. Renomeie ambos o asset “New Terrain” e o GameObject “Terrain” para “Meu Terreno” ou outro nome que
preferir.

3. Mova o asset do terreno para a pasta “Assets > Terreno” (diretório adicionado automaticamente quando você
importou os assets necessários).

Configuração Inicial do Terreno

Assim que o objeto do terreno é adicionado, antes de qualquer coisa é sempre recomendável realizar algumas
configurações iniciais. Algumas destas configurações como a resolução do terreno deve ser feita antes de começar a
esculpir, caso seja realizada futuramente, o terreno vai sofrer sérias alterações visuais, podendo até perder todo o
trabalho atual.

Resolução

Se você navegar na janela Scene, repare que o tamanho do terreno é relativamente grande, mas é possível alterar a
resolução do terreno para algo mais manejável para o nosso exemplo.

Siga as etapas a seguir para alterar a resolução do terreno:

Alterando a Resolução do Terreno

1. Selecione o GameObject Meu Terreno.

2. Siga para a janela Inspector e no componente Terrain, selecione Terrain Settings (configurações do terreno), é
o último botão que possui um ícone de engrenagem:
Figura 5.6 - Configurações do Terreno

Na seção Mesh Resolution (Resolução da Malha), veja que por padrão os parâmetros Terrain Width e Terrain
Length (largura e comprimento do terreno respectivamente) possui o valor 500. Normalmente o valor padrão é pouco
para a maioria dos casos, mas como você está aprendendo a utilizar as ferramentas, é recomendável trabalhar com um
terreno menor.

3. Altere ambos os parâmetros Terrain Width e Terrain Length para o valor 200:

Figura 5.7 - Alterando a resolução do terreno

Os demais parâmetros da seção Mesh Resolution por enquanto podem ser ignorados, elas modificam a maneira como
as texturas são exibidas e o desempenho do terreno.

Iluminação

Repare que o terreno possui uma textura padrão no formado de xadrez, porém, devido à configuração que foi feita para
otimizar a iluminação, a cor atual do ambiente está um pouco escura:
Figura 5.8 - Superfície padrão do terreno

Recalculando a Iluminação da Cena

1. Siga novamente para o menu Window, aponte para Rendering e selecione a opção Lighting Settings.

2. Na parte inferior da janela, na seção Debug Settings, clique no botão Generate Lighting para recalcular a
iluminação manualmente:

Figura 5.9 – Recalculando a iluminação manualmente

Aguarde até que finalize e você terá o seguinte resultado:

Figura 5.10 - Superfície padrão do terreno após recalcular a iluminação

Você deve ter notado que ao clicar no botão Generate Lighting foi necessário esperar um pouco até o progresso
finalizar, é por isso que recomendei desativar a opção Auto Generate para evitar que este cálculo seja realizado
automaticamente toda vez que o terreno sofrer alguma alteração, podendo causar lentidão durante a edição do terreno.
Eventualmente quando o terreno estiver mais evoluído, você pode gerar a iluminação novamente sempre quando for
necessário.

Otimizando o uso do processador

Por padrão, os cálculos realizados para gerar o terreno são feitos pelo processador. No entanto, a placa de vídeo é muito
mais rápida para processar gráficos, podemos habilitar uma opção que ajuda a dobrar o desempenho do terreno,
fazendo com que o cálculo pesado seja feito pela placa de vídeo em vez do processador.

Utilizando a Placa de Vídeo Para Gerar o Terreno

1. Acesse as Configurações do Terreno (botão Terrain Settings com ícone de engrenagem).

2. Na seção Basic Terrain (Terreno Básico), ative a opção Draw Instanced (Renderizar Instanciado):

Figura 5.11 - Ativando a opção Draw Instanced


Esculpindo o Terreno

O Unity oferece múltiplas ferramentas para esculpir o terreno, o processo é feito “pintando” o terreno utilizando pincéis
de diferentes formatos e tamanhos. Você pode conferir e selecionar estas ferramentas selecionando o GameObject do
terreno, depois na janela Inspector, dentro do componente Terrain, ative a ferramenta Paint Terrain (pintar o terreno,
o botão com ícone de pincel na barra de ferramentas do terreno):

Figura 5.12 - Ferramenta de pintura do terreno

Em seguida clique no menu de ferramentas de pintura:

Figura 5.13 – Todas as ferramentas de pintura do terreno

Levantar ou Diminuir o Terreno

A ferramenta Raise or Lower Terrain permite Levantar ou Diminuir o Terreno, siga as etapas a seguir para esculpir
o terreno utilizando esta ferramenta:

Levantando ou Diminuindo o Terreno

1. Selecione o GameObject do terreno na janela Hierarchy.

2. Ative a ferramenta Paint Terrain na barra de ferramentas do terreno.

3. Selecione a opção Raise or Lower Terrain.

4. Na seção Brushes (pincéis) selecione um tipo de pincel clicando uma vez sobre uma opção na lista, o pincel
atualmente selecionado possui um fundo azul:
Figura 5.14 - Lista de pincéis disponíveis

Se você já utilizou programas de edição de imagem, você já deve saber como os pincéis funcionam, sua utilização é
parecida no terreno, ou seja, o formato gerado no terreno depende do pincel selecionado e da maneira como é pintado.
Por exemplo, dependendo do pincel é possível esculpir áreas mais suaves, enquanto que um pincel mais “duro” permite
esculpir áreas mais nítidas ou com mais pressão.

5. Selecione o tamanho do pincel utilizando o parâmetro Brush Size. Quanto maior o tamanho do pincel, maior será
a área do efeito da escultura.

6. Utilize o parâmetro Opacity para definir a força do efeito de escultura.

A melhor maneira de saber qual pincel utilizar e qual configuração definir, é praticando e descobrindo o resultado. Na
figura a seguir você pode conferir um exemplo inicial que permite esculpir de forma mais suave (pincel suave, Brush
Size com valor 25 e Opacity com valor 4):

Figura 5.15 - Configuração de escultura de terreno

Com o pincel configurado, passe o cursor do mouse sobre o terreno na cena e você vai ver uma prévia do pincel que
pode mudar dependendo das configurações escolhidas (tipo do pincel, tamanho e força), dessa forma você tem uma
ideia de como vai ficar o terreno com o pincel atual:

Figura 5.16 - Prévia do pincel selecionado

7. Para levantar o terreno, clique e mantenha segurado o botão esquerdo do mouse sobre o terreno e mova o
cursor. Para diminuir, mantenha a tecla “Shift” pressionada e siga o mesmo processo. O efeito de pintura no terreno é
feito de maneira cumulativa, ou seja, quanto mais você pintar uma área, mais forte será o efeito da escultura naquela
área:

Figura 5.17 - Esculpindo o terreno

Estampando o Terreno
Clique apenas uma vez sobre uma área para aplicar o efeito inicial do pincel, seria como se estivesse
“estampando” o terreno.
Vídeo 5.1 - Levantar ou Diminuir o Terreno

Definindo a Altura

A próxima ferramenta que podemos usar é a Set Height (definir altura) que pode ser acionada selecionando a seguinte
opção no menu das ferramentas de pintura:

Figura 5.18 - Selecionando a ferramenta Set Height

Esta ferramenta funciona de maneira similar como a ferramenta Levantar ou Diminuir o Terreno (Raise or Lower
Terrain), a diferença é que ela pinta o terreno até uma altura especificada no parâmetro Height (altura):

Figura 5.19 - Configurações da ferramenta "Set Height"

Você também pode escolher o tipo do pincel (Brushes), tamanho do pincel (Brush Size) e a força da ferramenta
(Opacity).

Utilização Básica da Ferramenta Set Height


Clique com o botão esquerdo do mouse sobre o terreno para esculpir na altura especificada, ou mantenha a
tecla “Shift” pressionada e clique sobre uma área do terreno para obter uma amostra e definir o parâmetro
Height conforme a posição atual do clique. Se a altura do terreno for menor que a altura especificada no
parâmetro Height, o terreno será levantado. Agora se a altura do terreno for maior que a altura especificada, o
terreno será diminuído.

Esta ferramenta pode ser bastante útil para criar superfícies planas sobre um terreno irregular:
Figura 5.20 - Superfície plana sobre o terreno

Pratique alterando o valor de Height e pinte em conjunto com a ferramenta Levantar ou Diminuir o Terreno, assim
você consegue ter uma ideia melhor do funcionamento das ferramentas.

Nivelando o Terreno

A ferramenta Set Height também permite nivelar todo o terreno em uma certa altura utilizando o botão Flatten como
indicado na figura a seguir:

Figura 5.21 – Nivelar o terreno usando o botão “Flatten”

Nivelar o terreno facilita criar colinas e vales com base na altura em que o terreno foi nivelado

Nivelar o Terreno
Nivelar o terreno vai levantar ou diminuir todo o terreno na altura especificada, esta opção deve ser utilizada
antes de começar a esculpir o terreno, pois o mesmo será redefinido para o formato plano, descartando todo o
trabalho atual.
Siga as etapas a seguir para nivelar o terreno do exemplo:

Nivelando o Terreno e Esculpindo o Caminho

1. Com a ferramenta Set Height selecionada, altere o parâmetro Height para o valor 15 e clique no botão Flatten.

Isso vai levantar todo o terreno na altura especificada deixando-o plano novamente.

2. Altere o valor de Height para 0, dessa forma você pode afundar o terreno.

3. Escolha um pincel suave, ajuste Brush Size para 50 e altere Opacity para 35. Pinte um caminho onde um
personagem poderia caminhar, algo parecido como na figura a seguir:

Figura 5.22 - Afundando o terreno após nivelá-lo

4. Agora utilize a ferramenta Levantar ou Diminuir o Terreno para criar algumas montanhas ao arredor do
caminho. Tente criar algo parecido como na figura a seguir, não precisa ser exatamente igual, experimente esculpir o
terreno da melhor forma como você achar interessante:
Figura 5.23 - Exemplo de terreno nivelado e esculpido

5. Para deixar o caminho um pouco irregular, selecione a ferramenta Levantar ou Diminuir o Terreno, em seguida
selecione um pincel com falhas, deixe Opacity com o valor 1 e Brush Size grande o suficiente para pintar a largura
do caminho, pinte passando apenas uma vez.

Vídeo 5.2 - Definindo a altura do terreno

Suavizando a Superfície

A ferramenta Smooth Height pode ser acionada selecionando a seguinte opção no menu das ferramentas de pintura:

Figura 5.24 - Ferramenta "Smooth Height"

Esta ferramenta permite suavizar as arestas ou “alisar” a superfície do terreno, experimente utilizar a ferramenta
Smooth Height para suavizar as arestas no canto do caminho:
Figura 5.25 - Resultado da ferramenta "Smooth Height"

Para ajustar a direção da suavização, utilize o parâmetro Blur Direction, o valor -1 suaviza apenas para baixo, o valor
1 apenas para cima e o valor 0 padrão suaviza em ambas as direções:

Figura 5.26 - Ajustando a direção da suavização

Por exemplo, veja na figura a seguir que as bordas de cima podem ser suavizadas para baixo, enquanto que as bordas de
baixo podem ser suavizadas para cima:

Figura 5.27 - Sem suavização, apenas em cima e apenas em baixo

Evite passar esta ferramenta com a direção para baixo nas extremidades, criando algo parecido como na figura a seguir:
Figura 5.28 - Smooth Height para baixo nas extremidades do terreno

Se feito de forma não intencional, isso vai parecer nada de mais, mas futuramente pode dificultar a extensão do terreno.

Vídeo 5.3 - Suavizando as arestas e a superfície do terreno

Estampando

Anteriormente mencionei que é possível utilizar a ferramenta Levantar ou Diminuir o Terreno para “estampar” no
terreno clicando apenas uma vez em vez de segurar o botão e pintar. No entanto, o Unity possui uma ferramenta própria
para fazer isso chamada Stamp Terrain que pode ser acionada selecionando a seguinte opção no menu das ferramentas
de pintura:

Figura 5.29 - Ferramenta Stamp Terrain

Com a ferramenta selecionada, veja na tabela a seguir uma descrição das opções disponíveis:

Tabela 5.1 - Propriedades da ferramenta Stamp Terrain


Na figura a seguir você pode conferir um exemplo, repare nas bordas que une a estampa com o terreno:

Figura 5.30 - Da esquerda para direita: Max e Add (slider no mínimo e máximo respectivamente)

Além dessas opções, você também pode ajustar o tamanho do pincel (Brush Size) e a força da ferramenta (Opacity).
Dependendo do valor de Opacity, a altura da estampa pode ser maior quando ajustado em conjunto com Stamp
Height. Na figura a seguir você pode conferir um exemplo de uso:
Figura 5.31 - Exemplo de estampa no terreno

Esta ferramenta pode ser muito útil para adicionar diferentes detalhes no terreno, onde cada detalhe pode ser definido
por um pincel personalizado.

Vídeo 5.4 - Estampando o terreno

Pincel Personalizado

Além dos pinceis que já vem com o Unity, é possível também criar seu próprio pincel ou obter um personalizado. Com
novos pinceis, a possibilidade de adicionar detalhes no terreno é praticamente infinita. Disponibilizei alguns pinceis que
deve ter sido importado no começo do capítulo, são apenas arquivos no formato PNG. Para usar um pincel
personalizado, primeiro você precisa criar um asset de pincel com base no arquivo de imagem.

Criando e Usando Um Pincel Personalizado

1. Com qualquer uma das ferramentas de escultura selecionado e na seção Brushes, clique no botão New Brush
(Novo Pincel):

Figura 5.32 – Botão para criar um novo pincel


2. A janela de seleção de textura é exibida, selecione um dos pinceis que se encontram no diretório “Assets >
Terreno > Brushes”:

Figura 5.33 - Selecionando uma textura para criar o pincel

3. Para confirmar, clique duas vezes sobre uma opção na janela de seleção de textura, ou selecione uma vez e feche
a janela. Um asset de pincel chamado “NewBrush.brush” será adicionado no diretório atual:

Figura 5.34 - Novo asset de pincel criado

4. Renomeie para algo que assemelha o pincel criado e mova o asset para o diretório “Assets > Terreno > Brushes”
ou outro local que preferir.
A utilização do novo pincel segue o mesmo processo como antes, simplesmente clique com o botão esquerdo do
mouse na superfície que deseja esculpir. Na figura a seguir você pode conferir o uso da ferramenta Stamp Terrain
com o novo pincel, mas você pode usá-lo em qualquer outra ferramenta:

Figura 5.35 - Utilizando a ferramenta Stamp Terrain com o novo pincel

Vídeo 5.5 - Criando e usando um pincel personalizado

Configurações do Pincel

Se você selecionar o asset do pincel na janela Project, suas configurações serão exibidas na janela Inspector, estas
configurações tornam os pinceis bastante flexíveis para diferentes casos. Uma prévia da configuração atual do pincel
pode ser vista no painel do asset que fica na parte inferior da janela Inspector:
Figura 5.36 - Configurações de um asset de pincel

Ao Configurar o Pincel
As configurações realizadas não vão afetar o que já foi esculpido ou pintado no terreno, apenas novas
aplicações serão afetadas com as novas configurações.

Na tabela a seguir você pode conferir uma descrição de cada propriedade. Experimente realizar diversas configurações
e teste no terreno para descobrir as diferenças:

Tabela 5.2 - Propriedades de um pincel personalizado


Pintando e Colorindo o Terreno

Agora que você já sabe como moldar e esculpir o terreno, seria interessante aplicar e pintar algumas texturas, pois a
aparência de xadrez da textura e do material padrão não agrada muito e é difícil de assemelhar o terreno.

Aplicando Textura

Para texturizar o terreno você precisa utilizar a ferramenta Paint Texture que pode ser acionada selecionando a
seguinte opção no menu das ferramentas de pintura:

Figura 5.37 - Ferramenta "Paint Texture"

Texturizar o terreno funciona como pintura no quadro, você seleciona um pincel, depois a textura e então pode começar
a pintar no terreno. Primeiro você precisa criar uma camada contendo a textura, lembre-se que seu projeto já deve
possuir algumas texturas contidas no pacote “Fantasy Landscape” que foi importado antes. Siga as etapas a seguir
para adicionar uma textura para o terreno:

Criando Uma Camada de Textura Para o Terreno

1. Selecione o objeto do terreno.

2. Na janela Inspector e no componente Terrain, ative a ferramenta Paint Terrain e selecione a ferramenta de
pintura Paint Texture.

3. Na seção Terrain Layers (Camadas de Textura), clique no botão Edit Terrain Layers (Editar Camadas de
Texturas):
Figura 5.38 - Botão Edit Terrain Layers

4. No menu, selecione a opção Create Layer (Criar Camada).

5. Na janela de seleção de textura, selecione a textura “ground_grass” (para facilitar, pesquise por “ground” ou
“grass” no campo de busca):

Figura 5.39 - Selecionando a textura "ground_grass.tga"

6. Um novo asset chamado “NewLayer.terrainlayer” será adicionado no diretório atual, renomeie para
“Gramado”.

7. Acesse o diretório “Assets > Terreno” e crie uma pasta chamada “Texturas”. Em seguida mova o asset
“Gramado” para esta nova pasta.

Vídeo 5.6 - Criando uma camada de textura para o terreno

Repare que ao adicionar a primeira camada de textura, o terreno todo é coberto com a textura selecionada, substituindo
a textura de xadrez de antes, mas você precisa pintar outras texturas para deixar o terreno mais interessante e
convincente. Esta ferramenta possui parâmetros já familiarizados (Brushes, Brush Size e Opacity), veja a seguir como
pintar o caminho do terreno:

Pintando o Caminho do Terreno

1. Para pintar o caminho, siga as etapas de antes e crie uma camada de textura selecionando a textura
“ground_road”.

2. Renomeie o asset para “CaminhoDeTerra”. Lembre-se de mover o asset para a pasta “Assets > Terreno >
Texturas”.

3. Tenha certeza que a nova textura esteja selecionada na seção Terrain Layers, a textura selecionada é indicada
pela barra azul logo em baixo do bloco da textura, para selecionar uma textura, basta clicar sobre ela:

Figura 5.40 - Listra azul em baixo do bloco determina a textura atualmente selecionada

4. Selecione um pincel com bordas suaves, ajuste Brush Size conforme 1/3 da espessura do caminho, deixe Opacity
no máximo e pinte o caminho do terreno (clique e mantenha segurado o botão esquerdo do mouse). Clique no eixo
Y do Gizmo da Cena para alternar para a visão no topo, facilitando a pintura do caminho.

5. Alterne as texturas “CaminhoDeTerra” e “Gramado” clicando sobre a mesma na lista de Terrain Layers e
retoque o caminho, ficando algo parecido como na figura a seguir:

Figura 5.41 - Exemplo da pintura do caminho

6. Experimente pintar mais caminhos sobre o terreno, você também pode voltar para as ferramentas de escultura a
qualquer momento para esculpir novas áreas:

Figura 5.42 - Pintando caminhos diferentes

Para deixar o terreno com um efeito gradiente e mais convincente, podemos pintar outra textura por cima da textura
principal, igual como foi feito no caminho, mas dessa vez vamos pintar nas “paredes” das montanhas:

Pintando Múltiplas Texturas no Terreno

1. Adicione a textura “ground_rocky”.

2. Ajuste Brush Size para 35 e Opacity para 15.

3. Comece a pintar as áreas do terreno como desejar, ficando algo parecido como na Figura a seguir, passando a
sensação que o gramado não está crescendo nas laterais ou nas “paredes” das montanhas:
Figura 5.43 - Exemplo de pintura sobre outra textura

Experimente adicionar quantas texturas você achar interessante e continue praticando suas habilidades de pintura no
terreno.
Gerando Detalhes e Árvores

Até o momento nosso terreno possui uma textura plana, porém, todo tipo de paisagem natural contém algum tipo de
vida vegetal, nesta seção você vai aprender como adicionar mais detalhes no terreno. É possível pintar árvores e
detalhes (como vegetação) de maneira semelhante como é pintado as texturas. Existe uma ferramenta para pintar
árvores e outra para pintar detalhes, assim você tem mais controle sobre o que é pintado no terreno.

Pintando Detalhes

É possível plantar todo tipo de vegetação, como gramados e plantas menores. Este tipo de vegetação no Unity é
conhecido como “detalhes do terreno” e a ferramenta utilizada é chamada de Paint Details (Pintar Detalhes) que pode
ser acionada clicando sobre o seguinte botão na barra de ferramentas do terreno:

Figura 5.44 - Ferramenta "Paint Details"

A pintura de detalhes pode utilizar modelos ou textura, e o processo é semelhante como você já deve estar acostumado,
primeiro você seleciona um detalhe, configura seus parâmetros e em seguida já pode pintar no terreno.

Siga as etapas a seguir para adicionar um detalhe de gramado:

Adicionando Um Detalhe de Gramado

1. Selecione o objeto do terreno.

2. Ative a ferramenta Paint Details clicando sobre o botão apropriado na barra de ferramentas do terreno.

3. Na seção Details (Detalhes), clique no botão Edit Details (Editar Detalhes) e selecione a opção Add Detail
Mesh (Adicionar Malha de Detalhe):
Figura 5.45 - Adicionando detalhes de pintura no terreno

4. Na janela Add Detail Mesh, no parâmetro Detail, clique no botão de círculo para abrir a janela de seleção de
objeto.

5. Para facilitar a busca, procure por “grass” e selecione o objeto “Grass1.prefab”, em seguida feche a janela.

6. De volta na janela Add Detail Mesh, os demais parâmetros podem ser configurados agora ou depois, clique em
Add para confirmar:

Figura 5.46 - Selecionando um detalhe

Assim que um detalhe é adicionado e selecionado na seção Details, suas configurações de pintura serão exibidas na
seção Settings, as propriedades já são familiares, veja na Tabela a seguir uma descrição de cada propriedade:

Tabela 5.3 - Propriedades da ferramenta "Paint Details"


Com o detalhe adicionado, agora é só começar a pintar:

Clique com o botão esquerdo do mouse para pintar os detalhes.


Segure “Shift” e clique com o botão esquerdo do mouse para remover os detalhes.
Segure “Ctrl” e clique com o botão esquerdo do mouse para remover apenas os detalhes do tipo atualmente
selecionado.

Pintando o detalhe do gramado

1. Escolha um pincel, configure Brush Size para o valor 10, Opacity para 0.01 e Target Strength para 0.5.

Essa configuração com valores baixos permite pintar com mais suavidade e precisão.

2. Pinte no terreno exatamente do jeito como você já está acostumado, continue pintando em uma mesma área para
gerar mais densidade:
Figura 5.47 - Pintando detalhes de gramado

Vídeo 5.7 - Adicionando e pintando o detalhe do gramado

Assim que um gramado ou outro detalhe é adicionado, você pode configurá-lo a qualquer momento e as alterações
serão aplicadas automaticamente nos detalhes já pintados no terreno. Para editar um detalhe, selecione-o na lista de
Details, clique no botão Edit Details e selecione Edit ou clique duas vezes sobre o bloco do detalhe na lista de Details
para exibir a janela Edit Detail Mesh.

Veja na tabela a seguir uma descrição de cada propriedade:

Tabela 5.4 - Propriedades de um detalhe


Clique em Apply para confirmar a edição.

Otimização dos Detalhes

Por padrão a distância dos detalhes é limitada para melhorar o desempenho do terreno, se você quiser visualizar a
distância dos detalhes no máximo, você precisa aumentar a distância de visualização dos detalhes nas Configurações
do Terreno:

Aumentando a Distância dos Detalhes

1. Acesse as Configurações do Terreno ativando o último botão com ícone de engrenagem que se encontra no final
da barra de ferramentas do terreno.

2. Na seção Tree & Detail Objects (Árvore & Objetos de Detalhes), altere o parâmetro Detail Distance (Distância
dos Detalhes) para uma distância desejada:

Figura 5.48 - Alterando a distância de visualização dos detalhes

Direção do Vento

Talvez você tenha notado que o gramado está inclinado em uma direção como se um vento forte estivesse dobrando.
Este é um recurso do terreno e pode ser alterado nas Configurações do Terreno, na seção Wind Settings for Grass
(Configurações do Vento para o Gramado), altere o parâmetro Bending (Dobramento) até achar uma posição inicial
mais adequada:

Figura 5.49 - Alterando o dobramento do gramado

Pintando Folhas e Cogumelos

Além do gramado, o pacote “Fantasy Landscape” possui um asset de folha branca e um cogumelo que pode ser um
detalhe a mais para ser adicionado junto com o gramado.

Pintando Folhas e Cogumelos

1. Siga as etapas que você já aprendeu para adicionar o detalhe “Flower1.prefab”, porém, na janela Add Detail
Mesh altere Healthy Color e Dry Color para a cor branca pura, pois não queremos que as flores brancas percam sua
cor original:
Figura 5.50 - Adicionando o detalhe de folha branca

A cor de Healthy Color (Cor Saudável) é mais visível no centro do detalhe, enquanto que Dry Color (Cor Seca) é
mais visível nas arestas do detalhe. Ao utilizar a cor branca pura, valor RGBA (255, 255, 255, 255) para ambos
os parâmetros, a cor original do detalhe será utilizada. Estes parâmetros podem ser úteis para gerar variação de cor no
detalhe, que não é o caso da flor branca ou outro detalhe de cor única.

2. Selecione um pincel suave, configure Brush Size para o valor 15, Opacity para 0.06 e Target Strength para
0.1. Experimente diferentes configurações.

3. Comece a pintar no terreno como desejar:


Figura 5.51 - Pintando folhas

4. Para variar ainda mais, o projeto também possui o asset “Flower2.prefab”, basta seguir as mesmas etapas de
antes:

Figura 5.52 - Detalhe de flor roxa

5. Além disso, siga as mesmas etapas para adicionar o detalhe “Mushroom1” (cogumelo):
Figura 5.53 - Pintando cogumelos

Pintando Árvores

Para pintar ou plantar árvores você precisa utilizar a ferramenta Paint Trees que pode ser acionada clicando sobre o
seguinte botão na barra de ferramentas do terreno:

Figura 5.54 - Ferramenta "Paint Trees" (Pintar Árvores)

Basicamente o que você precisa fazer é carregar um modelo de árvore, definir suas propriedades e em seguida já pode
começar a pintar as árvores onde desejar.

Siga as etapas a seguir para adicionar uma árvore:

Adicionando Uma Árvore

1. Selecione o objeto do terreno.

2. Ative a ferramenta Paint Trees clicando sobre o botão apropriado na barra de ferramentas do terreno.

3. Para abrir a janela de seleção de modelo de árvore, clique no botão Edit Trees (Editar Árvores) e selecione Add
Tree (Adicionar Árvore):
Figura 5.55 - Botão de editar árvores

4. No final do parâmetro Tree Prefab, clique no pequeno ícone de círculo para abrir o seletor de GameObject. Em
seguida selecione o modelo “Birch_tree1.prefab” e feche a janela:

Figura 5.56 - Selecionando modelo de árvore

5. De volta na janela Add Tree, clique no botão Add para confirmar.

6. Repita as etapas anteriores para adicionar o modelo “Birch_tree2.prefab”.

Assim que uma árvore é adicionada e selecionada na seção Trees, suas configurações serão exibidas na seção Settings,
algumas propriedades já são familiares, veja na tabela a seguir uma descrição de cada propriedade:

Tabela 5.5 - Propriedades da ferramenta "Paint Trees"


Sabendo do conhecimento dos parâmetros, siga as etapas a seguir para pintar as árvores no terreno:

Pintando Árvores no Terreno

1. Selecione uma árvore na seção Trees.

2. Ajuste Brush Size para o valor 45, Tree Density para 20, deixe Tree Height com a propriedade Random
marcado e ajuste o slider para definir a altura mínima e máxima.

Na figura a seguir você pode conferir um exemplo, o importante é testar e praticar diversas configurações:
Figura 5.57 - Configuração de plantação de árvores

Utilização básica:

Clique com o botão esquerdo do mouse para pintar as árvores.


Segure “Shift” e clique com o botão esquerdo do mouse para remover as árvores.
Segure “Ctrl” e clique com o botão esquerdo do mouse para remover apenas as árvores do tipo selecionado.

3. Clique e segure sobre uma área verde no terreno e mova o cursor para começar a pintar.

Ficando algo parecido como na figura a seguir:

Figura 5.58 - Terreno com árvores plantadas

Densidade
Dependendo da densidade das árvores definidas no parâmetro Tree Density, em vez de segurar o botão do
mouse e pintar, experimente clicar apenas uma vez em áreas específicas, dessa maneira fica mais fácil manejar
a diversidade das árvores em diferentes posições.
4. Para variar, alterne entre os dois modelos de árvores.

5. Ajuste Brush Size para um tamanho menor, segure a tecla "Shift" e comece a remover (pintando) as árvores que
não estiverem na posição desejada, pois algumas árvores sobre um declive podem ficar flutuando.

Vídeo 5.8 - Adicionando e pintando árvores

Mais uma vez, experimente pintar as árvores adicionando mais modelos de árvores e ajuste os diferentes parâmetros
para gerar uma plantação de árvores variada e natural.

Otimização das Árvores

Talvez você tenha notado que a distância das sombras das árvores está muito curta, as sombras são exibidas ou
escondidas muito em cima da visão da câmera. Por questões de desempenho, o que a câmera não estiver vendo pode ser
“desativado” para economizar recursos do sistema, melhorando o desempenho do jogo.

Distância das Sombras em Geral


Outro fator que determina a distância das sombras é a configuração de qualidade do jogo que para o nosso
exemplo não precisamos alterar.

Assim como nos detalhes, o terreno também possui configurações para otimizar a exibição das árvores. Quando a
sombra desaparece na sua frente, quer dizer que a árvore entrou no modo Billboard, convertendo a malha 3D em uma
textura 2D.

Billboard
São texturas 2D como sprites que são posicionadas em um local específico, mas sua orientação é
automaticamente computada para sempre olhar na direção da câmera.

Para definir quando as árvores são convertidas em Billboard, acesse as Configurações do Terreno e na seção Tree &
Detail Objects, altere o parâmetro Billboard Start:

Figura 5.59 - Determinando quando uma árvore é convertida em Billboard

Experimente usar um valor menor (algo em torno de 20) e utilize a própria visão da cena para testar o efeito, repare na
transição das árvores entre um estado para o outro. Na figura a seguir você pode conferir um exemplo de comparação:

Figura 5.60 - Em cima Billboard e em baixo árvores em malha normal

No estado Billboard, se você rotacionar a câmera ao redor das árvores, você vai notar que a textura está “olhando” para
a visão da câmera. Não é possível desativar esta configuração, mas é possível aumentar a distância o suficiente para não
perceber quando a árvore é transformada em Billboard. Utilizar um valor alto como 1000 (sendo 2000 o máximo) é o
suficiente para o nosso cenário.

Plantação em Massa

Para plantar árvores em massa utilize o botão Mass Place Tree:


Figura 5.61 – Plantação de árvores em massa

Ao clicar em Mass Place Tree, a janela Place Tree será exibida, ajuste o parâmetro Number of Trees para definir o
número total de árvores que serão plantadas em todo o terreno, o valor padrão 10000 é muito alto para o nosso terreno,
use um valor menor, algo em torno de 250. A opção Keep Existing Trees quando marcada permite manter as árvores
que já foram plantadas, se desmarcado, as árvores atuais serão removidas no processo:

Figura 5.62 - Configuração da plantação de árvores em massa

Quando estiver pronto para plantar, clique no botão Place. O Unity vai tentar plantar as árvores em áreas planas ou com
ângulo baixo, evitando que elas fiquem flutuando em áreas com ângulo alto. No nosso terreno, a plantação em massa
vai plantar bastante no caminho, pois é mais plano, mas assim que plantado, você pode continuar editando para
remover ou adicionar mais árvores.

Objetos Separados do Terreno

O terreno e suas ferramentas por si só não completa todo o cenário do jogo, você pode adicionar objetos separados do
terreno, como pedras:
Figura 5.63 - Pedra

Adicionando Pedras no Cenário

1. Acesse o diretório “Assets > FantasyEnvironments > Prefabs” e você vai encontrar o asset “Rock1.prefab”, o
mesmo indicado na Figura anterior.

2. Simplesmente clique e arraste o asset Rock1 da janela Project para dentro da janela Scene, em seguida utilize a
ferramenta de mover (W) para posicionar a pedra em cima do terreno, certifique-se que o modelo não esteja
flutuando.

3. Duplique a pedra algumas vezes e posicione como desejar:


Figura 5.64 - Adicionando algumas pedras
Expandindo o Terreno

Até agora você criou um terreno, esculpiu, coloriu, adicionou gramados e árvores, mas pode chegar um momento que
você precisa expandir o terreno atual. Para fazer isso, ative a ferramenta Create Neighbor Terrain (Criar Terrenos
Vizinhos) selecionando o seguinte botão na barra de ferramentas do terreno:

Figura 5.65 – Selecionando a ferramenta “Create Neighbor Terrain”

A janela Scene vai exibir áreas onde o terreno pode ser expandido:

Figura 5.66 - Áreas onde o terreno pode ser expandido

Antes de expandir o terreno, você precisa analisar as propriedades:

Tabela 5.6 - Propriedades da ferramenta Create Neighbor Terrain


Para estender o terreno, clique sobre uma área na cena, como indicado na Figura anterior. Na figura a seguir você pode
conferir um exemplo usando o modo Clamp e Mirror:

Figura 5.67 - Da esquerda para direita: modo Clamp e modo Mirror

Dependendo do caso, o modo Mirror possui resultados melhores, de qualquer maneira você vai precisar editar o novo
terreno manualmente. Um novo asset de terreno será adicionado no mesmo local do terreno original e um novo
GameObject será adicionado na janela Hierarchy, isso significa que cada parte do terreno possui suas próprias
configurações. Para selecionar e modificar um terreno específico, simplesmente clique sobre o mesmo na janela Scene
ou na Hierarchy. Por padrão, os terrenos são conectados automaticamente, ou seja, você pode esculpir e pintar sem se
preocupar com a emenda entre as extremidades:
Figura 5.68 - Esculpindo entre as extremidades de dois terrenos

Nas Configurações do Terreno você pode definir os grupos em que os terrenos se conectam, terrenos que pertencem
ao mesmo Grouping ID, podem se conectar um com os outros:

Figura 5.69 - Grupo de terrenos e ID

Deixe a opção Auto connect marcada para conectar os terrenos automaticamente, ou utilize o botão Reconnect
(reconectar) para tentar conectá-los manualmente.
Parte 6: Primeiro Projeto de Jogo 3D

Neste Capítulo você vai aprender:

Criar um jogo de coletar moedas


Adicionar um personagem controlado em primeira pessoa
Criar seu primeiro script para detectar a colisão com as moedas
Tocar efeitos sonoros via script
Animação básica da moeda
Criar uma interface do usuário para exibir informações na tela
Determinar o fim do jogo
Alterar a Skybox padrão (textura do céu)
Utilizar fontes de áudio para reproduzir uma música
Distribuir seu jogo

Estaremos usando o terreno que foi construído no capítulo anterior como base para o nosso personagem percorrer no
cenário. O personagem será controlado em primeira pessoa e o objetivo principal do jogo é encontrar e coletar todas as
moedas antes que um temporizador global expire. Vale a pena mencionar que para definir a lógica e o comportamento
do jogo vai ser necessário escrever código, mas estou assumindo que o leitor está começando agora e não possui
experiência anterior com programação, isso significa que todo código apresentado será explicado com detalhes. Os
fundamentos da programação e script com Unity estão dedicados para o próximo módulo do livro, de qualquer maneira,
este capítulo vai servir como uma base de inspiração de como criar um jogo no Unity. Este jogo vai estar longe de ser
considerado um jogo completo, mas em módulos futuros você vai aprender como criar jogos mais avançados, por
enquanto este jogo vai servir como exemplo prático.
Preparando o Projeto

Como mencionado antes, estaremos usando o terreno que foi construído no capítulo anterior, isso inclui o mesmo
projeto também, além de algumas configurações adicionais. Além disso, vai ser necessário importar alguns assets do
jogo.

Assets do jogo

Para este capítulo vamos usar o asset “Standard Assets” criado pelo Unity (contém o personagem controlável pelo
jogador) e o “Fantasy Skybox FREE” criado por G.E TEAM (contém texturas e materiais para o céu), ambos podem
ser obtidos na Loja de Assets:

Figura 6.1 - Assets "Standard Assets" e "Fantasy Skybox FREE"

Mais uma vez para facilitar o processo, empacotei apenas o necessário, nem tudo que existe nestes pacotes serão
utilizados neste jogo, se quiser a versão completa, você pode baixar a versão original diretamente na Loja de Assets.
Além destes dois assets que foi mencionado, o pacote disponibilizado no livro possui mais alguns assets próprios para
este jogo, siga as próximas etapas para importar tudo de uma vez:

Importando Todos os Assets do Jogo

1. Para importar todos os assets para este capítulo, utilize o seguinte pacote disponibilizado nos arquivos do livro:

“PrimeiroJogo3DInicial.unitypackage”.

2. Para importar um pacote “.unitypackage”, siga para o menu Assets, aponte para Import Package e selecione
Custom Package, em seguida abra o arquivo de pacote.

Dependendo do seu sistema, você também pode clicar duas vezes sobre o arquivo “.unitypackage” usando o
gerenciador de arquivos do seu sistema.

3. Na janela que é exibida, deixe tudo marcado e clique em Import para importar os assets para o seu projeto.
Assim que importado, se você acessar a pasta “Standard Assets” na raiz do projeto, você vai encontrar os seguintes
diretórios:

Characters: Inclui o personagem em primeira pessoa.


CrossPlatformInput: Sistema de entradas que permite mover o personagem.
PhysicsMaterials: Assets específicos para a física do Unity.
Utility: Contém scripts para diversas utilidades.

Para este projeto estaremos focando apenas no personagem em primeira pessoa que se encontra em “Characters”, este
pacote depende de outros assets para funcionar, mas você não precisa se aprofundar em conhecer ou entender todos eles
agora.

A Cena Principal

Por padrão, ao criar um projeto, o Unity também cria uma cena de exemplo chamada SampleScene que se encontra na
pasta Scenes, siga as etapas a seguir para renomear a pasta e a cena padrão:

Renomeando a Pasta e a Cena Padrão

1. Acesse a pasta Assets do seu projeto.

2. Renomeie a pasta Scenes para o nome _Cenas (clique com o botão direito do mouse sobre a pasta e selecione
Rename, ou com a pasta selecionada basta pressionar F2).

O sublinhado no começo do nome serve para que a pasta sempre fique no topo da lista, assim fica mais fácil achar a
pasta de cenas no seu projeto, caso contrário, a pasta será ordenada de maneira alfabética.

3. Renomeie a cena padrão para o nome “Principal”.

Daqui para frente quando precisar salvar a cena atual, use o atalho “Ctrl + S”, faça isso com frequência (especialmente
antes de executar o projeto) para evitar qualquer perda do trabalho em caso de crash ou queda de energia.

Configurando a Resolução de Teste

Precisamos pensar em qual resolução vamos testar o jogo, se você seguir para a janela Game e no menu de Proporções
de Telas você vai notar que a opção Free Aspect (Proporção Livre) está selecionada por padrão. Nesse menu podemos
escolher a resolução ou a proporção em que o projeto será executado:
Figura 6.2 - Menu de proporções de tela

Com a opção Free Aspect, a resolução do jogo expande automaticamente conforme o tamanho atual da janela Game.

Definindo a Proporção de Tela 16:9

1. Acesse o menu de proporções de tela como indicado na Figura anterior e selecione a opção 16:9, que é uma
proporção de tela bastante comum. Repare que assim que uma opção é escolhida, a janela Game é alterada, assim como
as bordas da câmera na janela Scene.
Adicionando um Personagem

Para este jogo, vamos adicionar um personagem em primeira pessoa que se encontra no asset “Standard Assets”, no
pacote “Characters” que foi importado antes:

Adicionando Um Personagem Controlável

1. Siga para a janela Project e navegue até o diretório Standard Assets > Characters > FirstPersonCharacter >
Prefabs.

2. Adicione na cena o Prefab FPSController.

3. Renomeie para “Personagem”.

4. Mova o Personagem no início de uma das pontas do terreno, na Figura a seguir você pode conferir a posição do
personagem visto no topo da cena:

Figura 6.3 - Posicionando o personagem

5. Mova o Personagem em uma altura um pouco acima do terreno, use o colisor de capsula como referência (o
Gizmo com contorno verde):
Figura 6.4 - Posicionando o Personagem um pouco acima do terreno

6. Rotacione o Personagem para olhar na direção do caminho.

7. Na janela Hierarchy, expanda o parentesco do GameObject Personagem, em seguida selecione o GameObject


filho FirstPersonCharacter.

Repare que o personagem já possui uma câmera própria:

Figura 6.5 - O personagem em primeira pessoa já possui uma câmera

8. Para não gerar conflito com as câmeras, remova a câmera inicial (GameObject Main Camera) que foi adicionada
por padrão ao criar o projeto.

9. Execute o projeto pressionando “Ctrl + P”.

Se você já jogou jogos em primeira pessoa, você já deve estar acostumado com os controles, use o mouse para olhar ao
redor, as teclas “W”, “A”, “S” e “D” para se movimentar, “Espaço” para pular e “Shift” para correr.

O GameObject do Personagem possui diversos componentes, não entrarei com todos os detalhes agora, mas iremos
ver algumas propriedades. Começando pelo componente Transform, você já deve saber que este componente define a
posição, rotação e escala do objeto na cena:

Figura 6.6 - Componente "Transform"

Logo em seguida você deve encontrar o componente Character Controller, este é o componente principal que permite
mover o Personagem na cena:

Figura 6.7 - Componente "Character Controller"

O próximo componente First Person Controller (Script) é um exemplo de componente personalizado que você pode
criar via script, neste caso é definido todas as características de um personagem em primeira pessoa, isso inclui a
movimentação, olhar ao redor com o mouse, pular, etc.:

Figura 6.8 - Componente "First Person Controller"

O componente Rigidbody coloca o objeto no controle do motor de física do Unity. Esse componente quando
adicionado a um GameObject, ele habilita forças físicas que atuam sobre ele, por exemplo, a gravidade que faz com
que o objeto caia para baixo até encontrar um obstáculo:
Figura 6.9 - Componente "Rigidbody"

Repare na figura anterior que o parâmetro Is Kinematic está ativado, isso significa que o Personagem não será afetado
pela física do Unity, neste caso sua física é controlada no componente First Person Controller, a movimentação
calculada neste script é enviada para o componente Character Controller que faz de fato o personagem se mover e ser
afetado por uma gravidade, enquanto o Rigidbody é utilizado como complemento.

O último componente chamado Audio Source permite reproduzir um clipe de áudio na cena, neste caso o componente
é utilizado para reproduzir o som dos passos do personagem no solo, som do pulo e som ao aterrissar no solo.

Figura 6.10 - Componente "Audio Source"

Configurando o Personagem

Basicamente os ajustes do Personagem podem ser configurados no componente Character Controller e First Person
Controller, nesta seção vamos realizar alguns ajustes comuns:

Configurando o Personagem

Como mencionado antes, podemos utilizar Tags para identificar objetos via script, veremos mais sobre isso em breve,
por enquanto podemos definir uma Tag comum.

1. Na janela Inspector, no menu Tag, selecione a opção Player:


Figura 6.11 - Selecionando a Tag Player

No componente Character Controller, na propriedade Slope Limit você pode definir o ângulo máximo em que o
personagem pode subir. O valor padrão de 45 graus apesar de ser comum, não é ideal para o nosso terreno que pode
impedir o personagem de “escalar” algumas áreas elevadas.

2. Altere Slope Limit para o valor 65 e experimente executar o jogo e testar diferentes valores com base no seu
terreno.

Ainda no componente Character Controller, o parâmetro Height nos permite definir a altura do colisor do
personagem.

3. Modifique Height para o valor 2, isso vai deixar o personagem um pouco mais alto que o padrão.

No componente First Person Controller, por padrão foi definido 2 sons de pegadas no solo em uma superfície sólida,
algo parecido com passos no concreto. Esses sons não conferem com o nosso terreno gramado, então disponibilizei
mais 5 sons de pegadas que deve ter sido importado na seção “Assets do jogo”.

4. Para definir os sons de pegadas, clique uma vez no parâmetro Footstep Sounds para expandir seus elementos:

Figura 6.12 - Expandindo a propriedade "Footstep Sounds"

A quantidade de sons de pegadas é definida no parâmetro Size e eles são reproduzidos de forma aleatória.

5. Altere Size para o valor 4, pois usaremos 4 sons de pegadas.

Mais dois elementos serão adicionados, o primeiro som é definido no parâmetro Element 0, o outro som no Element 1
e assim por diante (repare que computadores normalmente é contado a partir do 0).

6. Para definir o primeiro som, acesse a pasta “Assets > Áudio > Pegadas”, em seguida clique e arraste o som
“Pegadas1” da janela Project até a caixa da propriedade “Elemento 0”:

Figura 6.13 - Definindo os sons das pegadas

7. Repita o processo para definir as três pegadas restantes, ficando igual como na figura seguir:

Figura 6.14 - Sons das pegadas definidas

O último som que iremos definir é o de aterrissar (Land Sound), que acontece ao pular e colidir com o solo.

8. Altere Land Sound para o clipe de áudio “Aterrissar”.

9. Execute o jogo (“Ctrl + P”) e faça os testes.

O componente First Person Controller possui bastante propriedades que pode atender diferentes configurações de
personagens, na Tabela a seguir você pode conferir um resumo de algumas propriedades:

Tabela 6.1 - Propriedades comuns do componente First Person Controller


A melhor maneira de descobrir a configuração certa é testando as diferentes propriedades até achar a mais ideal para o
seu personagem. Experimente realizar as configurações durante a execução do jogo, assim você tem um feedback em
tempo real de como está ficando.

Janela de Foco Durante a Execução


Assim que você executar o projeto, a janela Game recebe foco e o movimento do mouse é utilizado para mover
a câmera. Naturalmente você pode usar o mouse para focar na janela Inspector, mas como o cursor está fixo,
isso não será possível. Para focar em outra janela, utilize um atalho do teclado, por exemplo, o Inspector é
acessado usando a combinação “Ctrl + 3”. Se quiser destravar o cursor, siga para o componente First Person
Controller, em Mouse Look, desmarque Lock Cursor.

Lembre-se, ao finalizar o projeto, as configurações serão perdidas.

Mantendo os Valores Após Encerrar o Projeto


Antes de encerrar o projeto, podemos copiar os valores de um componente, e após encerrar o projeto, basta
colar os valores de volta no mesmo componente. Clique com o botão direito do mouse sobre o título do
componente e selecione Copy Component, em seguida após encerrar o projeto, clique com o botão direito do
mouse novamente sobre o título do componente e selecione Paste Component Values.
Criando as Moedas para Coletar

Até este momento nosso jogo possui diversos recursos, incluindo o cenário de terreno construído com o gerador de
terreno do Unity e um personagem controlável em primeira pessoa. Como mencionado antes, o objetivo do nosso jogo
é coletar moedas espalhadas no cenário, nesta seção vamos criar um Prefab da moeda e em outra seção vamos criar a
lógica para permitir que o jogador possa interagir com as moedas.

A malha da Moeda

Você descobriu na seção “Modelando com Objetos Primitivos” que é possível criar diferentes modelos 3D utilizando
os objetos primitivos criados dentro do Unity. Basicamente iremos fazer a mesma coisa para definir a malha ou o
formato da moeda.

Para criar uma moeda, podemos começar com um cilindro:

Criando a Moeda Para Coletar

1. Siga para a janela Hierarchy e clique no botão Create ou acesse o menu GameObject, aponte para 3D Object e
selecione Cylinder.

2. Renomeie o GameObject para “Moeda”.

Na figura a seguir, veja que inicialmente o cilindro não se parece com uma moeda, mas podemos alterar sua forma
transformando sua escala:

Figura 6.15 - Formato padrão do cilindro

3. Para alterar a escala do cilindro com mais precisão, siga para a janela Inspector, no componente Transform,
altere o parâmetro Scale para as coordenadas (1.2, 0.07, 1.2):
Figura 6.16 - Resultado da escala do cilindro

O contorno verde ao redor da moeda é o Gizmo do colisor de capsula adicionado ao criar um cilindro, o colisor será
utilizado futuramente para detectar a colisão com o personagem. Normalmente o volume do colisor é ajustado
conforme o tamanho do GameObject, porém, a escala do cilindro fez com que o colisor não representasse mais o seu
volume. Para a Moeda, vamos remover o colisor padrão e adicionar outro com formato quadrado.

4. Clique com o botão direito do mouse sobre o título do componente Capsule Collider e selecione a opção
Remove Component:

Figura 6.17 - Removendo o componente "Capsule Collider"

5. Clique em Add Component, acesse a categoria Physics e selecione Box Collider:


Figura 6.18 - Adicionando o componente "Box Collider"

Physics e Physics 2D
Repare que existe Physics para ser usado em objetos 3D e Physics 2D para ser usado em objetos 2D, como
estamos lidando com objetos 3D, você precisa trabalhar com Physics, então tome cuidado para não misturar os
componentes, os dois grupos de componentes são distintos um do outro.

Siga para a janela Scene e você vai notar o colisor quadrado representado pelo Gizmo verde. O Unity vai ajustar o
volume do colisor automaticamente conforme as dimensões do modelo:

Figura 6.19 - Componente Box Collider Adicionado

Futuramente o colisor da Moeda será utilizado para detectar a colisão com o Personagem, porém, o colisor da moeda
não será utilizado como obstáculo, apenas como um acionador para detectar a colisão.

6. Para tornar o colisor um acionador, siga para o componente Box Collider, e habilite a opção Is Trigger:
Figura 6.20 - Tornando o colisor um acionador

7. Vamos deixar a moeda em pé, então no componente Transform, no parâmetro Rotation, altere x para o valor
-90:

Figura 6.21 - Alterando a rotação da moeda

Antes de realizar outras modificações, seria interessante criar um Prefab da Moeda, assim fica mais fácil de manejar as
diferentes cópias futuramente.

8. Para manter o projeto organizado, vamos criar uma pasta própria para conter todo tipo de objeto, então siga para a
janela Project, na pasta principal dos Assets crie uma pasta chamada “Objetos” (clique em Create e selecione
Folder).

9. Dentro da pasta “Objetos” crie outro diretório chamado “Moeda”, em seguida dentro desta pasta, crie outro
diretório chamado “Prefabs”:

Figura 6.22 - Árvore de diretórios do projeto

10. Arraste o GameObject Moeda da janela Hierarchy para dentro da pasta “Assets > Objetos > Moeda >
Prefabs”. Isso converterá o GameObject Moeda em um Prefab:
Figura 6.23 - Criando um Prefab da moeda

Para saber mais sobre os Prefabs, acesse a seção “Prefabs”.

11. Duplique a Moeda (“Ctrl + D”) algumas vezes e posicione em diferentes locais do cenário.

Por enquanto não se preocupe com o design do jogo, qualquer lugar que o Personagem conseguir coletar a moeda deve
servir.

O Material da Moeda

A moeda é um item muito importante do nosso jogo, por se tratar de algo funcional e interativo para o jogador,
devemos levar em consideração em como ele é apresentado e exibido. Objetos não interativos e interativos tem uma
grande diferença para o jogador, com isso em mente, a moeda precisa se destacar para mostrar sua importância, pois o
material padrão com a cor cinza e esbranquiçada não é a melhor opção. Nesta seção vamos criar um material e definir
algumas propriedades para mostrar exatamente que este objeto é realmente uma moeda interativa:

Criando o Material da Moeda

1. Entre no Modo Prefab da Moeda.

2. Acesse o diretório “Assets > Objetos > Moeda” e crie uma pasta chamada “Materiais”. Em seguida entre na
nova pasta.

3. Crie um novo material chamado “MoedaMat” e adicione-o como o material principal da Moeda (no componente
Mesh Renderer, expanda Materials e defina o parâmetro Element 0).
Figura 6.24 - Definindo o material da moeda

4. Altere a cor do material (parâmetro Albedo) para um amarelo puro, defina o valor RGBA (255, 255, 0,
255).

5. Altere Metalic para o valor 0.5 e Smoothness para 1.

Teremos o seguinte resultado:

Figura 6.25 - Cor da moeda definida


Coletando a Moeda
Até o momento, criamos uma moeda e definimos seu visual, porém, nada acontece quando o jogador colide com a
moeda. Para fazer com que o jogador reaja ao colidir com a moeda, precisamos escrever um Script. Quando você notar
eu mencionar sobre o termo script, significa um arquivo de código que possui instruções para realizar alguma tarefa
em específico. Esta “tarefa” no Unity podemos chamar de comportamento de jogo, que pode se referir a qualquer
coisa, isso inclui a lógica que será executada quando o personagem coletar a moeda.

A Linguagem de Script Utilizada Pelo Unity


O C# (pronuncia-se “Cê-Shárp”) é a linguagem de programação utilizada para definir a lógica e
comportamento do jogo.

Siga as etapas a seguir para criar seu primeiro Script C#:

Criando, Adicionando e Abrindo Um Script C#

1. Siga para a janela Project, na pasta “Assets > Objetos > Moeda”, crie uma pasta chamada “Scripts”, em seguida
entre nessa nova pasta.

2. Clique com o botão direito do mouse em qualquer área vazia da pasta, aponte para o menu Create e selecione a
opção C# Script.

3. Renomeie o novo script para ScriptMoeda, escreva isso tudo junto e com cada palavra começando em
maiúsculo, em seguida pressione “Enter” para confirmar:

Figura 6.26 – Criando um arquivo de Script C#

Extensão dos Arquivos de Script C#


Arquivos C# possui a extensão “.cs”, mas você não precisa especificá-la, as extensões de arquivos são
gerenciadas automaticamente pelo Unity.

4. Abra a Moeda no Modo Prefab.


5. Seguindo na janela Inspector, clique no botão Add Component, navegue na categoria Scripts e selecione o
script ScriptMoeda.

Veja que o script é adicionado na janela Inspector como se fosse qualquer outro componente:

Figura 6.27 - Script "ScriptMoeda" adicionado como componente

Existem outras maneiras de adicionar um script para o GameObject selecionado:

Clique e arraste o script da janela Project para dentro do GameObject na janela Hierarchy.
Clique e arraste o script da janela Project para dentro da janela Inspector.
Siga para o menu Component, aponte para Scripts e selecione uma opção.

Vídeo 6.1 - Criando e adicionando um Script C#

6. Para abrir o ScriptMoeda no editor de código padrão do Unity (Visual Studio Community), simplesmente
clique duas vezes sobre o asset do script na janela Project.

Linux e Visual Studio Code


Se você está no Linux ou não pretende usar o Visual Studio Community, o Visual Studio Code é a melhor
alternativa gratuita. Se este for o seu caso e para não sair do escopo desta seção, acesse o apêndice “Introdução
ao Visual Studio Code”, depois volte aqui para continuar.

Ao executar o Visual Studio Community pela primeira vez, a janela bem-vindo será exibida como indicado na Figura
6.28.

7. Se você já possui uma conta da Microsoft, clique no botão “Entrar” e use suas credenciais para se conectar ou
selecione a opção “Agora não, talvez mais tarde”:
Figura 6.28 - Janela de "Bem-vindo" do Visual Studio Community

8. Em Iniciar com um ambiente conhecido, na lista de Configurações de Desenvolvimento, selecione Visual C#:
Figura 6.29 - Selecionando uma configuração de desenvolvimento

9. Em seguida selecione um tema de cores (no meu caso vou escolher o tema “Escuro”) e clique em Iniciar Visual
Studio para finalizar a configuração inicial e abrir o editor.

Aguarde até que o Visual Studio fique pronto e prepare algumas coisas para primeiro uso.

Assim que finalizar, o script ScriptMoeda.cs será aberto no editor. Não entrarei com detalhes sobre o editor agora,
deixarei isso para o próximo módulo, mas o importante agora é o código inicial que já se encontra no script que você
acabou de criar e abrir:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScriptMoeda : MonoBehaviour


{
// Start is called before the first frame update
void Start()
{

// Update is called once per frame


void Update()
{

}
}

O código inicial é o ponto de partida que faz a conexão do script com as partes internas do Unity. Uma coisa importante
neste código são os métodos Start e Update, sempre quando você ver um abre e fecha de parênteses (), o nome no
lado esquerdo é considerado um método, eremos mais sobre métodos no próximo módulo do livro, mas resumindo:

Start: É inicializado tudo que for necessário, isso é feito antes que qualquer coisa seja executada e este método
é chamado apenas uma vez durante a inicialização do GameObject.
Update: É aonde inserimos a interatividade do jogo, este método é executado diversas vezes por segundo, dessa
forma o jogo estará sempre atualizado com as novas interações.

Ambos os métodos se encontram dentro da classe ScriptMoeda que possui o mesmo nome definido quando você
criou o arquivo de script. Imagine classes como se fosse um projeto ou diagrama que serve para criar componentes para
serem adicionados em algum GameObject, exatamente como você fez quando adicionou o script no Prefab da Moeda.

O nome da classe é definido logo após a palavra-chave class.

Quando mencionei dentro da classe eu me referia dentro da abertura e fechamento de chaves {} que chamamos de
bloco de código, tudo que estiver dentro destas chaves faz parte da classe ScriptMoeda. Outro exemplo de bloco de
código é o método Start e Update, ambos possuem um conjunto de chaves {} que define as instruções que serão
executadas por estes métodos. No entanto, o script inicial não vai fazer muita coisa, para detectar quando o
Personagem colidir com a Moeda, precisamos utilizar o método OnTriggerEnter, este método possui a mesma
anatomia do método Start e Update já presente no código inicial.

Detectando a Colisão Com as Moedas

1. Após o método Update, declare o método OnTriggerEnter, utilize o método Start ou Update como
referência:

...
// Update is called once per frame
void Update()
{

void OnTriggerEnter()
{

}
}

Resumo do Código
Repare que no código anterior, foi inserido três pontos (...) no começo e no final do código. Esses pontos são
considerados código inválido e servem apenas para resumir o mesmo no livro, em vez de simplesmente inserir
todo o código, estarei mostrando apenas o necessário, enquanto o restante fica inalterado.

Todo método possui esta anatomia básica, onde void é o tipo de informação que o método vai retornar, neste caso void
significa “nada”, ou seja, o método não deve retornar nenhuma informação. Repare que o método Start e Update
também não retorna nada, por isso o uso da palavra void antes do nome do método. O nome OnTriggerEnter é um
método pré-definido do Unity que é chamado automaticamente quando o Personagem do nosso jogo (ou qualquer
outro objeto com colisor) colide com o colisor deste objeto, neste caso o colisor seria o componente Box Collider que
adicionamos na Moeda na seção anterior.
Minúsculas e Maiúsculas
Você deve respeitar as letras minúsculas e maiúsculas para evitar problemas de referência, ou seja, o nome
onTriggerEnter é diferente de OnTriggerEnter, neste caso o primeiro possui a primeira letra “o” em
minúsculo, o correto seria a versão com a letra “O” em maiúsculo.

Para definir a sintaxe de um método usamos um abre e fecha de parênteses () logo após o nome do método, e dentro
dos parênteses inserimos os parâmetros que o método recebe, neste caso o método OnTriggerEnter possui um
parâmetro do tipo Collider que podemos chamar de col de colisão.

2. Defina o parâmetro do método OnTriggerEnter como descrito no código a seguir:

void OnTriggerEnter(Collider col)


{

Assim que alguma coisa colidir com a Moeda, o parâmetro col deve guardar o objeto que colidiu, dessa forma
podemos verificar se foi o Personagem que colidiu com a Moeda. Para realizar esta verificação, precisamos criar uma
estrutura condicional para testar uma condição, se for verdadeira, então algo deve ser executado quando o
Personagem colidir com a Moeda. A sintaxe de uma condição começa com a palavra-chave if seguido dos parênteses
() e um bloco de código:

if ()
{

Dentro dos parênteses inserimos a condição desejada. Lembra quando definimos a Tag Player para o Personagem?
Vamos verificar se col realmente possui a Tag Player, para fazer isso utilizamos o método CompareTag que se
encontra dentro de col, para acessar este método, utilizamos a sintaxe de ponto exatamente como a seguir, a sintaxe
de ponto utilizado para acessar o método CompareTag dentro de col:

col.CompareTag()

Repare que pelo fato de CompareTag ser um método, ele termina com os parênteses (), dentro dos parênteses
inserimos os argumentos. Os argumentos são informações que são passados para que o método realize o trabalho
necessário, neste caso precisamos especificar o nome da Tag que estamos comparando, para especificar um texto
utilizamos duas aspas duplas “”, dentro das aspas inserimos o texto “Player”:

col.CompareTag("Player")

O Tipo String
Uma string é uma sequência de caracteres, geralmente utilizada para representar palavras, frases ou textos de
um programa, igual como foi feito no exemplo “Player”. Tudo que estiver dentro das aspas faz parte da
string.

3. Dentro do método OnTriggerEnter, crie uma estrutura condicional para comparar se o objeto que colidiu com
a Moeda possui a Tag Player:

void OnTriggerEnter(Collider col)


{
if (col.CompareTag("Player"))
{

}
}

Se a condição for verdadeira, o bloco de código da condição será executado, caso contrário, o bloco de código da
condição será ignorado e o código seguinte será executado normalmente. Para este exemplo, vamos remover a Moeda
do cenário assim que o Personagem colidir com o mesmo, a maneira mais simples de se fazer isso é usando o método
Destroy, este método espera um argumento que deve ser o GameObject que será removido da cena. Para especificar
o GameObject atual, passe como argumento o nome gameObject (o GameObject atual em que o script foi
adicionado).

4. Dentro do bloco da condição que verifica a Tag Player, insira uma instrução passando o método Destroy():

void OnTriggerEnter(Collider col)


{
if (col.CompareTag("Player"))
{
Destroy(gameObject);
}
}

Repare que na instrução Destroy(gameObject); foi inserido um ponto e vírgula ; no final da linha, basicamente
estamos dizendo para a linguagem que terminamos uma instrução e que seguiremos para a próxima linha.

5. Para salvar o código atual, pressione “Ctrl + S” ou siga para o menu Arquivo e selecione Salvar.

6. Em seguida volte para o Unity.

Assim que você salvar o arquivo e voltar para o Unity, as mudanças no script serão sincronizadas, se nenhuma
mensagem de erro aparecer na barra de status ou na janela Console, então quer dizer que o código passou no teste
inicial.

Antes de executar o jogo, vamos recapitular algumas coisas:

Primeiro criamos o script ScriptMoeda e adicionamos esse script no Prefab da Moeda, quando adicionamos um
script em um GameObject, significa que estamos adicionando um novo componente personalizado para o objeto.
Como adicionamos o script no Modo Prefab da Moeda, todas as moedas adicionadas no cenário vão receber o
mesmo script.
Lembra quando ativamos Is Trigger no componente Box Collider da Moeda? Esta opção torna o colisor um
acionador, é por isso que utilizamos o método OnTriggerEnter (veja o Trigger no nome do método).
Uma estrutura condicional aceita apenas dois valores, true ou false (verdadeiro ou falso respectivamente), isso
significa que o método CompareTag retorna um valor true ou false dependendo do argumento passado. O
valor retornado pelo método é utilizado na estrutura condicional para determinar sua condição, se verdadeiro, o
bloco da condição será executado, caso contrário, o bloco da condição será ignorado.
Definimos a Tag Player para o Personagem e utilizamos esta Tag no código em uma estrutura condicional para
testar (usando o método CompareTag()) se o que colidiu com a moeda é realmente o Personagem.
Assim que a moeda é coletada, a mesma é removida da cena utilizando o método Destroy().

Experimente executar o jogo (“Ctrl + P”) e tente coletar as moedas.


Efeitos Sonoros

Efeitos sonoros são qualquer tipo de som que não seja música ou conversa de diálogos, esses sons são reproduzidos de
forma interativa no jogo, por exemplo, o som de uma explosão, disparos de uma arma, etc. No nosso jogo de exemplo,
vamos reproduzir um som quando o Personagem coletar uma Moeda.

O Unity possui dois componentes de áudio que trabalham em conjunto, que são o Audio Listener e o Audio Source. O
Audio Listener é o equivalente aos seus ouvidos ou um microfone no jogo, que recebe ou “ouve” fontes de áudio (ou
Audio Source) que estão no mundo do jogo. Por padrão o componente Audio Listener é adicionado na câmera
principal da cena, mas você pode adicioná-lo em qualquer GameObject, de preferência na câmera principal ou no
GameObject que representa o jogador. Se você selecionar a câmera principal (FirstPersonCharacter), você vai notar
que o componente Audio Listener não possui nenhuma propriedade, seu único objetivo é de receber o som das fontes
de áudio:

Figura 6.30 - Componente "Audio Listener" adicionado na câmera principal

Apenas Um Audio Listener


Você pode usar apenas um Audio Listener por cena, e caso não tenha nenhuma, sons 3D não terão
profundidade (por exemplo, o som de um Audio Source pode ficar baixo quando distante do Audio Listener).

Já uma fonte de áudio ou em inglês “Audio Source” é um componente que reproduz áudio. Fontes de áudio funcionam
como se fossem caixas de som no mundo do jogo que são capturados pelo Audio Listener. Você pode adicionar o
componente Audio Source em qualquer GameObject que vai carregar o som desejado. Acesse a pasta “Áudio” na
janela Project e selecione o clipe de áudio “Moeda.wav”. Em seguida na janela Inspector você pode ouvir uma prévia
do som, seguindo na parte inferior da janela, clique no botão “Play” algumas vezes para reproduzir o som:
Figura 6.31 - Informações do clipe de áudio

Se você não estiver vendo o painel como exibido na figura anterior, é porque o mesmo está encolhido, clique na barra
de título do painel para exibi-lo. Para começar, você precisa adicionar um Audio Source no Prefab da Moeda.

Adicionando e Configurando o Audio Source

1. Entre no Modo Prefab da Moeda.

2. Siga para a janela Inspector, clique no botão Add Component, acesse a categoria Audio e selecione o
componente AudioSource.

Repare que assim que o componente Audio Source é adicionado, um ícone (ou Gizmo) de caixa de som é exibido no
centro do objeto, indicando que o mesmo possui uma fonte de áudio:

Figura 6.32 - Ícone de som exibido na janela Scene

Gizmos da Cena
Lembrando que os ícones e gizmos da cena podem ser controlados no menu Gizmos que se encontra na barra
de controles da janela Scene.

Uma propriedade importante do componente Audio Source é o parâmetro AudioClip, responsável por definir o clipe
de áudio que a fonte de áudio deve reproduzir:

Figura 6.33 - Propriedade "AudioClip" do componente "AudioSource"

3. Clique e arraste o clipe de áudio Moeda.wav da janela Project para dentro da caixa da propriedade AudioClip.
Outra maneira de definir um clipe de áudio é clicando no pequeno botão com círculo no final do parâmetro
AudioClip, a janela de seleção de áudio será exibida, selecione o clipe Moeda.wav e feche a janela.

Uma propriedade importante que você precisa definir é a Play on Awake, se marcado, o clipe de áudio será
reproduzido quando o GameObject da Moeda for inicializado, ou seja, o áudio será reproduzido assim que o jogo for
executado, por padrão essa propriedade já se encontra habilitado.

4. Não queremos que o clipe de áudio seja reproduzido ao iniciar, então desmarque a opção Play on Awake.

É possível também configurar o volume usando o parâmetro do mesmo nome, você pode usar o slider para ajustar o
volume do clipe de áudio que pode ser numa faixa entre 0 (mudo) e 1 (volume no máximo).

5. Ajuste o volume para 0.4 (um pouco abaixo da metade).

Agora você precisa obter o componente Audio Source da Moeda via código, podemos continuar com o código anterior
e tocar o som da moeda quando o Personagem coletar a mesma. Para fazer isso, primeiro você precisa criar uma
variável do tipo AudioSource que deve conter as informações do componente.

O Que é Variável?
É uma pequena seção na memória do seu computador que guarda qualquer informação que você precisar. Para
que um jogo possa ser executado, é preciso que este jogo esteja na memória do computador, dessa forma
podemos guardar informações na memória para serem utilizadas quando for necessário.

Obtendo o Componente Audio Source Via Script

1. Após a abertura da chave { da classe, digite: AudioSource.

Repare que assim que você começa a digitar, o editor de código já sugere alguns nomes, se a primeira sugestão na lista
é a que você precisa, basta pressionar “Enter” para completar o nome, ou navegue entre as opções:

Figura 6.34 - Auto-completação do Visual Studio

Uma grande vantagem do editor de código é que assim que ele encontra uma palavra conhecida, ela é destacada no
documento. Você deve notar também diferentes cores na sintaxe do restante do código que depende do tema atual.

2. Em seguida, logo após adicionar um espaço, você precisa informar o nome da variável, vamos chamar de
somDaMoeda.

3. No final da linha, adicione um ponto e vírgula:

...
public class ScriptMoeda : MonoBehaviour
{
AudioSource somDaMoeda;

// Start is called before the first frame update


void Start ()
{
...

Alguns pontos a notar sobre o código anterior:

Toda informação precisa ter uma identificação, esta identificação é um nome que damos para a variável, assim
podemos usar este nome (que é uma área reservada na memória) para obter e manipular os valores da variável
sempre quando for necessário.
A forma de dizer ao computador para reservar uma área na memória é chamada de declaração de variável. Para
declarar uma variável, primeiro precisamos informar o tipo que essa variável deve conter. A linguagem C# possui
algumas palavras-chave utilizadas para definir um tipo comum, porém, o nome somDaMoeda é uma variável que
definimos com o tipo AudioSource (um tipo disponibilizado pelo código do Unity).
Palavras são sensíveis ao caso, isso significa que maiúsculo e minúsculo são diferentes. Por exemplo, no nome
AudioSource, você precisa usar a letra A em maiúsculo para Audio e a letra S em maiúsculo para o Source e
deve ser escrito tudo junto, caso contrário, o Unity não vai saber o significado do nome.
Usamos o ponto e vírgula (;) no final da linha para dizer a linguagem que terminamos uma instrução e que
seguiremos para a próxima linha.

Agora você precisa inserir um valor para a variável somDaMoeda. O processo de inserir um valor inicial para uma
variável é chamado de inicializar uma variável. Para inicializar a variável somDaMoeda com o componente
AudioSource da Moeda, você precisa usar o método GetComponent.

4. Vamos fazer isso na inicialização usando o método Start, ou seja, dentro das chaves {} do método Start,
digite o código a seguir:

// Start is called before the first frame update


void Start ()
{
somDaMoeda = GetComponent<AudioSource>();
}

Outros pontos a notar sobre o código anterior:

Para armazenar um valor em uma variável, usamos o operador de atribuição representado pelo sinal de igual (=).
O método GetComponent é a forma principal de acessar componentes de um GameObject, você precisa
informar o tipo do componente que deseja acessar dentro da sintaxe de sinais de menor e maior <>, no nosso caso
queremos obter o componente do tipo <AudioSource>.
Você precisa inserir o abre e fecha de parênteses no final (), pois GetComponent é um método que deve
retornar o componente que precisamos.
A referência do componente é armazenada na variável somDaMoeda.
Não esqueça de adicionar o ponto e vírgula no final da linha para encerrar a instrução.

Com o componente do AudioSource armazenado na variável somDaMoeda, agora podemos inserir a instrução
somDaMoeda.Play() para reproduzir o som da moeda, repare que precisamos utilizar a sintaxe de ponto para acessar
o método Play() contido na variável somDaMoeda. Faça isso dentro da mesma estrutura condicional, uma linha antes
de remover a moeda:

...
void OnTriggerEnter(Collider col)
{
if (col.CompareTag("Player"))
{
somDaMoeda.Play();
Destroy(gameObject);
}
}
...

Salve o script e experimente executar o jogo para testar, você vai notar que as moedas são coletadas normalmente
exatamente como antes, porém, o som da moeda não é reproduzido. Isso acontece porque na linha que removemos a
moeda utilizando o método Destroy(), todos os componentes do GameObject são removidos também, incluindo o
componente AudioSource, ou seja, o som não é reproduzido, pois o AudioSource não existe mais. Existem diversas
maneiras de resolver este problema, para simplificar nosso exemplo, vamos desabilitar o gráfico da moeda e apenas
removê-la após finalizar o som da moeda.

Reproduzindo o Som da Moeda

Para desabilitar o gráfico da moeda, precisamos obter o componente Renderer.

1. Na linha seguinte da declaração da variável somDaMoeda, declare outra variável só que do tipo Renderer
chamado rend (abreviação para Renderer), é exatamente o mesmo processo como você fez antes:

...
public class ScriptMoeda : MonoBehaviour
{
AudioSource somDaMoeda;
Renderer rend;
...

2. Dentro do método Start, faça da mesma forma como você fez para obter o componente AudioSource:

// Start is called before the first frame update


void Start()
{
somDaMoeda = GetComponent<AudioSource>();
rend = GetComponent<Renderer>();
}

3. Com o componente Renderer armazenado, agora desabilite o gráfico da Moeda utilizando a instrução
rend.enabled:

...
void OnTriggerEnter(Collider col)
{
if (col.CompareTag("Player"))
{
rend.enabled = false;
somDaMoeda.Play();
Destroy(gameObject);
}
}
...

Repare que atribuímos o valor false, este é um tipo chamado bool (ou booliano) que conhece apenas dois valores
que pode ser true ou false (verdadeiro ou falso respectivamente), é o mesmo que dizer “ligado” ou “desligado”,
neste caso estamos dizendo que a exibição da moeda deve estar desativada.

Uma parte do problema está resolvida, agora precisamos ver uma maneira de remover a Moeda da cena após terminar a
reprodução do som da moeda. O método Destroy() possui outra versão que nos permite remover o GameObject após
um determinado tempo em segundos. Isso significa que podemos usar o tempo do clipe de áudio da moeda como o
tempo para remover o GameObject. Para descobrir o tempo do clipe de áudio utilizamos a instrução
somDaMoeda.clip.length, esta instrução deve ser especificada no segundo argumento do método Destroy(),
argumentos são separados utilizando uma vírgula.
4. Continuando na mesma linha da instrução do método Destroy(), utilize uma vírgula para separar o primeiro
argumento, em seguida insira a instrução somDaMoeda.clip.length:

Destroy(gameObject, somDaMoeda.clip.length);

5. Salve o script (“Ctrl + S”), em seguida volte para o Unity, aguarde a sincronização e execute o projeto (“Ctrl +
P”).

6. Experimente coletar as moedas e verifique se o som está reproduzindo normalmente.

Apesar do código está funcionando, existe outro problema. O componente Box Collider determina a colisão com a
Moeda, isso significa que apenas desativar o visual da Moeda, não quer dizer que a colisão é desativada também.
Dependendo da situação, o som da moeda pode ser reproduzido 2 vezes ou mais, pois o método OnTriggerEnter é
chamado toda vez que o Personagem colidir com a Moeda. Para resolver este problema é bem simples, basta desativar
o colisor da moeda exatamente no mesmo momento em que o visual é desativado também.

Desativando o Colisor da Moeda

1. Da mesma forma como você fez para obter o componente AudioSource e Renderer, crie outra variável para
guardar o componente do tipo BoxCollider:

BoxCollider colisor;

2. No método Start, obtenha o componente BoxCollider utilizando o método GetComponent:

void Start()
{
somDaMoeda = GetComponent<AudioSource>();
rend = GetComponent<Renderer>();
colisor = GetComponent<BoxCollider>();
}

3. Da mesma maneira como você fez para desativar o visual, faça o mesmo para desativar o colisor:

if (col.CompareTag("Player"))
{
rend.enabled = false;
colisor.enabled = false;
somDaMoeda.Play();
Destroy(gameObject, somDaMoeda.clip.length);
}

Dessa forma podemos garantir que uma única moeda é coletada apenas uma vez durante o tempo de reprodução do som
até sua remoção da cena, ou seja, se o GameObject não possui um colisor ou o colisor está desativado, o método
OnTriggerEnter nunca será executado.

A seguir você pode conferir o código completo do ScriptMoeda:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScriptMoeda : MonoBehaviour


{
AudioSource somDaMoeda;
Renderer rend;
BoxCollider colisor;

// Start is called before the first frame update


void Start()
{
somDaMoeda = GetComponent<AudioSource>();
rend = GetComponent<Renderer>();
colisor = GetComponent<BoxVollider>();
}

// Update is called once per frame


void Update()
{

void OnTriggerEnter(Collider col)


{
if (col.CompareTag("Player"))
{
rend.enabled = false;
colisor.enabled = false;
somDaMoeda.Play();
Destroy(gameObject, somDaMoeda.clip.length);
}
}
}
Animação da Moeda
Outro aspecto muito comum em se tratando de moedas, principalmente em jogos como Super Mario, é a animação de
rotação. Podemos fazer a mesma coisa no nosso jogo, deixando a moeda dinâmica em vez de simplesmente ficar
imóvel.

Podemos animar a rotação da moeda de duas maneiras:

Por código, utilizando instruções para transformar a rotação.


Usando o sistema de animação do Unity.

Para este exemplo, fazer via código é mais simples e fácil, mas como você já aprendeu um pouco sobre script, vamos
falar um pouco sobre o sistema de animação do Unity, também conhecido como Mecanim. Mais uma vez, não
mostrarei todos os detalhes, pois o escopo de animação é grande e requer um livro dedicado para o assunto, mas o que
vamos fazer agora é o suficiente para você criar simples animações.

Criando um Controlador de Animação

Para animar um GameObject, precisamos criar um asset do tipo Controlador de Animação, este asset nos permite
gerenciar todas as animações de um GameObject animado.

Criando e Definindo Um Controlador de Animação

1. Na janela Project, siga para o diretório “Assets > Objetos > Moeda” e crie uma pasta chamada “Animações”.
Em seguida entre nesta pasta.

2. Abra o menu de criação de assets e escolha a opção Animator Controller e renomeie para “MoedaAnimator”.

O asset do Controlador de Animação precisa ser referenciado por um componente chamado Animator. O componente
Animator é utilizado para definir as animações de um GameObject, enquanto que o Controlador de Animação é
utilizado para definir quais clipes de animação será utilizado.

3. Entre no Modo Prefab da Moeda. Em seguida na janela Inspector, clique no botão Add Component, acesse a
categoria Miscellaneous e selecione a opção Animator.

A propriedade mais importante do componente Animator é a Controller, é neste parâmetro que você precisa definir o
Controlador de Animação MoedaAnimator que foi criado antes.

4. Utilize qualquer uma das maneiras a seguir para definir a referência do controlador de animação:

Clique e arraste o asset MoedaAnimator da janela Project para dentro da caixa da propriedade Controller do
componente Animator.
No final do parâmetro Controller, clique no pequeno botão com círculo. Na janela que é exibida, selecione o
controlador MoedaAnimator e feche a janela:
Figura 6.35 - Definindo o Controlador de Animação da Moeda

5. Controladores de Animações são gerenciados usando a janela Animator, então siga para o menu Window,
aponte para Animation e selecione Animator.

6. A janela Animator será exibida de forma separada do layout atual. Baseando-se no Layout padrão, agrupe a
janela Animator logo ao lado da Asset Store:

Figura 6.36 - A janela Animator agrupado no centro da interface

Ainda no Modo Prefab da Moeda e com o GameObject selecionado, você vai ver algo parecido como na figura a
seguir:
Figura 6.37 - A janela Animator

O sistema de animações do Unity utiliza estados para reproduzir as animações, o bloco verde chamado Entry é o ponto
de entrada para começar uma animação, como não existe nenhum clipe de animação, não há nada para definir. Antes de
seguir para a próxima seção, vale a pena mencionar alguns comandos de navegação na janela Animator:

Utilize a sequência “Alt +botão esquerdo do mouse” ou apenas o botão do meio do mouse e mova o cursor
para mover a tela.
Use a roda do mouse para aplicar zoom.
Clique e arraste um estado (bloco retangular) para reorganizá-lo na tela.

Com o Controlador de Animação criado e definido, agora você precisa criar um clipe de animação, veremos como
fazer isso na próxima seção.

Criando e Gravando um Clipe de Animação

Um Clipe de Animação também é um asset criado no seu projeto, um Controlador de Animação pode conter quantos
Clipes de Animação for necessário. Objetos 3D que são modelados e animados em um programa externo, assim que
importados, o Unity cria o Controlador de Animação e os clipes de animação necessários, porém, como estamos
animando dentro do Unity, precisamos criar e defini-los manualmente, assim você tem uma ideia de como tudo
funciona.

Criando e Definindo Um Clipe de Animação

1. Para criar um clipe de animação, siga para a janela Project, no diretório “Assets > Objetos > Moeda >
Animações”, acesse o menu de criação de assets e selecione Animation.

2. Renomeie o clipe de animação para “MoedaRotacaoAnim”.

Repare que estamos tentando manter os nomes mais convenientes, sendo que MoedaAnimator refere-se ao
Controlador de Animação da Moeda, enquanto que MoedaRotacaoAnim refere-se a um Clipe de Animação
relacionado à “rotação”.
3. Para definir um clipe de animação, clique e arraste o mesmo da janela Project para dentro da janela Animator:

Figura 6.38 - Definindo um clipe de animação

Repare que um bloco laranja é adicionado com uma seta partindo do estado Entry para o clipe de animação
MoedaRotacaoAnim, sendo que Entry significa o estado de entrada inicial, pois o ponto de entrada padrão é o
primeiro clipe de animação que foi adicionado no Controlador de Animação:
Figura 6.39 - Blocos de animação

A cor laranja do bloco de estado MoedaRotacaoAnim indica o clipe de animação padrão que será executado ao iniciar.
Você também pode arranjar os blocos como quiser, simplesmente clique e arraste para a posição desejada.

Com o clipe de animação criado e adicionado no Controlador de Animação, agora você precisa realizar a animação
desejada, pois atualmente o clipe de animação está vazio.

Para animar objetos, utilizamos a janela Animation:

Animando a Rotação da Moeda

1. Siga para o menu Window, aponte para Animation e selecione a opção Animation (“Ctrl + 6”).

2. A janela Animation será exibida separadamente da interface, agrupe ela logo ao lado da janela Animator.

Ainda no Modo Prefab da Moeda e com o mesmo selecionado, repare que no painel esquerdo da janela Animation é
exibida uma lista dos clipes de animação disponível, já com a opção MoedaRotacaoAnim selecionado, pois é o único
disponível. Isso significa que a animação que for realizada será adicionada no clipe de animação atualmente
selecionado:
Figura 6.40 - Lista de clipes de animação deste GameObject

No lado esquerdo da janela você também vai encontrar uma lista das propriedades animadas, no nosso caso a lista está
vazia:

Figura 6.41 - Lista das propriedades animadas

No lado direito da janela você vai encontrar a linha do tempo do clipe de animação atualmente selecionado e o
Dopesheet onde os quadros da animação das propriedades são exibidos:
Figura 6.42 - Linha do tempo do clipe de animação atual

Podemos resumir a janela Animation da seguinte forma:

Lista de Propriedades: Utilizado para adicionar ou remover as propriedades de animação.


Linha do Tempo: Utilizado para visualizar ou modificar um quadro do clipe de animação. Os números
correspondem em segundos e quadros, por exemplo, 1:15 significa 1 segundo e 15 quadros.
Dopesheet: Visão geral dos quadros de animação de múltiplas propriedades arranjadas horizontalmente.

Podemos animar as propriedades manualmente utilizando o botão Add Property, ou podemos gravar uma animação
conforme as ações realizadas dentro do Unity.

Vamos gravar uma animação da seguinte maneira:

3. Entre no modo de gravação de animação clicando no botão com círculo vermelho indicado na figura a seguir:

Figura 6.43 - Modo de gravação de animação

O botão fica com fundo vermelho, inclusive a barra de quadros da linha do tempo e um ícone vermelho é exibido na
aba da janela, tudo para indicar que você está no modo de gravação:

Figura 6.44 - Modo de gravação de animação ativado

Agora qualquer propriedade que você modificar na janela Inspector, ela será gravada como parte da animação. Para
animar a rotação da moeda, precisamos alterar a coordenada Z da rotação. O primeiro quadro da animação deve
começar no ângulo 0, e depois terminar em uma volta completa de 360 grau.

4. Para animar o quadro inicial, certifique-se que esteja no primeiro quadro (começando do zero), simplesmente
mova a linha do tempo para o início, ou utilize o seguinte campo de texto para inserir manualmente o quadro
desejado:
Figura 6.45 - Selecionando o quadro a ser animado

Repare que no exemplo da figura anterior, o quadro atual é o 5, para o nosso exemplo da moeda tenha certeza que
realmente esteja no 0, o exemplo anterior foi apenas para demonstrar a seleção do quadro.

5. Siga para a janela Inspector, no componente Transform e na propriedade Rotation, altere a coordenada Z para o
valor 0, pois a rotação vai começar a partir do ângulo 0.

Ao fazer isso, repare que os campos da propriedade Rotation ficam em vermelho indicando que foram gravados na
animação, além disso, a linha do tempo exibe o quadro alterado.

Alterando a Propriedade Inicial Para Animar


Se a coordenada Z da propriedade Rotation já conter o valor 0 e você persistir em alterar para 0, o valor não
será gravado. Isso acontece porque o Unity espera que você modifique para um valor diferente do atual, para
resolver isso, simplesmente altere para qualquer valor e em seguida altere para 0 novamente, isso vai acionar a
gravação da propriedade como esperado.

Veja que a lista de propriedades animadas é atualizada com as propriedades modificadas. Expanda a propriedade
Moeda : Rotation clicando na pequena seta ao lado do nome para expandir suas propriedades:

Figura 6.46 - Expandindo as propriedades animadas

Verifique se Rotation.z possui o valor 0, você pode alterar o valor da propriedade manualmente clicando no valor logo
ao lado do nome da propriedade modificada.

6. Para animar a rotação de 360 graus você precisa pular para um quadro diferente, então selecione o quadro 60
utilizando o campo de texto como indicado na Figura 6.45 ou use a barra da linha do tempo.

7. Novamente na propriedade Rotation do componente Transform, altere a coordenada Z para o valor 360.
Mais uma vez a alteração será gravada automaticamente na linha do tempo do quadro atual.

Interpolando Valores
Repare que modificamos apenas dois quadros (0 e 60), o valor da propriedade de animação da rotação é
interpolado de 0 a 360 automaticamente pelo Unity durante o decorrer do tempo da animação entre os dois
quadros.

8. Assim que terminar de gravar as propriedades, desative o botão do modo de gravação para evitar que as
próximas alterações sejam gravadas sem querer.

9. Use a linha do tempo para voltar para o quadro 0.

Vídeo 6.2 - Animando a rotação da Moeda

Execute o projeto (“Ctrl + P”) e verifique como ficou a animação.

Reiniciando a Animação

Ao executar o projeto para testar, você vai descobrir que a animação é executada apenas uma vez. Isso ocorre por
padrão, pois a animação não é reiniciada ao finalizar.

Executando a Animação Em Um Laço Infinito

1. Siga para a janela Project e selecione o asset do clipe de animação (MoedaRotacaoAnim).

A janela Inspector vai exibir algumas propriedades do clipe de animação selecionado.

2. Ative a propriedade Loop Time, isso vai fazer com que a animação seja reiniciada quando chegar no final:

Figura 6.47 - Executando a animação em um laço infinito

Execute o projeto novamente e verifique se a animação está reiniciando como esperado.


Alterando a Curva da Animação

Outro detalhe que talvez você já tenha notado é ao reiniciar a animação da moeda, um pequeno atraso ocorre, como se a
animação diminuísse de velocidade até voltar na velocidade normal. Para resolver este problema, precisamos alterar a
curva da animação para uma linha linear, caso contrário, a curva padrão vai “gerar” o atraso indesejado durante o
decorrer do tempo da animação. O Dopesheet é uma forma compacta de visualizar quando as propriedades são
alteradas, mas no modo de Curvas você tem um controle mais preciso do valor de cada propriedade durante o decorrer
do tempo da animação:

Alterando a Curva da Animação

1. Na janela Animation e na parte inferior do painel de propriedades animadas, clique no botão Curves:

Figura 6.48 – Entrando no modo de curvas de animação

Ao fazer isso, repare que a linha do tempo é atualizada para exibir as curvas da animação em vez dos quadros.

2. Com a propriedade Moeda : Rotation expandida, selecione apenas a propriedade Rotation.z. Dessa forma
podemos focar apenas na curva que precisamos alterar:
Figura 6.49 - Selecionando uma propriedade de animação

3. Na linha do tempo, pressione “F” para ampliar a curva na tela:

Figura 6.50 - Curva de animação ampliada

Repare na curvatura que ocorre do início até o fim, o Unity usa o termo “curva” para representar os valores de cada
propriedade animada de forma gráfica, ou seja, as linhas no gráfico são referidas como curvas, independente se a linha
é reta ou realmente curvada, isso significa que os pontos da curva podem ser lineares também.

4. Selecione o primeiro ponto da curva clicando apenas uma vez sobre o mesmo, em seguida mantenha a tecla
“Shift” pressionada e clique no segundo ponto:
Figura 6.51 - Selecionando os pontos da curva

5. Clique com o botão esquerdo do mouse sobre um dos pontos, no menu que é exibido, aponte para Both
Tangents (ambos os pontos) e selecione a opção Linear:
Figura 6.52 – Alterando a curva de ambos os pontos

Repare que a “curva” agora está reta como desejado:


Figura 6.53 - Curva com ambos os pontos lineares

Vídeo 6.3 - Alterando a curva da animação

Execute o projeto novamente para testar e dessa vez a animação deve ser executada normalmente como esperado.

Velocidade da Animação

A velocidade da animação basicamente pode ser ajustada de duas maneiras, a primeira é alterando a taxa de quadros
por segundo ou modificando a propriedade Speed diretamente no clipe da animação. Para entender melhor sobre a
taxa de quadros por segundo, precisamos voltar na linha do tempo da animação.

Repare que nossa animação vai de 0 a 1 segundo, como indicado na linha do tempo pelo número 1:00:

Figura 6.54 - Linha do tempo da animação

Por padrão o Unity utiliza 60 quadros por segundo, é por isso que no começo pedi para pular para o quadro 60 para
animar a rotação de 360 grau. Em outras palavras, se 60 quadros são exibidos por segundo e nossa animação utiliza
exatamente 60 quadros, então teremos exatamente 1 segundo de animação. A taxa de quadros da animação pode ser
alterada a qualquer momento utilizando o parâmetro Samples que se encontra na barra de controles do painel das
propriedades de animação:

Figura 6.55 - Taxa de quadros

Se você não encontrar o campo Samples, pode ser que o mesmo esteja escondido, para exibi-lo, siga para a linha do
tempo, no canto superior direito da janela, clique no botão com ícone de engrenagem e selecione a opção Show Sample
Rate:

Figura 6.56 - Exibindo o campo de taxa de quadros

Por exemplo, se você alterar Samples para o valor 24, você vai notar que a linha do tempo expande até 2:12. Com um
tempo de animação maior, consequentemente a animação vai levar mais tempo para executar.

A outra maneira mais simples de controlar a velocidade da animação é diretamente no clipe da animação. Siga para a
janela Animator, selecione o estado de animação desejado, no nosso caso seria o único MoedaRotacaoAnim
disponível, em seguida na janela Inspector, altere o valor do parâmetro Speed, quanto maior o valor, mais rápido será
o tempo da animação:
Figura 6.57 - Alterando a velocidade do clipe de animação
Contando as Moedas
No nosso jogo podemos correr no cenário e coletar as moedas, porém, o jogador não sabe quantas moedas é preciso
coletar e quantas já foram coletadas. Nesta seção vamos criar uma interface do usuário para exibir o progresso atual.

Interface do Usuário
A interface do usuário ou User Interface (UI) é uma área na tela que contém elementos interativos e não
interativos pelo usuário, que pode ser botão, texto, slider, janelas, etc. ou qualquer outro tipo de controle.

Preparando a Interface

A tela de pintura ou a Canvas é onde os elementos da interface são desenhados, é um GameObject especial, isto é,
porque todos os elementos da interface devem estar contidos dentro da Canvas. Elementos da interface que não
estiverem dentro da Canvas, não serão renderizados (exibidos) como parte da interface.

Criando Uma Canvas

1. Siga para o menu GameObject ou o botão Create na janela Hierarchy, aponte para o menu UI e selecione a
opção Canvas.

2. Como estamos trabalhando com elementos 2D, ative o botão 2D que se encontra na barra de controles da janela
Scene.

A visão 2D também pode ser acionada usando o atalho “2” (com a janela Scene no contexto atual).

3. Com o GameObject Canvas selecionado, siga para a janela Scene e pressione “F” para focar a visão na Canvas.

A área por dentro da Canvas é representado por suas bordas retangulares:


Figura 6.58 - Bordas da Canvas no modo 2D da cena

Repare que a área de exibição da Canvas é bem maior que a visão da câmera da cena, isso acontece porque o modo de
exibição padrão da Canvas é diferente dos GameObjects comuns da cena, ou seja, elas se encontram em um espaço
diferente.

4. Desabilite a Skybox para evitar qualquer “poluição visual” na tela durante a criação da interface, utilize o botão
de efeitos que se encontra na barra de controles da janela Scene:

Figura 6.59 - Desabilitando a Skybox

Caso queira focar novamente nos objetos da cena que estão fora da Canvas, basta selecionar o objeto em questão na
janela Hierarchy, por exemplo, o Personagem, em seguida na janela Scene pressione “F”, dessa forma você não
precisa ficar aplicando zoom manualmente.

A Ferramenta Retangular
A ferramenta de transformação mais importante ao se trabalhar com elementos 2D é a Ferramenta Retangular
(T). Durante o decorrer desta seção iremos transformar os elementos da interface com mais precisão utilizando
a janela Inspector, de qualquer maneira, é recomendável utilizar a ferramenta retangular sempre quando
precisar transformar os elementos da Canvas diretamente na janela Scene.

Com a Canvas selecionada, podemos ver suas propriedades na janela Inspector. Por enquanto não se preocupe com
todas as propriedades, nesta seção vamos focar exclusivamente no essencial para finalizar nosso jogo.

Criando e Definindo o Painel

Vamos criar um painel de fundo onde deve conter as informações do jogo, podemos fazer isso utilizando uma imagem
como fundo. Esta imagem pode ser criada diretamente dentro do Unity:

Criando e Definindo o Painel do Jogo

1. Para criar o painel de imagem de fundo, clique com o botão direito do mouse sobre o GameObject Canvas na
janela Hierarchy, aponte para UI e selecione a opção Image.

Dessa forma o elemento será adicionado dentro da Canvas (como filho no parentesco), lembre-se que todos os
elementos da interface presentes no menu UI devem ser adicionados como filhos de uma Canvas.

2. Renomeie o GameObject de Image para “Painel do Jogo”.

Um quadrado branco será adicionado no meio da tela, com o mesmo selecionado, siga para a janela Inspector e você
vai encontrar o componente Rect Transform.

Sobre o Componente Rect Transform


O componente Rect Transform é parecido com o componente Transform que já vimos antes, a diferença é que
o Rect Transform foi designado especialmente para os elementos da interface gráfica. O componente
Transform de um GameObject representa um único ponto, enquanto que o Rect Transform representa um
retângulo em que o elemento UI é contido. A Canvas também possui um Rect Transform, mas sua base é
definida conforme a resolução da plataforma.

Precisamos expandir e mover o painel para o topo da tela. A maneira mais simples de fazer isso é utilizando o painel de
âncoras pré-definidas.

3. Com o Painel do Jogo selecionado, siga para a janela Inspector e no componente Rect Transform, clique no
seguinte botão como indicado na figura a seguir para abrir a janela de âncoras pré-definidas:
Figura 6.60 - Janela de âncoras pré-definidas

Nesta janela podemos definir o ponto de manipulação dos elementos da interface, além de posicioná-los em diferentes
locais comuns. Por padrão, novos elementos são posicionados no centro (vertical e horizontal).

Âncoras
Os controles na interface possuem uma posição e tamanho, mas é a âncora que define o ponto de referência do
elemento, dessa forma podemos posicionar e redimensionar os elementos com precisão conforme a posição
atual da âncora.

4. Para mover e expandir o painel no topo da tela, mantenha a tecla “Shift” pressionada para definir o ponto de
manipulação, segure também a tecla “Alt” para transformar o elemento na posição a ser escolhida, em seguida
selecione a opção Top e Stretch, ou seja, no topo e esticar:
Figura 6.61 - Expandindo e posicionando o painel no topo

Teremos o seguinte resultado, repare que as âncoras são identificadas na cena com os ícones de “4 trevos”:

Figura 6.62 - Resultado após expandir e posicionar o painel no topo

A altura padrão da imagem é de 100 pontos, ocupando muito espaço na tela, vamos criar um painel com uma altura
menor.

5. Para ajustar a altura do painel, ainda no componente Rect Transform, altere o parâmetro Height (altura) para o
valor 25:

Figura 6.63 - Alterando a altura do elemento da interface

Para deixar o painel mais discreto, vamos alterar a cor branca padrão para um preto transparente. Para fazer isso
utilizamos a propriedade Color do componente Image.

6. Na janela Inspector e no componente Image, clique na caixa de cor logo ao lado do parâmetro Color. Altere a
cor para um preto e transparência de 60.

Utilize os valores RGBA (1.0, 0, 0, 60):


Figura 6.64 - Alterando a cor de fundo do painel do jogo

Vídeo 6.4 - Criando e definindo o painel do jogo

Texto das Moedas

Com o painel definido, agora podemos adicionar o texto que deve conter as informações de quantas moedas existe no
jogo e quantas já foram coletadas pelo jogador. Para adicionar textos na interface vamos utilizar o pacote TextMesh
Pro que já faz parte do projeto, porém, seus recursos necessários ainda não foram importados:

Adicionando e Definindo o Texto das Moedas

1. Para importar os assets necessários do TextMesh Pro, siga para o menu Window, aponte para TextMesh Pro e
selecione a opção Import TMP Essentials Resources (Importar os Recursos Essenciais do TMP).

2. A janela Import Unity Package será exibida, deixe tudo marcado e clique no botão Import:

Figura 6.65 – Importando os assets essenciais do TextMesh Pro

Uma pasta chamada “TextMesh Pro” será adicionada na raiz do seu projeto, contendo os recursos essenciais do
pacote.

3. Como o texto faz parte do painel, precisamos adicioná-lo como filho do Painel do Jogo, então na janela
Hierarchy, clique com o botão direito do mouse sobre o GameObject Painel do Jogo, aponte para UI e selecione a
opção TextMeshPro – Text.

O texto “New Text” (novo texto) será adicionado no centro do painel, precisamos ajustar a fonte e as bordas do texto
para caber corretamente dentro do painel:

Figura 6.66 - Novo texto adicionado

Text e TextMeshPro – Text


Repare que o menu Create > UI contém a opção Text e TextMeshPro – Text, a opção Text é um elemento de
texto antigo que possui alguns problemas internos (texto borrado e desempenho), este elemento será
descontinuado em breve a favor do TextMeshPro – Text.

4. Renomeie o novo texto para “Texto Moedas”.

Mais uma vez vamos utilizar a janela de âncoras pré-definidas para reposicionar o texto à esquerda e no centro
vertical.

5. Com a janela das âncoras aberta, mantenha a tecla “Shift” e “Alt” pressionada e selecione a opção “Middle e
Left” (no centro e na esquerda) como indicado na figura a seguir:
Figura 6.67 - Posicionando o texto no centro vertical e à esquerda

6. No componente Rect Transform, altere o parâmetro Height (altura) para o valor 25, ou seja, exatamente na
mesma altura do Painel do Jogo.

Atualmente o texto está muito “colado” na lateral esquerda da tela, vamos deixar um espaço entre as bordas da tela e o
texto.

7. No componente Rect Transform, altere Pos X para o valor 10.

Dessa forma o texto será posicionado 10 pontos para frente no eixo X, partindo do ponto de ancoragem que foi
definido no canto esquerdo do Painel do Jogo na etapa 5 anterior. Agora precisamos alterar o tamanho da fonte, pois
atualmente está muito grande e saindo fora das bordas do Painel do Jogo.

8. No componente Text Mesh Pro UGUI, na seção Main Settings, altere Font Size (tamanho da fonte) para o valor
15:

Figura 6.68 - Alterando o tamanho da fonte do texto para 15 pontos

9. Em Font Style (estilo da fonte) ative o botão B para deixar a fonte em negrito:
Figura 6.69 - Texto em negrito

10. Em Alignment (alinhamento), ative o botão Middle para alinhar o texto no centro vertical das bordas do texto:

Figura 6.70 - Alinhando o texto no centro vertical

11. Para alterar o texto “New Text” padrão, utilize o campo de texto Text, apague o texto padrão e insira Moedas:
0 / 0:

Figura 6.71 - Alterando o texto padrão

O texto no parâmetro Text será substituído no código, mas você pode simular uma prévia do que seria exibido
escrevendo o texto desejado. Veja que 0 / 0 indica a quantidade de moedas coletadas e presentes no cenário
respectivamente, por exemplo, 2 / 5 quer dizer 2 moedas coletadas e 5 totais no cenário.

Vídeo 6.5 - Adicionando e definindo o texto das moedas

Na figura a seguir você pode conferir o resultado final:


Figura 6.72 - Texto das moedas

Atualizando o Total de Moedas

Com a interface das moedas definida, agora precisamos ver uma maneira de contar o total de moedas no jogo e
atualizar o total de moedas coletado pelo jogador. Como este é um comportamento de jogo, vamos resolver este
problema usando scripts.

Com o script ScriptMoeda aberto, repare que utilizamos o método Start para obter os componentes essenciais que
são utilizados no restante do código, isso é feito para cada cópia da Moeda na cena, lembrando que o método Start é
executado antes de o primeiro quadro do jogo ser exibido na tela, ou seja, basicamente é executado antes de iniciar o
gameplay. Sabendo disso, podemos utilizar o método Start para guardar em uma variável numérica o total de moedas
no jogo.

Definindo a Variável do Total de Moedas

1. Com o script ScriptMoeda aberto no editor de código, declare uma variável do tipo int chamado Total:

...
public class ScriptMoeda : MonoBehaviour
{
AudioSource somDaMoeda;
Renderer rend;
BoxCollider colisor;

public static int Total = 0;


...

Alguns pontos importantes do código anterior:

A instrução public diz que esta variável pode ser acessada e modificada por outro script.
O modificador static torna a variável estática fazendo com que a mesma pertença ao seu próprio tipo, em vez
de um objeto específico. Em outras palavras, cada cópia da moeda possui sua própria instância do script
ScriptMoeda, mas uma variável static no mesmo script pertence apenas ao ScriptMoeda em vez de cada
cópia da moeda.
O tipo de variável int determina que a variável é do tipo numérica e é um valor inteiro.
Repare que inicializamos a variável com o valor 0 padrão usando o operador de atribuição (=).

Agora toda vez que o método Start de uma das cópias da Moeda for executado, a variável Total deve ser
incrementada em + 1.
2. No C# podemos incrementar uma variável utilizando o operador de adição +, faça o seguinte dentro do método
Start:

...
// Start is called before the first frame update
void Start()
{
somDaMoeda = GetComponent<AudioSource>();
rend = GetComponent<Renderer>();
colisor = GetComponent<BoxCollider>();

Total = Total + 1;
}
...

Basicamente atribuímos para a variável Total o próprio valor somado com 1. Lembre-se que pelo fato da variável
Total possuir o modificador static, a variável não é exclusiva da cópia da moeda, mas sim do próprio
ScriptMoeda.

Agora precisamos utilizar o total de moedas para atualizar a interface, para fazer isso precisamos criar outro script para
gerenciar o Painel do Jogo.

Criando o Script do Painel do Jogo

1. Antes de qualquer coisa, crie uma pasta chamada “Scripts” na raiz do projeto (acesse o diretório Assets, clique
no botão Create da janela Project e selecione Folder). Em seguida entre no novo diretório.

2. Crie um Script C# chamado PainelDoJogo (clique com o botão direito do mouse em qualquer local vazio da
pasta atual, aponte para Create e selecione a opção C# Script).

3. Adicione o script PainelDoJogo para o GameObject Painel do Jogo (simplesmente clique e arraste o script
PainelDoJogo da janela Project para dentro do GameObject Painel do Jogo na janela Hierarchy).

4. Abra o script PainelDoJogo no editor de código (clique duas vezes sobre o mesmo na janela Project).

5. Remova o conteúdo inicial da classe que não utilizaremos neste exemplo, ficando como no código a seguir:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PainelDoJogo : MonoBehaviour


{

O script PainelDoJogo basicamente será utilizado para atualizar os textos na interface, mas como podemos alterar o
texto do GameObject Texto Moedas diretamente pelo script? A primeira coisa que precisa ser feito é definir a
referência do texto:

Definindo a Referência do Texto das Moedas


1. Com o script PainelDoJogo aberto no editor de código, declare uma variável public do tipo
TextMeshProUGUI chamado TextoMoedas:

...
public class PainelDoJogo : MonoBehaviour
{
public TextMeshProUGUI TextoMoedas;
...

Repare que o editor de código aponta um erro (traçado vermelho em baixo do nome) dizendo que o tipo
TextMeshProUGUI não pode ser encontrado, isso acontece quando o editor desconhece de algum nome:

Figura 6.73 - Visual Studio indicando erro no código

Para resolver este problema, precisamos adicionar um namespace (ou espaço de nome) contendo o tipo que
precisamos. No topo do script inicial você vai encontrar três linhas que são os namespace adicionados por padrão:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PainelDoJogo : MonoBehaviour


{
...

Os namespaces são utilizados para melhor organizar seus projetos, são como “categorias” ou “blocos” que contém
trechos de código, dessa forma podemos ter acesso a todas as partes desses códigos. Para adicionar um novo
namespace, utilize a palavra-chave using seguido do espaço de nome desejado, exatamente como foi feito no código
inicial.

2. Para permitir que o tipo TextMeshProUGUI esteja disponível no nosso script, adicione o namespace TMPro:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class PainelDoJogo : MonoBehaviour


{
...

Ao fazer isso, o erro do nome desconhecido é resolvido.

3. Salve o script e volte para o Unity.

Assim que as alterações do script forem sincronizadas, selecione o GameObject Painel do Jogo e você vai notar que o
componente Painel Do Jogo expõe uma propriedade chamada Texto Moedas, que é, na verdade, a variável que
definimos no script. Isso acontece porque a variável TextoMoedas possui o modificador public, dessa forma
podemos alterar e definir referências diretamente na janela Inspector. Então antes de utilizar a variável TextoMoedas,
você precisa definir uma referência.

4. Para definir a referência da variável TextoMoedas, clique e arraste o GameObject Texto Moedas da janela
Hierarchy, para dentro da caixa da propriedade Texto Moedas:

Figura 6.74 - Definindo a referência do Texto Moedas

Com isso feito, agora precisamos ver uma maneira de acessar o script PainelDoJogo diretamente pelo script
ScriptMoeda, podemos fazer isso utilizando uma referência do próprio script:

Definindo a Referência do Script Paineldojogo

1. De volta no script PainelDoJogo e no topo da classe, declare uma variável do tipo PainelDoJogo chamado
Painel:

...
public class PainelDoJogo : MonoBehaviour
{
public static PainelDoJogo Painel;
public TextMeshProUGUI TextoMoedas;
...

Lembre-se que o modificador public torna a variável acessível para outros scripts, enquanto static torna a variável
exclusiva do script atual em vez da cópia do GameObject onde o script foi adicionado. Toda vez que formos usar a
instrução PainelDoJogo.Painel, estaremos referenciando o script PainelDoJogo, mas atualmente a variável
Painel é nula, ou seja, não possui nenhuma referência. Podemos definir esta referência dentro do método Start, ou
melhor ainda, dentro do método Awake. A diferença do método Awake e o Start, é que o Awake é executado antes do
Start, antes mesmo do GameObject ser ativado na cena, muito útil para inicializar variáveis antes que o jogo tente
utilizar alguma referência que não existe.

2. Declare o método Awake exatamente como a seguir:


...
public TextMeshProUGUI TextoMoedas;

void Awake()
{

}
}

Já sabemos que o nome gameObject refere-se ao GameObject atual, para referenciar o script atual, use a palavra-
chave this.

3. Dentro do método Awake, inicialize a variável Painel atribuindo this como valor:

void Awake()
{
Painel = this;
}

Dessa forma quando formos usar a instrução PainelDoJogo.Painel, o script atual, neste caso o próprio script
PainelDoJogo será referenciado.

Com as referências definidas, agora precisamos criar o método responsável por atualizar o texto na interface. Métodos,
em geral, assim como o método Start, Awake ou OnTriggerEnter, possuem uma finalidade própria, e quando o
método é chamado, suas instruções são executadas. Estes métodos que mencionei são executados automaticamente pelo
Unity, porém, vamos criar nosso próprio método para atualizar o texto das moedas.

Atualizando o Total de Moedas

1. Baseando-se na anatomia do método Awake ou Start, declare um método chamado AtualizarMoedas() e


utilize o modificador public, assim podemos chamar este método por outro script:

...
Painel = this;
}

public void AtualizarMoedas()


{

}
}

A variável TextoMoedas possui um membro chamado text, assim podemos acessar o texto atual usando a sintaxe de
ponto da seguinte maneira: TextoMoedas.text. Sabendo disso, agora precisamos “compor” um texto usando o texto
padrão como modelo inicial (Moedas: 0 / 0). A construção do texto é feita usando strings e o operador de
concatenação que nos permite juntar duas strings para compor o texto final.

2. Dentro do método AtualizarMoedas(), faça como a seguir, explicarei o processo logo em seguida:

public void AtualizarMoedas()


{
TextoMoedas.text = "Moedas: 0 / " + ScriptMoeda.Total;
}
Alguns pontos importantes sobre o código anterior:

No C# textos são chamados de strings ou o tipo string, elas são criadas usando duas aspas duplas “”, tudo que
estiver entre as aspas fazem parte da string.
Para inserir o texto de forma dinâmica, usamos o operador de concatenação representado pelo sinal de +, repare
que o sinal de + foi utilizado antes para realizar adição, mas seu uso pode mudar dependendo da forma como foi
implementado.
Utilizamos a sintaxe de ponto para acessar a variável ScriptMoeda.Total. Isso só é possível, pois a variável
Total do script ScriptMoeda possui o modificador public, assim podemos acessá-lo fora do seu script de
origem.
Além disso, só podemos chamar a variável ScriptMoeda.Total dessa forma, pois ela possui o modificador
static, caso contrário precisaríamos de uma referência explícita de um objeto específico.

Toda vez que a variável ScriptMoeda.Total for alterada, precisamos chamar o método AtualizarMoedas() para
atualizar as informações na interface.

3. No script ScriptMoeda, dentro do método Start, logo após a linha que adiciona+ 1 para a variável Total,
chame o método AtualizarMoedas() da seguinte maneira:

...
Total = Total + 1;
PainelDoJogo.Painel.AtualizarMoedas();
}
...

Repare que foi utilizado a sintaxe de ponto duas vezes, uma para acessar a referência do script PainelDoJogo e a
outra para chamar o método AtualizarMoedas(). Toda vez que uma moeda for adicionada no total de moedas, o
texto na interface será atualizado com o valor atual.

4. Salve ambos os scripts e volte para o Unity.

Execute o projeto e você vai ver que a interface é atualizada conforme o total de moedas que você adicionou no jogo:

Figura 6.75 - Painel do jogo exibindo o total de moedas no jogo

Atualizando as Moedas Coletadas

Para atualizar o total de moedas coletadas, vamos seguir o mesmo processo que fizemos para atualizar o total de
moedas no jogo.
Guardando o Total de Moedas Coletadas

1. Com o script ScriptMoeda aberto, declare uma variável do tipo int chamado Coletado com o valor 0 inicial,
exatamente da mesma forma como você fez para a variável Total:

...
BoxCollider colisor;

public static int Total = 0;


public static int Coletado = 0;

// Start is called before the first frame update


void Start()
{
...

Para atualizar a variável Coletado, vamos utilizar a mesma estrutura condicional que detecta a colisão com o
Personagem.

2. Dentro do método OnTriggerEnter e na estrutura condicional que verifica a colisão com o Personagem,
adicione + 1 no valor total da variável Coletado:

void OnTriggerEnter(Collider col)


{
if (col.CompareTag("Player"))
{
rend.enabled = false;
colisor.enabled = false;

somDaMoeda.Play();

Coletado = Coletado + 1;

Destroy(gameObject, somDaMoeda.clip.length);
}
}

Agora precisamos modificar o método AtualizarMoedas() para atualizar ambas as informações na interface.

Atualizando a Interface das Moedas

1. Com o script PainelDoJogo aberto, modifique a linha que atualiza o texto das moedas para conter o valor da
variável ScriptMoeda.Coletado:

public void AtualizarMoedas()


{
TextoMoedas.text = "Moedas: " + ScriptMoeda.Coletado + " / " + ScriptMoeda.Total;
}

2. Salve o script PainelDoJogo e volte para o script ScriptMoeda.

Para finalizar, precisamos chamar o método AtualizarMoedas() toda vez que o jogador coletar alguma moeda,
garantindo que a interface fique atualizada.

3. De volta no método OnTriggerEnter, logo após adicionar + 1 no total de moedas coletado, chame o método
AtualizarMoedas():

...
somDaMoeda.Play();

Coletado = Coletado + 1;
PainelDoJogo.Painel.AtualizarMoedas();

Destroy(gameObject, somDaMoeda.clip.length);
}
...

4. Salve ambos os scripts e volte para o Unity.

Experimente executar o projeto e tente coletar as moedas, veja se a interface é atualizada como esperado.
Temporizador de Fim de Jogo

Todo jogo possui algum tipo de desafio, para o nosso jogo, vamos criar um temporizador para o jogador coletar as
moedas antes de uma contagem regressiva zerar. Se o temporizador finalizar antes do jogador coletar todas as moedas,
será o fim do jogo e a cena será recarregada para o jogador tentar novamente.

Criando o Texto do Temporizador

Da mesma forma como fizemos para o contador de moedas, vamos criar um texto para exibir a contagem regressiva.

Criando o Texto do Temporizador

1. Clique com o botão direito do mouse no GameObject Canvas na Hierarchy, aponte para UI e selecione a opção
TextMeshPro – Text.

2. Renomeie o GameObject para “Texto Temporizador”.

3. No componente Rect Transform, ajuste a largura (Width) para o valor 100 e a altura (Height) para o valor 25
(mesma altura do painel do jogo).

4. No componente Text Mesh Pro UGUI, altere o parâmetro Text para o texto 60 (assumindo a contagem
regressiva inicial).

5. Em Font Style, ative o botão B (bold ou negrito).

6. Altere o tamanho da fonte (Font Size) para o valor 22.

7. No alinhamento da fonte (Alignment) alinhe o texto no centro horizontal e vertical:

Figura 6.76 - Alinhando o texto no centro horizontal e vertical

Criando a Lógica do Temporizador

Com o texto criado, agora podemos criar o script do temporizador:

Criando o Script e o GameObject do Temporizador

1. Na janela Project, acesse o diretório “Assets > Scripts” e crie um Script C# chamado Temporizador.
2. Adicione um GameObject vazio (“Ctrl + Shift + N”) e renomeie para “Temporizador”.

3. Adicione o script Temporizador no GameObject do mesmo nome que foi criado na etapa 2 anterior.

4. Abra o script Temporizador no editor de código.

Em seguida precisamos obter a referência do Texto Temporizador:

A Referência do Temporizador

1. Abra o script PainelDoJogo no editor de código.

2. Crie uma variável public do tipo TextMeshProUGUI chamado TextoTemporizador:

...
public class PainelDoJogo : MonoBehaviour
{
public static PainelDoJogo Painel;
public TextMeshProUGUI TextoMoedas;
public TextMeshProUGUI TextoTemprorizador;

void Awake()
{
...

3. Salve o script e volte para o Unity.

4. Com o GameObject Painel do Jogo selecionado, defina a referência no parâmetro Texto Temporizador como
sendo o GameObject do mesmo nome.

De volta no script Temporizador, agora precisamos determinar o tempo máximo da contagem regressiva e definir o
contador.

Definindo o Tempo Máximo

1. Declare uma variável public do tipo float chamado TempoMaximo com o valor 60 inicial:

...
public class Temporizador : MonoBehaviour
{
public float TempoMaximo = 60;
...

Assim como o tipo int, o tipo float é outro tipo de variável numérica, com a diferença que o float pode
armazenar valores decimais, como 3.14, enquanto o tipo int pode armazenar apenas valores inteiros, como 3, 10,
105, etc. Lembrando que pelo fato da variável TempoMaximo possuir o modificador public, você pode alterar seu
valor diretamente na janela Inspector:
Figura 6.77 - Variável TempoMaximo exposto na janela Inspector

Com isso feito, agora só nos resta exibir o valor da contagem regressiva no painel do jogo. O processo é parecido como
fizemos para exibir as informações das moedas.

Exibindo o Contador do Tempo Máximo

1. No script PainelDoJogo, logo após o método AtualizarMoedas(), declare outro método chamado
AtualizarTemporizador():

...
public void AtualizarMoedas()
{
TextoMoedas.text = "Moedas: " + ScriptMoeda.Coletado + " / " +
ScriptMoeda.Total;
}

public void AtualizarTemporizador(float tempo)


{

}
}

Repare que neste caso o método recebe um parâmetro do tipo float chamado tempo, um parâmetro basicamente é
uma variável passada para o método no momento da sua chamada. Usaremos o valor da variável tempo para atualizar o
texto do temporizador.

2. Para atualizar o texto do temporizador, simplesmente atribua para TextoTemporizador.text o parâmetro


tempo:

public void AtualizarTemporizador(float tempo)


{
TextoTemprorizador.text = tempo;
}

Veja que o editor de código menciona um erro dizendo que não é possível converter de forma explícita o tipo float
para string. Isso acontece porque a variável TextoTemporizador.text espera um valor do tipo string, mas
estamos atribuindo um valor do tipo float. Para resolver isso, podemos converter a variável numérica para o tipo
string no momento da sua atribuição.

3. Para converter o valor do parâmetro tempo do tipo float para o tipo string, utilize a sintaxe de ponto para
acessar o método ToString() da seguinte maneira:

TextoTemprorizador.text = tempo.ToString();

Ao fazer isso, o erro será resolvido.

Conversão Automática
Repare que para atualizar o texto das moedas, não precisamos realizar essa conversão da variável numérica para
string, isso acontece porque utilizamos o operador de concatenação para compor o texto, dessa forma a
variável numérica é convertida para string automaticamente.

De volta no script Temporizador, agora precisamos ver uma maneira de diminuir o valor da variável TempoMaximo
subtraindo 1 a cada segundo. Este é um comportamento que pode ser feito dentro do método Update, pois este método
é chamado diversas vezes por segundo, dessa forma podemos manter a contagem regressiva atualizada durante o
decorrer do jogo. Para contar em segundos, podemos utilizar a instrução Time.deltaTime, o valor retornado por
deltaTime é o tempo em segundos que o jogo utilizou para completar a execução do quadro de jogo anterior.

4. Subtraia o valor atual da variável TempoMaximo com o valor de Time.deltaTime, faça isso dentro do método
Update. Para subtrair, utilize o operador de sinal de menos (-):

// Update is called once per frame


void Update()
{
TempoMaximo = TempoMaximo - Time.deltaTime;
}

Com a contagem regressiva sendo atualizada, só nos resta atualizar a interface.

5. Logo após atualizar a variável TempoMaximo, chame o método AtualizarTemporizador(), passando como
argumento a variável TempoMaximo:

// Update is called once per frame


void Update()
{
TempoMaximo = TempoMaximo - Time.deltaTime;
PainelDoJogo.Painel.AtualizarTemporizador(TempoMaximo);
}

6. Salve todos os scripts e volte para o Unity. Em seguida execute o projeto para testar.

Veja que o temporizador está funcionando como deveria, exceto pela parte decimal que também é exibida, na verdade,
queremos exibir a contagem regressiva em número inteiro. Isso acontece porque o valor retornado por
Time.deltaTime é do tipo float, por isso que a variável TempoMaximo é do tipo float também, caso fosse de
outro tipo, teríamos um erro de conversão de valor. Para resolver isso, podemos formatar a string diretamente no
script PainelDoJogo, na linha onde utilizamos o método ToString() podemos passar um argumento que determina
como o número é exibido.

7. Passe a string “0” como argumento para o método ToString(), ficando: ToString(“0”):
TextoTemprorizador.text = tempo.ToString("0");

Dessa forma o valor será exibido sem qualquer parte decimal.

Reiniciando Após o Fim do Jogo

O fim do jogo deve ser acionado quando a contagem regressiva zerar, fazendo com que a cena seja recarregada para o
jogador tentar novamente.

Determinando o Fim do Jogo

1. No script Temporizador, após atualizar o TempoMaximo, crie uma estrutura condicional para testar se
TempoMaximo é menor ou igual a zero:

// Update is called once per frame


void Update()
{
TempoMaximo = TempoMaximo - Time.deltaTime;
PainelDoJogo.Painel.AtualizarTemporizador(TempoMaximo);

if (TempoMaximo <= 0)
{

}
}

Repare que utilizamos o operador <= (menor ou igual que) para testar se o valor na esquerda do operador é menor ou
igual que o valor na direita do operador. Caso a condição seja verdadeira, quer dizer que é o fim do jogo, pois a
contagem regressiva chegou no valor 0. Quando isso acontecer, a cena deve ser recarregada, para carregar uma cena
utilizamos o método SceneManager.LoadScene().

2. Para gerenciar as cenas, você precisa adicionar o namespace UnityEngine.SceneManagement:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class Temporizador : MonoBehaviour


{
...

3. Em seguida no bloco de código da estrutura condicional que verifica se o contador zerou, carregue a cena atual
utilizando o método SceneManager.LoadScene(0), passando como argumento o inteiro 0:

if (TempoMaximo <= 0)
{
SceneManager.LoadScene(0);
}

O argumento 0 refere-se à cena na posição zero da lista de cenas disponíveis, continue lendo para saber mais.

4. Salve o script Temporizador.


Para conferir ou modificar a lista de cenas no Unity, siga para o menu File e selecione a opção Build Settings (“Ctrl +
Shift + B”):

Figura 6.78 - A janela Build Settings

Verifique na lista Scenes in Build se a cena atual está listada. Por padrão o Unity já adiciona a cena inicial que foi
criada automaticamente na criação do projeto, caso você tenha removido a cena padrão, a cena na lista vai ficar
marcada como “Deleted” igual como na figura anterior. Se você seguiu as etapas no começo, a cena “Principal” deve
estar listada.

5. Se a cena padrão foi removida e ela está marcada como “Deleted”, selecione-a e pressione “Delete” para removê-
la da lista de cenas.

6. Para adicionar a cena atualmente aberta (no nosso caso a cena Principal), clique no botão Add Open Scenes:
Figura 6.79 - Adicionando a cena aberta na lista de cenas

Repare que no final do nome da cena existe um número, esta é a posição da cena (começando do zero) que utilizamos
na chamada do método SceneManager.LoadScene(0).

7. Experimente executar o projeto e aguarde o contador zerar.

Veja que a cena é recarregada como esperado, mas as informações das moedas estão erradas, pois quando o método
Start de cada uma das moedas é executado novamente, as variáveis são modificadas exatamente como antes quando o
jogo foi iniciado, fazendo com que o contador de moedas coletadas continue de onde parou e o contador de moedas
totais fica em dobro. Isso acontece porque ambas as variáveis ScriptMoeda.Total e ScriptMoeda.Coletado
possuem o modificador static, ou seja, mesmo depois de reiniciar a cena, suas informações persistem.

Você precisa redefinir as variáveis antes de recarregar a cena:

Redefinindo as Moedas

1. Com o script ScriptMoeda aberto, declare um novo método chamado Redefinir(). Você pode declarar este
método logo depois do método OnTriggerEnter, mas dentro da classe Temporizador:

...
Destroy(gameObject, somDaMoeda.clip.length);
}
}

public static void Redefinir()


{

}
}

Veja que declaramos o método como public static também, dessa forma podemos chamá-lo diretamente no script
Temporizador sem precisar de uma referência direta, além disso, por ser um método static, o método será
exclusivo do script e não das cópias das moedas.

2. Dentro do bloco de código do método Redefinir(), atribua para ambas as variáveis Total e Coletado o
valor 0 padrão:
public static void Redefinir()
{
Total = 0;
Coletado = 0;
}

3. De volta no script Temporizador, logo antes da linha SceneManager.LoadScene(0), chame o método


ScriptMoeda.Redefinir():

if (TempoMaximo <= 0)
{
ScriptMoeda.Redefinir();
SceneManager.LoadScene(0);
}

4. Salve todos os scripts e volte para o Unity, em seguida execute o projeto para fazer um novo “teste drive”.
Ao Coletar Todas as Moedas

Assim que o jogador coletar todas as moedas, nosso jogo continua normalmente como se nada tivesse acontecido,
inclusive a própria contagem regressiva continua contando e pode reiniciar a cena mesmo depois de ter vencido. Para
resolver este problema, podemos verificar logo após coletar uma moeda se a variável Coletado é igual (possui o
mesmo valor) a variável Total, se for verdadeiro, então quer dizer que o jogador coletou todas as moedas e o contador
deve parar de contar. Após encerrar o contador, você pode executar outras instruções, como tocar uma música de
vitória, exibir uma mensagem, etc., para este exemplo, vamos apenas estabelecer a vitória e encerrar o contador.

No script ScriptMoeda vamos criar uma variável que deve conter o status do jogo, onde podemos verificar se o
jogador já coletou todas as moedas:

Ao Coletar Todas as Moedas

1. No script ScriptMoeda, crie uma variável public static para podemos acessá-la exclusivamente e fora do
script, do tipo bool chamado ColetouTudo com o valor false inicial:

...
public static int Total = 0;
public static int Coletado = 0;

public static bool ColetouTudo = false;

// Start is called before the first frame update


void Start()
{
...

Uma variável do tipo bool pode armazenar apenas dois valores, que sãotrue ou false verdadeiro e falso
respectivamente). Neste caso iniciamos em false para definir no início do jogo que o jogador ainda não coletou todas
as moedas.

2. No método OnTriggerEnter, na estrutura condicional que verifica se o Personagem coletou a Moeda, logo
depois de atualizar o texto na interface, crie outra estrutura condicional para testar se o valor da variável Coletado é
igual à variável Total:

...
Coletado = Coletado + 1;
PainelDoJogo.Painel.AtualizarMoedas();

if (Coletado == Total)
{

Destroy(gameObject, somDaMoeda.clip.length);
}
...

Repare que para testar se dois valores são iguais utilizamos o operador de igualdade == (representado por dois sinais de
igual um seguido do outro).
3. Dentro da condição, modifique a variável ColetouTudo para o valor true (verdadeiro):

if (Coletado == Total)
{
ColetouTudo = true;
}

Da mesma forma como nas outras variáveis, precisamos redefinir o valor da variável ColetouTudo antes de reiniciar a
cena.

4. Dentro do método Redefinir(), atribua para a variável ColetouTudo o valor false:

public static void Redefinir()


{
Total = 0;
Coletado = 0;
ColetouTudo = false;
}

5. Salve o script ScriptMoeda.

Agora no script Temporizador, podemos utilizar a variável ScriptMoeda.ColetouTudo para verificar se o


jogador não coletou tudo, se a condição for verdadeira então o temporizador deve continuar contando normalmente.

6. No script Temporizador, envolva o código atual do método Update em uma estrutura condicional que verifica
se ScriptMoeda.ColetouTudo é igual a false.

Mais uma vez, lembre-se de respeitar a abertura e fechamento dos blocos de código, caso contrário você vai gerar erros
que vai impedir que seu jogo seja executado:

...
// Update is called once per frame
void Update()
{
if (ScriptMoeda.ColetouTudo == false)
{
TempoMaximo = TempoMaximo - Time.deltaTime;
PainelDoJogo.Painel.AtualizarTemporizador(TempoMaximo);

if (TempoMaximo <= 0)
{
ScriptMoeda.Redefinir();
SceneManager.LoadScene(0);
}
}
}
}

Se a variável ScriptMoeda.ColetouTudo for igual a false, o bloco de código do contador vai ser executado
normalmente. Assim que a variável se tornar true, a condição se torna falsa e o bloco de código da estrutura
condicional não será executado e consequentemente, a contagem regressiva vai parar de contar.

Esta é a última seção deste capítulo que aborda código, se você ficou perdido ou apenas quer uma referência completa
do que foi apresentado, confira o projeto completo que se encontra nos arquivos do livro.
Skybox

Até agora criamos um cenário para o nosso jogo, com um terreno, o personagem, árvores, vegetação e objetos. Mas e o
céu? Você deve ter notado um céu azulado como exibido na figura a seguir:

Figura 6.80 - Skybox padrão

Se você não estiver vendo o céu padrão, então é provável que a Skybox na cena esteja desativada, utilize o seguinte
botão na barra de controles da janela Scene para ativar ou desativar todos os efeitos da cena, incluindo a Skybox, ou
clique na pequena seta ao lado para selecionar apenas a Skybox:

Figura 6.81 - Ativando o efeito da Skybox na janela Scene

O Menu de Efeitos Não Afeta o Jogo


É possível alterar a Skybox, mas o menu de efeitos da janela Scene afeta apenas a visão da cena.

Entendendo a Skybox

A Skybox é uma maneira de criar um fundo exibido atrás de todos os objetos, basicamente é um cubo com 6 texturas
aplicadas em cada face, por isso o termo Sky (céu) e box (caixa):

Figura 6.82 - Up (cima), back (atrás), left (esquerda), front (frente), right (direita), down (baixo)

Fonte: https://en.wikipedia.org/wiki/Skybox_(video_games)

Quando as texturas no cubo são alinhadas corretamente, o jogador no centro da Skybox vai perceber de forma ilusiva
um mundo 3D em volta dele, composto por 6 faces do cubo. Isso torna a Skybox uma maneira rápida e fácil de
adicionar realismo e imersão nos jogos sem exigir muito da máquina.

Criando e Definindo uma Skybox

A Skybox padrão é a mais comum e suficiente para testar durante o desenvolvimento do jogo. Porém, para aumentar a
experiência do nosso jogo, vamos criar uma Skybox com nuvens no estilo fantasia. Podemos utilizar a Loja de Assets
para baixar o asset “Fantasy Skybox FREE” criado por G.E TEAM, este pacote contém diversas texturas do céu no
estilo fantasia:
Figura 6.83 - Fantasy Skybox FREE

Mais uma vez decidi empacotar apenas o necessário para acompanhar e disponibilizei nos arquivos do livro, fique à
vontade para baixar o pacote completo quando terminar esta seção, todos os créditos são para o autor oficial do asset.

Importando as Texturas da Skybox

1. No Unity, siga para o menu Assets, aponte para Import Package e selecione Custom Package.

2. Abra o seguinte pacote contido nos arquivos do livro:

TexturasSkyboxFantasia.unitypackage

3. Na janela de importação, deixe tudo selecionado e clique no botão Import.

Uma pasta chamada “Assets > Skybox > Texturas” será adicionada no seu projeto, contendo 4 estilos de Skybox,
sendo 2 versões de noite e 2 versões de dia ensolarado. Uma Skybox é criada utilizando um material com um shader
próprio:

Criando o Material da Skybox

1. Na janela Project, siga para o diretório “Assets > Skybox”, em seguida crie um novo material chamado
“SkyboxEnsolarado”.

O shader padrão chamado Standard será utilizado, mas vamos selecionar um shader específico para a Skybox.

2. Com o material “SkyboxEnsolarado” selecionado, siga para a janela Inspector e no menu de seleção de Shader,
navegue na categoria Skybox e selecione a opção 6 Sided:
Figura 6.84 - Selecionando o shader "Skybox/6 Sided"

Repare que as propriedades do material na janela Inspector são alteradas, você vai notar também 6 propriedades onde
definimos as texturas para cada face do cubo, sendo elas Front (frente), Back (atrás), Left (esquerda), Right (direita),
Up (cima) e Down (baixo).

Definindo e Aplicando as Texturas da Skybox

Defina a Skybox que foi criada antes exatamente com as propriedades padrão, assim você pode acompanhar o efeito na
cena conforme as texturas são aplicadas.

1. Para alterar a Skybox atual, siga para o menu Window, aponte para Rendering e selecione Lighting Settings.

2. Tenha certeza que esteja na aba Scene, agora na seção Enviroment, no parâmetro Skybox Material, altere para o
material “SkyboxEnsolarado” que foi criado antes:

Figura 6.85 - Alterando o material da Skybox

Ao fazer isso, você vai ver que o fundo da cena é alterado para uma cor cinza padrão.

Alterando a Skybox Rapidamente


Clique e arraste o asset do material da janela Project até uma área vazia na janela Scene.

3. Com o asset “SkyboxEnsolarado” selecionado, defina a textura “Ensolarado_02_frente” para o parâmetro


Front [+Z].

Você pode definir a textura clicando no botão Select ou apenas arraste a textura da janela Project para dentro da caixa
da miniatura da textura:

Figura 6.86 - Definindo a textura "Ensolarado_02_frente"

4. Defina o restante das texturas conforme a tabela seguir:

Tabela 6.2 - Definição das texturas da Skybox

Assim que terminar de definir as texturas da Skybox, o resultado vai ser um céu ensolarado com nuvens ao arredor.

No entanto, existe um pequeno problema, talvez você tenha notado “riscos” nas bordas das faces das texturas, isso
acontece devido à configuração padrão de importação das texturas:
Figura 6.87 - "Riscos" nas bordas das texturas

Resolvendo o Problema das Bordas das Texturas

1. Na janela Project, siga para o diretório “Assets > Skybox > Texturas” e selecione todas as texturas da Skybox.

Selecionando Rapidamente
Uma maneira rápida de selecionar todas as texturas no diretório atual é pressionando “Ctrl + A”, porém, este
comando não vai funcionar como esperado se a janela Project estiver no modo de uma coluna, além disso, as
vezes não queremos selecionar tudo de uma vez. A outra maneira é selecionando a primeira textura na lista, em
seguida com a tecla “Shift” pressionada, clique na última textura na lista, os assets entre a primeira e a segunda
seleção serão selecionados automaticamente. Este recurso também funciona para selecionar os GameObjects na
janela Hierarchy.

2. Com as texturas selecionadas, siga para a janela Inspector, no parâmetro Wrap Mode, altere de Repeat para
Clamp. Em seguida clique no botão Apply para confirmar:
Figura 6.88 - Alterando o parâmetro Wrap Mode

O parâmetro Wrap Mode define o modo como as texturas são repetidas, a opção Clamp estica as bordas da textura
para que não haja nenhuma repetição ou separação nas arestas.

Propriedades da Skybox

Além dos parâmetros que define as texturas, o shader da Skybox também possui outras propriedades:

Tabela 6.3 - Propriedades do shader Skybox

Experimente alterar as propriedades e veja o resultado.


Música de Fundo

Música de fundo é uma característica muito comum e muito importante em jogos. A música define o momento atual,
dependendo do nível do jogo pode ser uma música alegre, frenética, sombria, calma, etc. Para o nosso exemplo de nível
de floresta e fantasia, uma música calma ou alegre deve servir.

Adicionando o Reprodutor de Música

1. Crie um GameObject vazio (“Ctrl + Shift + N”), renomeie para “Reprodutor de Música” e redefina suas
coordenadas.

Ao acessar a pasta Áudio no seu projeto, você vai encontrar o clipe de áudio chamado “Itty Bitty 8 Bit”, iremos
utilizar este clipe de áudio como música de fundo.

2. Com o “Reprodutor de Música” selecionado, siga para a janela Inspector, clique em Add Component, acesse a
categoria Audio e selecione Audio Source.

3. Clique e arraste o clipe de áudio “Itty Bitty 8 Bit” da janela Project para dentro da caixa da propriedade
AudioClip do componente Audio Source.

Outra maneira de selecionar um clipe de áudio é clicando no pequeno botão com círculo no final do parâmetro
AudioClip, a janela de seleção de áudio será exibida, selecione o clipe “Itty Bitty 8 Bit” e em seguida feche a janela.

4. Outra propriedade importante que você precisa definir é Play on Awake que significa que o clipe de áudio será
reproduzido quando o GameObject, no caso o Reprodutor de Música, for inicializado. Ou seja, a música será
reproduzida assim que o jogo for executado, por padrão essa propriedade já se encontra habilitado.

5. Habilite também a propriedade Loop, isso fará com que a música de fundo seja reproduzida em um laço infinito,
assim que a música terminar, ela será reproduzida novamente:
Figura 6.89 – Configurando o componente Audio Source

6. Execute o jogo e veja se a música de fundo está tocando.

Repare que a música de fundo está um pouco alta, podendo distorcer o restante do som do jogo. Isso acontece porque
os clipes de áudio possuem ganhos de volume diferente. Quando você adiciona um AudioSource, o volume é definido
no máximo, mas você pode ajustar manualmente. Com o GameObject Reprodutor de Música selecionado, procure no
componente Audio Source a propriedade Volume, você pode usar o slider para ajustar o volume do clipe de áudio que
pode ser numa faixa entre 0 (mudo) e 1 (volume no máximo).

7. Deixe o Volume em 0.2 (pode variar dependendo do clipe de áudio). Execute o jogo e ajuste o slider do volume
com o jogo em execução, assim você tem um feedback em tempo real.

Só lembrando caso queira ouvir o som na janela Scene, basta ativar o botão de som na barra de controles:

Figura 6.90 - Ativando ou desativando o som na cena

Caso queira desativar o som durante a execução do jogo, acesse a janela Game e ative o botão Mute Audio que se
encontra no lado direito da barra de controles:
Figura 6.91 - Desativando o som durante a execução do jogo
Exportando o Jogo

Com o projeto pronto, chegou o momento de criar o executável e distribuir seu jogo. Primeiro você precisa definir
algumas configurações básicas, isso é feito nas Configurações do Projeto.

Acessando e Definindo as Configurações Específicas do Projeto

1. Siga para o menu Edit e selecione Project Settings. Em seguida selecione a categoria Player:

Figura 6.92 - A janela Project Settings na categoria Player

2. Altere Company Name (nome da empresa) para o seu nome e Product Name (nome do produto) você pode
deixar o nome atual do projeto ou insira outro nome:

Figura 6.93 - Nome da empresa e nome do produto


3. Em Default Icon podemos definir o ícone do executável, clique no botão Select e selecione a textura
Icone_Moeda:

Figura 6.94 - Selecionando um ícone para o executável do jogo

As demais configurações podem ser ignoradas, por enquanto não precisamos se preocupar com as opções avançadas.

4. Feito isso, tenha certeza que a cena esteja salva pressionando “Ctrl + S” ou siga para o menu File e selecione
Save. Aproveite e salve as configurações do projeto também, siga para o menu File e selecione Save Project.

Para exportar seu jogo, precisamos abrir as configurações de compilação pressionando “Ctrl + Shift + B” ou siga para
o menu File e selecione Build Settings. Nesta janela, em Scenes in Build precisamos adicionar as cenas que serão
compiladas e exportadas para o executável final:
Figura 6.95 - Scenes in Build

Repare que na figura anterior, a lista está vazia, para adicionar a cena atual, clique no botão Add Open Scenes, ou
clique e arraste as cenas da janela Project para dentro da lista:

Figura 6.96 - Adicionando uma cena como parte da build

Em seguida na lista de Plataformas, verifique se a opção PC, Mac & Linux Standalone é a plataforma atualmente
selecionada, você sabe qual plataforma está selecionada por causa do ícone do Unity logo ao lado no final do nome da
plataforma:
Figura 6.97 - A plataforma atual para exportar o jogo

Se este não for o seu caso, selecione a plataforma e clique no botão Switch que se encontra no canto inferior direito da
janela.

Agora no lado direito da janela, em Target Plataform selecione o sistema operacional que deseja exportar seu jogo. É
possível exportar para Windows, Mac e Linux (assumindo que você instalou as opções de exportação, senão a lista vai
exibir apenas o sistema em que você estiver usando o Unity).

Na propriedade Architecture podemos escolher se o jogo será exportado em 32 bits (x86) ou 64 bits (x86_x64), deixe
a segunda opção selecionada. Hoje em dia todos os jogos são feitos em 64 bits, para isso é preciso que o processador e
o sistema operacional suportem a arquitetura também:

Figura 6.98 - Selecionando o sistema e a arquitetura


No canto inferior direito da janela, clique no botão Build para selecionar a pasta onde os arquivos do jogo serão salvos:

Figura 6.99 - Compilar (Build)

Diretório Para Exportar o Jogo


O Unity automaticamente aponta para pasta principal do seu projeto, repare que não é a pasta Assets, é a pasta
onde o projeto está salvo, nunca exporte seu jogo dentro da pasta Assets, senão você vai causar sérios
problemas no seu projeto.

Ainda na pasta do seu projeto, crie uma pasta chamada “Builds” que será utilizada exclusivamente para exportar o
jogo. Dentro da pasta “Builds” crie outra pasta chamada “Build 1”, assim você pode criar diferentes builds para
diferentes versões do seu jogo. Se preferir, você pode criar outra pasta chamada “Windows”, “Linux” ou “Mac” para
separar cada plataforma. Em seguida clique em Selecionar Pasta (ou “Salvar” se estiver no Linux) para começar a
compilar e aguarde até o fim do carregamento:

Figura 6.100 - Selecionando a pasta onde o jogo será construído

Assim que terminar, e se tudo ocorreu normalmente, a pasta onde você salvou o jogo será aberta com os arquivos e seu
executável:

Figura 6.101 - Arquivos do jogo

Ao abrir o executável do jogo, a janela de Configurações será exibida onde você pode alterar a qualidade gráfica e o
mapa do teclado, deixe o padrão e clique no botão “Play!”:

Figura 6.102 - Configurações do jogo, clique em Play! para jogar

O logotipo do Unity vai aparecer e o jogo vai começar, o jogo deve funcionar exatamente da mesma maneira quando
foi testado dentro do editor do Unity.

Encerrando o Jogo
Como este jogo de exemplo não possui um menu, pressione “Alt + F4” para forçar o encerramento do jogo.
Todo jogo que você exportar, independentemente da plataforma, o logotipo do Unity vai aparecer no começo, isso
acontece porque estamos usando a versão Pessoal do Unity. Futuramente quando você estiver com mais experiência,
você pode adquirir a versão Profissional do Unity onde a logo padrão pode ser alterada.
Parte 7: Sprites & Ferramentas 2D

Neste Capítulo você vai aprender:

Criar sprites diretamente pelo Unity


Importar e configurar sprites externo
Obter sprites pela Internet
Saiba o que é Sprite Sheet e como utilizá-lo
Utilizar o Editor de Sprite do Unity
Entenda como funciona e como ajustar o pivot do sprite
Aprenda a implementar a técnica de escala de 9-fatias
Como repetir um sprite usando o modo Tiled
Definir a ordem de exibição dos sprites
Criar Máscara de sprites

O termo Sprite se refere a uma textura comum que quando importado para dentro do Unity ela é tratada de forma
especial. Sprites em um jogo 2D pode ser qualquer elemento gráfico que compõem seu jogo, desde a imagem do fundo,
o gráfico do personagem, inimigos, até mesmo um botão da interface.
Modo 2D

Quando um projeto 3D ou 2D é criado, o Unity define diversas opções e propriedades específicas para se trabalhar
naquele modo. Entretanto, assim que o editor é aberto, é possível alternar entre os modos e configurações a qualquer
momento, basta realizar as modificações necessárias. Antes de continuar, vamos criar um projeto 3D e em seguida
convertê-lo para 2D, assim você descobre as diferenças entre os dois modelos:

Criando Um Projeto 3D

1. Se o Unity já estiver aberto, acesse o menu File e selecione New Project.

2. Com o Unity Hub aberto, clique no botão New.

3. Dê um nome para o projeto, por exemplo “Trabalhando com Sprites”.

4. No menu de seleção de modelos (Template), selecione a opção 3D.

5. Clique em Create Project para confirmar:

Figura 7.1 - Criando um novo projeto 3D

Para obter mais informações sobre criação de projetos, acesse “Criando um Projeto de Exemplo”.

Para alterar entre os modos 3D e 2D, siga para o menu Edit > Project Settings, e acesse a categoria Editor. Procure
pela opção Default Behaviour Mode (comportamento de modo padrão) e veja que o modo atualmente selecionado é o
3D, clique na lista de modos e selecione a opção 2D:
Figura 7.2 - Alterando o comportamento do modo padrão

Repare que assim que a opção 2D é selecionada, aparentemente não houve nenhuma mudança. A grande diferença é
quando importamos alguma imagem, no modo 3D, a imagem será tratada como uma textura, porém, se o Unity estiver
no modo 2D, a imagem será tratada como Sprite.

Sprite
Estaremos vendo mais detalhes sobre sprites durante o decorrer do livro, por enquanto vale saber que o termo
sprite significa uma imagem ou objeto gráfico que pode representar um personagem, ou qualquer outro
elemento gráfico na cena.

Vale ressaltar também que o modo 2D que é definido nas configurações do editor é diferente do modo 2D que é
definido na janela Scene usando o botão 2D na barra de controles:

Figura 7.3 - Botão 2D da janela Scene

Visão 2D e Modo 2D
O botão 2D na janela Scene apenas altera a projeção da visão da cena, enquanto que o modo 2D nas
configurações do editor define como o Unity deve lidar com o seu projeto, ou seja, ambas as configurações são
independentes de uma da outra.
Para efeito de exemplo, vamos transformar um projeto 3D para um projeto 2D e definir as mesmas configurações que o
Unity teria feito de forma automática, assim você verá algumas das diferenças entre os modelos:

Convertendo Um Projeto 3D Para 2D

1. Abra as Configurações do Editor seguindo para o menu Edit > Project Settings, e selecione a categoria Editor.

2. Em Default Behaviour Mode, selecione o modo 2D.

3. Agora encontre a opção Sprite Packer e altere o parâmetro Mode para Always Enabled (sempre habilitado):

Figura 7.4 - Opções do modo Sprite Packer

Sprite Packer é um recurso que agrupa diversos sprites em apenas uma única textura, resultando em um jogo com
melhor desempenho sem desperdiçar memória e processamento.

4. Ative o botão 2D na barra de controles da janela Scene.

Veja que o Gizmo que se encontrava no canto superior direito da janela desaparece, isso acontece porque na visão 2D,
a cena é alternada para uma projeção ortográfica que suporta apenas dois eixos. A câmera é orientada também de uma
forma que fique sempre olhando para o lado positivo do eixo Z da cena, enquanto a cena fica limitada dentro dos eixos
X e Y, onde X fica alinhado na horizontal apontando para direita e o eixo Y fica alinhado na vertical apontando para
cima:
Figura 7.5 - Eixos X e Y em relação à origem da cena na visão 2D

Partindo do ponto de origem da cena, objetos acima e no lado direito se encontram em uma posição positiva, enquanto
objetos em baixo e do lado esquerdo da origem se encontram em uma posição negativa.

5. Selecione a câmera principal (Main Camera) usando a janela Hierarchy ou clique sobre o ícone de câmera na
janela Scene.

6. Na janela Inspector, no componente Transform, altere as coordenadas do parâmetro Position para (0, 0,
-10), Rotation para (0, 0, 0), e Scale deixe (1, 1, 1).

Repare que a única diferença no projeto 3D é que a posição Y se encontrava na coordenada 1, já para o projeto 2D
deixe o valor 0:

Figura 7.6 - Componente Transform da câmera principal no modelo 2D

7. Como não iremos utilizar uma Skybox, o fundo deve possuir uma cor sólida. Então no componente Camera, no
parâmetro Clear Flags, altere de Skybox para Solid Color (cor sólida):
Figura 7.7 - Cor sólida para o fundo da Câmera

Mantenha a cor azul-escuro padrão.

8. Em um projeto 3D, a projeção padrão é a perspectiva, então clique na lista de projeções (parâmetro Projection) e
selecione a opção Ortographic (ortográfica):

Figura 7.8 - Projeção da câmera principal em ortográfica

Na figura a seguir você pode ver a representação retangular das bordas da câmera ortográfica no modo 2D da visão da
cena:
Figura 7.9 - Representação da câmera ortográfica no modo 2D

Um detalhe ao trabalhar no modo 2D é que não precisamos dos efeitos da cena, isso inclui a Skybox de fundo.

9. Desative o botão de efeitos que se encontra na barra de controles da janela Scene:

Figura 7.10 - Efeitos da cena desativados

10. Em um jogo 2D geralmente não precisamos de luz, então você pode desabilitar a luz na visão da cena
desativando o botão de lâmpada que se encontra na barra de controles:

Figura 7.11 - Iluminação desativada na visão da cena

11. Remova da cena o ponto de luz (GameObject Directional Light) que foi adicionado ao criar o projeto 3D.

Além de remover o ponto de luz que foi adicionado, precisamos desfazer algumas configurações de iluminação que são
definidas por padrão em um projeto 3D.

12. No menu Window, aponte para Rendering e selecione Lighting Settings, a janela Lighting será exibida,
apenas confirme se a aba Scene está ativa no topo da janela.

Na categoria Enviroment, no parâmetro Skybox Material, repare que um material padrão está selecionado (Default-
Skybox).

13. Para remover o material padrão, clique no pequeno círculo no final do parâmetro Skybox Material, a janela de
selecionar material será exibida, dentre os materiais disponíveis, selecione a opção None (nenhum) e feche a janela:

Figura 7.12 - Removendo a seleção de um material da Skybox

Se você ativar os efeitos da cena novamente, que inclui a Skybox, nada será exibido na cena, pois não está definido
nenhum material no parâmetro Skybox Material.

14. Na seção Enviroment Lighting, no parâmetro Source, em vez de Skybox, selecione a opção Color:

Figura 7.13 - Fonte da luz ambiente é uma cor sólida

15. Na seção Realtime Lighting, desative a opção Realtime Global Illumination, em Mixed Lighting, desative a
opção Baked Global Illumination e na parte inferior da janela, na categoria Debug Settings, desative a opção Auto
Generate.

Basicamente é isso que você precisa para começar a trabalhar com um jogo 2D, agora quando você for criar um projeto
e selecionar o modelo 2D, você já sabe quais configurações o Unity vai aplicar para criar o projeto. Daqui para frente
estou assumindo que você criou um projeto 2D, as etapas anteriores foram apenas para exemplificar as configurações
realizadas pelo Unity, por via das dúvidas, recomendo utilizar o Unity Hub para criar um projeto usando o Modelo 2D
(Template):

Figura 7.14 - Criando um projeto usando o Modelo 2D


Transformando Objetos no Modo 2D

Você já aprendeu sobre transformação de objetos e como usar diferentes tipos de ferramentas para manipular objetos no
modo 3D. As ferramentas de manipulação como mover, rotacionar, escalonar e transformação retangular basicamente
funcionam da mesma forma no modo 2D, porém, nesta seção vou apenas resumir seu funcionamento no modo 2D.

Navegação na Cena no Modo 2D


A maneira como você aprendeu a navegar na cena 3D funciona igual no modo 2D, exceto que não é possível
orbitar a cena ou “voar na cena” por causa da visão ortográfica. No modo 2D, em vez de rotacionar a visão da
cena, o atalho “Alt + botão esquerdo do mouse ” ou apenas o botão direito do mouse é utilizado para mover
a visão da cena.

Vamos criar um sprite que vai servir de exemplo de transformação.

Criando Um Sprite e Adicionando na Cena

1. Para manter o projeto organizado, crie uma pasta chamada “Sprites” na raiz do projeto, dentro desta pasta crie
outro diretório chamado “Formas” e entre nesta pasta.

2. Para criar um quadrado 2D, siga para a janela Project, clique no botão Create, aponte para Sprites e selecione
Square:
Figura 7.15 - Criando um sprite de formato quadrado

3. Renomeie para “Quadrado” e pressione “Enter” para confirmar.

4. Feito isso, clique e arraste o sprite “Quadrado” da janela Project para dentro da janela Hierarchy:
Figura 7.16 - Adicionando um sprite na cena

O Quadrado será adicionado na origem da cena.

5. Com o Quadrado selecionado e com a janela Scene no contexto atual, pressione “F” para focar no sprite:

Figura 7.17 - Sprite quadrado adicionado na cena


Mover

A ferramenta de mover (W) possui um Gizmo com setas, a seta vermelha representa o eixo X e a seta verde o eixo Y.
Para mover o sprite no eixo X, clique e arraste a seta vermelha:

Figura 7.18 - Transformando o sprite no eixo X com a ferramenta de mover

Para transformar o sprite em ambos os eixos ao mesmo tempo, clique e arraste o pequeno quadrado no centro do
Gizmo:

Figura 7.19 - Usando a ferramenta de Mover para mover nos dois eixos

Rotação
A ferramenta de rotação (E) possui um Gizmo com arcos que pode ser utilizado para rotacionar o sprite. Para
rotacionar o objeto no eixo Z, clique e arraste o círculo azul, a fatia amarela indica o total que foi rotacionado a partir
do clique até o movimento do mouse:

Figura 7.20 - Rotacionando objeto usando a ferramenta de rotação

A área vazia no centro do Gizmo pode ser utilizada para rotacionar o objeto em todos os eixos ao mesmo tempo:

Figura 7.21 - Rotação livre

No modo 2D não é comum rotacionar o sprite no eixo X ou Y, isso pode causar efeitos não desejados, geralmente
usamos apenas o eixo Z para rotacionar, mas é claro existem ocasiões diferentes.

Escala
A ferramenta de escala (R) possui um Gizmo com um pequeno quadrado no final de cada ponta dos eixos. O
funcionamento é igual às outras ferramentas, clique e arraste o Gizmo para redimensionar o sprite:

Figura 7.22 - Redimensionando um sprite no eixo X

Para redimensionar em ambos os eixos X e Y ao mesmo tempo, e de forma proporcional, clique e arraste o pequeno
quadrado no centro do Gizmo:

Figura 7.23 - Redimensionando um sprite em ambos os eixos X e Y

Ferramenta Retangular

A ferramenta de transformação mais útil no modo 2D é a Ferramenta Retangular (T) que pode ser acionada ativando
o seguinte botão na barra de ferramentas:
Figura 7.24 - Ferramenta retangular ativada

O Gizmo desta ferramenta é um quadrado ao redor do objeto e cada canto do objeto possui pontos de manipulação azul.
Como vimos em seção anterior, com essa ferramenta podemos mover, rotacionar e escalonar tudo na mesma
ferramenta.

Mover

Para mover o sprite, simplesmente clique em qualquer lugar dentro do sprite e arraste para começar a mover:

Figura 7.25 - Movendo objeto usando a ferramenta retangular

Você pode restringir a direção do movimento, por exemplo, comece movendo o objeto para esquerda ou direita e então
segure a tecla “Shift” para limitar o movimento apenas no eixo X.

Rotacionar

Para rotacionar o objeto no eixo Z, mova o cursor do mouse para um pouco longe de um dos pontos azul até que o
cursor exiba uma pequena seta circular, em seguida clique e arraste o mouse para começar a rotacionar:

Figura 7.26 - Cursor indicando rotação usando a ferramenta retangular

Redimensionar

Para redimensionar o sprite, mova o cursor sobre uma das arestas do objeto até que o cursor se transforme em uma seta
dupla, neste momento clique e arraste para começar a transformar:

Figura 7.27 - Cursor de seta dupla indicando transformação da escala

Se você segurar a tecla “Alt” enquanto realiza a transformação, a escala será aplicada em ambos os lados. Podemos
usar os pontos azuis nos cantos para redimensionar em dois eixos ao mesmo tempo, por exemplo, mova o cursor do
mouse sobre o ponto no canto inferior direito do sprite, em seguida clique e arraste para começar a redimensionar:
Figura 7.28 - Escalonando em dois eixos ao mesmo tempo

Para manter a proporção original do sprite, mantenha a tecla “Shift” pressionada enquanto realiza a transformação.
Agora se você segurar a tecla “Shift” e “Alt”, a transformação vai usar o pivot do objeto como ponto de início de
transformação, por padrão o pivot está no centro de todos os objetos, então a escala será aplicada do centro para fora.

Encaixe por Vértice

O encaixe por vértice é uma ferramenta de transformação que permite utilizar um vértice de uma malha como ponto de
pivot para posicionar o objeto exatamente em qualquer outro vértice de outra malha na cena, muito útil para deslocar
objetos rapidamente e com mais precisão.

Utilizando o Encaixe Por Vértice

1. Continuando com o sprite Quadrado, duplique o sprite pressionando “Ctrl + D” e mova-o para outra posição:
Figura 7.29 - Duas cópias do sprite Quadrado

2. Selecione um dos sprites que deseja manipular e tenha certeza que a ferramenta de mover (W) ou a ferramenta
retangular (T) esteja ativa.

3. Pressione e segure a tecla “V” para ativar o modo de encaixe por vértice. Você também pode utilizar o atalho
“Shift + V” para alternar a ferramenta.

4. Mova o cursor do mouse sobre um vértice da malha do Quadrado que deseja usar como ponto de pivot.

Repare que ao mover o cursor do mouse, o Gizmo do manipulador é exibido apenas sobre o vértice onde o cursor foi
movido, indicando exatamente qual vértice será utilizado para mover. Você pode deslocar vértice para vértice, vértice
para superfície ou um pivot para vértice.

5. Quando o cursor estiver sobre um vértice, clique e segure o botão esquerdo do mouse e mova a malha próximo
de outro vértice, neste caso mova próximo de um dos vértices do outro Quadrado.

6. Libere o botão do mouse e a tecla “V” (ou “Shift + V”) quando estiver satisfeito com o resultado.

Vídeo 7.1 - Utilizando o encaixe por vértice

Encaixe Por Vértice em Objetos 3D


O encaixe por vértice não é exclusivo dos sprites, a mesma ferramenta pode ser utilizada em qualquer malha,
incluindo qualquer objeto 3D.
Criador de Sprites do Unity

Quando estamos trabalhando em um novo projeto, criando um protótipo ou apenas testando alguma funcionalidade,
seria interessante ter algo para começar a trabalhar. Com o Criador de Sprites do Unity podemos criar sprites com
formas simples que pode ser usado durante o desenvolvimento do seu jogo e futuramente você pode substituir com o
gráfico que quiser. Nas seções anteriores usamos o Criador de Sprites para gerar alguns gráficos de exemplo, mas
nesta seção vamos revisitar o assunto.

Formas Comuns

Para acessar o Criador de Sprites, siga para a janela Project, clique no botão Create e aponte para Sprites, veja que
podemos criar diferentes formatos de sprites:

Figura 7.30 - Menu de criação de Sprites

Quando um sprite é criado usando o Criador de sprites, o Unity gera uma pequena textura branca que define o gráfico
do sprite, você pode conferir isso clicando com o botão direito do mouse sobre o asset “Quadrado” na janela Project
e selecione Show in Explorer. O gerenciador de arquivos do seu sistema será aberto exibindo um arquivo de imagem
chamado “Quadrado.png” que possui um tamanho de “4x4” e uma textura branca, esta imagem é utilizada para definir
o gráfico padrão do sprite.

Experimente criar um triângulo utilizando o Criador de Sprites do Unity seguindo o mesmo processo, acesse o botão
Create da janela Project, aponte para Sprites e selecione Triangle, em seguida renomeie para “Triângulo”. Assim que
criado, basta clicar e arrastar da janela Project para dentro da janela Scene:
Figura 7.31 - Adicionando um sprite com formato triangular na cena

Faça o mesmo para criar um diamante (Diamond), um hexágono (Hexagon) e um círculo (Circle).
Importando e Configurando Sprites

Além de criar sprites usando o Criador de Sprites do Unity, é possível importar diferentes tipos de formatos de
imagem que podem ser utilizados como sprites. O melhor formato é o PNG por causa da sua qualidade e suporte à
transparência, mas é comum usar JPEG também.

Importando Sprites

Quando uma imagem é importada, o Unity define algumas configurações que pode tornar a imagem em Textura ou
Sprite. Como você está no Modo 2D (assumindo que você criou um projeto 2D), então a imagem será importada como
Sprite, você pode confirmar o modo atual seguindo para o menu Edit, selecione Project Settings, acesse a categoria
Editor e verifique na seção Default Behaviour Mode se a opção 2D está selecionada.

Existem algumas maneiras de importar uma imagem como Sprite:

Coloque os arquivos na pasta Assets do seu projeto usando o gerenciador de arquivos do seu sistema, dessa
forma, assim que você alternar para a janela do Unity, o projeto vai detectar os novos arquivos e importá-los
automaticamente.
No menu Assets, selecione Import New Asset. Navegue até o local onde se encontra os assets, selecione as
imagens (mantenha a tecla “Shift” pressionada para selecionar múltiplos assets) e clique em Import para importar
para o seu projeto.
Coloque a janela do Unity de lado com a pasta onde se encontra o asset, então é só selecionar e arrastar os assets
para dentro da janela Project.

Veja a seguir como importar um sprite de exemplo:

Importando Um Sprite de Exemplo

1. Siga para a janela Project e entre na pasta Sprites (crie uma se necessário).

2. Utilize uma das maneiras descritas anteriormente para importar a imagem “Ninja.png” dos arquivos do livro que
se encontra no diretório “Sprites e Ferramentas 2D > Sprites”.

Assim que importado, você pode ver uma prévia do sprite na janela Project:
Figura 7.32 - Sprite "Ninja" importado para o projeto do Unity

3. Clique e arraste o novo sprite da janela Project para dentro da janela Scene.

Lembrando que se você adicionar o sprite na janela Hierarchy, o mesmo será posicionado na origem da cena:

Figura 7.33 - Sprite importado e adicionado na cena

Configurando Sprites

Assim que um sprite é importado, você pode usar as configurações de importação da textura para definir como a
imagem será importada e utilizada no seu projeto. Para exibir as configurações de importação de uma imagem,
selecione a textura na janela Project (lembre-se que um sprite é simplesmente uma imagem ou textura) e veja as
configurações na janela Inspector. Não se preocupe com todas as opções agora, nas próximas seções você vai conferir
algumas opções comuns.

Tipo da Textura

Uma das configurações mais importante é a propriedade Texture Type (tipo da textura). Pelo fato do nosso projeto
estar no Modo 2D, o Unity importa a imagem como sendo do tipo Sprite 2D:

Figura 7.34 - Tipo da Textura: Sprite (2D e UI)

Tipo Da Textura
Repare que a opção Sprite está marcada como “2D” e “UI”, ou seja, sprites são utilizados como elementos
gráficos de um jogo 2D, mas também fazem parte da Interface do Usuário (ou “User Interface” em inglês).

Modo do Sprite

Quando o tipo de textura é Sprite, você pode escolher o modo do sprite no parâmetro Sprite Mode (Single, Multiple e
Polygon):

Figura 7.35 - Modos do Sprite

Single: Representa uma única imagem isolada. Se você importar uma imagem que representa, por exemplo,
apenas um personagem, então a opção Single deve ser utilizada.
Multiple: É utilizado quando uma imagem possui vários sprites arranjados na mesma textura que pode ser
quadros de animação ou elementos gráficos do cenário. Chamamos uma imagem com múltiplos sprites de Sprite
Sheet.
Polygon: O sprite mantém sua forma de polígono que você pode definir no Editor de Sprites do Unity.

Você vai ver mais detalhes sobre o modo Multiple e Polygon quando formos trabalhar com o Editor de Sprites.

Pixeis por Unidade

Unidades de medida no Unity geralmente é interpretado em metros, basicamente 1 unidade no Unity significa 1
metro. Você pode alterar a quantidade de pixeis no sprite que corresponde 1 unidade utilizando o parâmetro Pixels
per Unit que por padrão possui o valor 100:

Figura 7.36 - Pixeis por unidade

Neste caso, 100 pixeis por unidade significa que se o sprite possuir 100 pixeis, ele vai corresponder a 1 unidade na
cena, quanto maior o valor, menor será o sprite na cena, e quanto menor o valor, maior será o sprite na cena. O valor
ideal depende do sprite importado, por enquanto recomendo manter o valor 100 padrão.

Ponto de Manipulação (Pivot)

Utilize o menu para selecionar uma posição comum onde o sistema de coordenadas vai utilizar para transformar o
objeto, que por padrão se encontra no centro do objeto:
Figura 7.37 - Pivot: Center

Menu Pivot
O menu Pivot dos sprites gerados com o Criador de Sprites do Unity está ausente na janela Inspector, mas é
possível ajustar o pivot usando o Editor do Sprite que veremos em breve.

Para mostrar o funcionamento do pivot, siga as próximas etapas:

Alterando o Pivot de Um Sprite

1. Ative a ferramenta de mover usando o atalho “W”.

2. Selecione o sprite “Ninja” que foi importado antes, em seguida na barra de ferramentas, altere a posição do
Gizmo de Center para Pivot:
Figura 7.38 - Posição do Gizmo no modo Pivot

Veja que o Gizmo de mover se encontra no centro do objeto, que é a localização padrão do Pivot.

3. De volta nas configurações do sprite, selecione o pivot Bottom Left (inferior esquerdo) e clique em Apply:

Figura 7.39 - Alterando o pivot do sprite para a posição inferior esquerdo

Selecione novamente o sprite na cena e veja que a posição do Gizmo mudou para o canto inferior esquerdo do sprite,
além disso, o sprite é deslocado conforme seu novo ponto de origem:
Figura 7.40 - Na esquerda pivot no centro e na direita pivot no canto inferior esquerdo

A alteração do pivot é muito útil para posicionar o sprite e transformá-lo em algum ponto específico. Para manipular o
objeto usando o pivot especificado nas configurações de importação da textura, use a posição do Gizmo no modo
Pivot.

Modo de Filtragem

O parâmetro Filter Mode permite escolher o modo de filtragem utilizado para suavizar as bordas das texturas. A opção
padrão Bilinear tenta adicionar pixeis vizinhos para suavizar as bordas, removendo o efeito serrote dos pixeis, porém,
geralmente esta opção deixa os sprites borrados, como se estivessem com resolução baixa. Para desativar o modo de
filtragem, selecione a opção Point (no filter):

Figura 7.41 – Modo de filtragem desativado

Confira na figura a seguir uma comparação entre Bilinear e Point (sem filtragem):
Figura 7.42 - Na esquerda filtragem Bilinear e na direita sem filtragem (Point)

A opção Trilinear é parecido com a Bilinear, só muda a técnica de filtragem, mesmo assim o sprite pode continuar
borrado.

Modo de Filtragem em 3D E 2D
O modo de filtragem das texturas não é exclusivo dos sprites, é apenas uma configuração das texturas. Esta
opção pode ser mais útil em modelos 3D, visto que é possível escolher outras opções de qualidade que ajuda
mitigar o efeito borrado.
Componente Sprite Renderer

O componente Sprite Renderer permite exibir imagens como sprites para serem utilizados nas cenas, isso significa
que se o componente Sprite Renderer for desativado ou removido, o sprite não será exibido na cena. Na seção anterior
você aprendeu como criar sprites de diferentes maneiras usando o Criador de Sprites, você deve ter notado que o
componente Sprite Renderer é adicionado e definido automaticamente.

Definindo um Sprite

Ao importar um sprite e adicioná-lo na cena, o componente Sprite Renderer é definido automaticamente, siga as
etapas a seguir para criar um sprite manualmente a partir de um GameObject vazio:

Criando Um Sprite Com Um Gameobject Vazio

1. Crie uma nova cena (“Ctrl + N”).

2. Importe a imagem “Ninja.png” que se encontra nos arquivos do livro para dentro da pasta Sprites do seu projeto
(ignore esta etapa se você já importou durante o exemplo anterior).

3. Crie um GameObject vazio pressionando “Ctrl + Shift + N”, em seguida renomeie para “Ninja”.

4. Reinicie a posição do Ninja para a origem da cena (0, 0, 0), para fazer isso, com o GameObject selecionado,
siga para a janela Inspector, clique com o botão direito do mouse no título do componente Transform e selecione
Reset.

5. Clique no botão Add Component, navegue na categoria Rendering e selecione o componente Sprite Renderer.

Repare que na cena nada é exibido, pois ainda não foi selecionado uma imagem para ser exibida como sprite.

6. No componente Sprite Renderer, no final do parâmetro Sprite, clique no pequeno botão com círculo:

Figura 7.43 - Selecionar Sprite

7. Na janela de seleção de sprite que foi exibida, selecione o “Ninja” que foi importado antes. Repare que neste caso
poderia ser qualquer sprite presente no seu projeto.

Feito isso, o sprite será exibido na cena.

Vídeo 7.2 - Criando um Sprite a partir de um GameObject vazio

Com o sprite definido, você pode usar o parâmetro Sprite para alterar o gráfico do sprite a qualquer momento durante o
desenvolvimento do jogo.
Alterando a Cor do Sprite

Para alterar a cor do sprite, utilize a propriedade Color, clique na caixa de cor para abrir a janela do seletor de cor, use o
controle no centro e a roda de cor para selecionar uma cor baseada na matriz e saturação respectivamente:

Figura 7.44 - Alterando a cor de um sprite

Com a cor definida, você já pode fechar a janela.

Vale a pena ressaltar que a cor definida no parâmetro Color é multiplicada com a cor da textura do sprite:

Figura 7.45 - Cor do Sprite alterado para vermelho

Para manter a cor original do sprite, use a cor branca pura, em outras palavras, use o valor RGBA (255, 255, 255,
255).

Demais Parâmetros

Os demais parâmetros iremos rever durante o decorrer do livro, mas só para não passar batido, veja na tabela a seguir
uma breve descrição das propriedades:

Tabela 7.1 - Propriedades do componente Sprite Renderer


Editor de Sprites e Sprite Sheet

O Editor de Sprites do Unity pode ser utilizado para manipular um sprite individual, editar múltiplos sprites
arranjados em uma única textura ou para definir o formato de um sprite. Para abrir o Editor de Sprite, siga para o
menu Window, aponte para 2D e selecione a opção Sprite Editor, a janela do editor é atualizada para exibir o sprite
atualmente selecionado na janela Project.

Veja alguns comandos de navegação básico:

Para mover a tela, pressione o botão direito do mouse ou o botão do meio do mouse em qualquer área vazia e
mova o cursor do mouse.
Para aplicar zoom, use a roda do mouse ou o atalho “Alt + botão direito do mouse” e mova o cursor do mouse.
Para focar no sprite, pressione a tecla “F”.

Editando o Formato do Sprite

Ao criar um sprite de formato quadrado ou triangular utilizando o Criador de Sprites do Unity, você deve ter notado
que o asset gerado para ambos é apenas uma imagem com um tamanho de “4 x 4”, o que diferencia de um formato para
o outro é os pontos que foram definidos automaticamente. Isso significa que os vértices de um sprite pode ser editado
para definir sua forma. Para este exemplo, adicione um sprite poligonal seguindo para a janela Project > Create >
Sprites e selecione Polygon, a janela do Editor de Sprites será aberta automaticamente:

Figura 7.46 - Editor de Sprite com um polígono selecionado

Alterando a Forma Padrão

O formato padrão do polígono possui 5 lados, gerando um formato de pentágono, mas é possível alterar a quantidade
de lados no campo Sides que se encontra na barra de controles, no canto superior esquerdo. Se você não estiver vendo a
pequena janela como exibido na figura a seguir, é porque o botão Change Shape (alterar forma) não está pressionado
na barra de controles:
Figura 7.47 - Alterando a quantidade de lados do polígono

Altere a quantidade de lados de 5 para 8 e clique no botão Change (alterar). Para confirmar as alterações, clique no
botão Apply (aplicar) que se encontra no lado direito da barra de controles:

Figura 7.48 - Aplicar as alterações no sprite

Revertendo Alterações
Se você quiser reverter todas as alterações atuais, clique no botão Revert que se encontra logo ao lado do botão
Apply. É possível também desfazer alterações uma por vez utilizando o atalho “Ctrl + Z”. Não é possível
desfazer alterações que já foram aplicadas, a não ser que você desfaça de tudo manualmente.

Editando os Pontos da Forma

Para alterar os pontos do polígono, siga para o canto superior esquerdo do Editor de Sprites e veja que o modo atual é
o Sprite Polygon Mode Editor, alterne para Custom Outline (contorno personalizado):

Figura 7.49 - Alterando para o modo de edição de pontos do polígono

Os pontos da forma serão exibidos, mova o cursor do mouse sobre um dos pontos, quando o ponto ficar azul, clique e
mova o mouse para alterar a forma. Se você não estiver vendo nenhum ponto, pode ser que a área de edição não esteja
ativa, para resolver isso, simplesmente clique uma vez sobre qualquer lugar no sprite:
Figura 7.50 - Exemplo de antes e depois de mover um ponto do polígono

Por padrão os pontos são deslocados automaticamente de um lugar para o outro, dependendo da ocasião isso pode ser
mais eficiente, porém, para obter movimento livre, desative o botão Snap que se encontra na barra de controles:

Figura 7.51 – Modo Snap desativado

Para selecionar múltiplos pontos, mantenha a tecla “Shift” pressionada. Para criar uma caixa de seleção, clique e segure
sobre uma área vazia e arraste o mouse, os pontos que estiverem dentro da caixa serão selecionados. É possível também
mover uma linha, mantenha a tecla “Ctrl” pressionada e passe o cursor do mouse sobre uma aresta, você vai notar uma
sombra na linha, neste momento clique e arraste para começar a mover a linha, o contorno amarelo indica a linha sendo
transformada:
Figura 7.52 - Movendo uma linha da forma

Adicionando Novos Pontos

Para adicionar um ponto, passe o cursor do mouse sobre as arestas da forma, um ponto azul-claro é exibido indicando
onde o novo ponto será criado, clique para criar o ponto, crie quantos pontos for necessário e mova-os para gerar o
formato desejado:

Figura 7.53 - Criando novos pontos

Repare que se você criar uma caixa de seleção em uma área vazia e sem pontos, novos pontos serão adicionados no
lugar:

Figura 7.54 - Adicionando novos pontos a partir de uma caixa de seleção

Removendo Vértices

Para remover algum ponto, simplesmente selecione os pontos que deseja remover e pressione a tecla “Delete”.

Finalizando a Edição

Para aplicar as mudanças no sprite, clique no botão Apply que se encontra no lado direito da barra de controles, em
seguida você já pode fechar a janela. Para abrir a janela do Editor de Sprites novamente, selecione um sprite na janela
Project, siga para a janela Inspector e clique no botão Sprite Editor:

Figura 7.55 - Abrindo o Editor de Sprites a partir do sprite selecionado

Vídeo 7.3 - Editando o formato do Sprite

Separando Sprites de um Sprite Sheet

Um Sprite Sheet é uma imagem contendo diversos elementos gráficos, é muito comum em animações, onde cada
elemento na textura representa um quadro de animação, igual como na figura a seguir, onde cada sprite da explosão
está arranjado em apenas uma imagem:

Figura 7.56 - Exemplo de Sprite Sheet

Alterando o Modo do Sprite

Para trabalhar com Sprite Sheet você precisa alterar o modo do sprite para Multiple (múltiplos sprites).

Alterando o Modo do Sprite

1. Importe a imagem “Explosão.png” que se encontra nos arquivos do livro para a pasta Sprites do seu projeto.

2. Com o sprite Explosão selecionado na janela Project, siga para a janela Inspector, e no parâmetro Sprite Mode,
altere para a opção Multiple.

3. Clique em Apply para confirmar:


Figura 7.57 - Alterando o Modo do Sprite para Multiple

Cortando o Sprite Manualmente

No modo Multiple e com o Editor de Sprite aberto, agora você pode cortar a textura em sprites individuais. Para
dividir a imagem manualmente, basta clicar e arrastar uma caixa de seleção ao redor do sprite (um Gizmo verde
retangular será exibido), o que estiver dentro da caixa de seleção fará parte de um Sprite:

Figura 7.58 - Criando uma área de seleção de sprite

Você pode criar quantas caixas de seleção for necessário, no final, cada caixa vai representar um sprite individual.

Ajustando a Área de Seleção


Para mover a posição da caixa, clique em qualquer lugar dentro da caixa e mova a seleção. Para ajustar o tamanho,
clique e arraste um dos lados (arestas) ou cantos (ponto azul em cada canto):

Figura 7.59 - Use as arestas da caixa para ajustar a dimensão do sprite

Cada corte do sprite pode ser selecionado clicando-o sobre o mesmo, você sabe que um sprite está selecionado por
causa do Gizmo parecido com a ferramenta retangular (exatamente como indicado na figura anterior).

Cortando Áreas Transparentes

É possível ajustar a caixa do sprite para que se encaixe perfeitamente ao redor, sem deixar espaço transparente. Com o
sprite selecionado, clique no botão Trim (“Shift + T”) que se encontra na barra de controles:

Figura 7.60 - A opção Trim ajusta a caixa do sprite conforme seu contorno

Movendo o Pivot

O pequeno círculo no centro é o pivot do sprite (ponto de manipulação), clique e arraste o círculo para mover o pivot:
Figura 7.61 - Pequeno círculo azul com furo é a representação do pivot

Propriedades do Sprite

Quando um sprite é selecionado no Editor de Sprites, uma pequena janela chamada Sprite é exibida contendo mais
detalhes e propriedades do sprite:

Figura 7.62 - Janela "Sprite" do sprite atualmente selecionado

Veja na tabela a seguir uma descrição de cada propriedade:

Tabela 7.2 - Propriedades do sprite atualmente selecionado


Separando o Sprite Sheet do Exemplo

Vamos separar o Sprite Sheet da Explosão em 12 sprites, para fazer isso você pode cortar os 12 sprites manualmente
exatamente como nos exemplos anteriores, porém, os cortes podem ficar inconsistentes e levar muito tempo, no
entanto, existe um recurso que automatiza o processo.

Separando o Sprite Sheet da Explosão

1. Para cortar o Sprite Sheet, utilize a ferramenta Slice que se encontra no lado esquerdo da barra de controles:
Figura 7.63 - Ferramenta "Slice"

Em Type selecionamos o tipo de corte que será realizado para separar os sprites, é possível separar o Sprite Sheet
usando qualquer um destes tipos, mas a forma como o sprite é usado depois pode fazer toda a diferença.

2. Para efeito de exemplo, deixe a opção Automatic selecionada e clique no botão Slice para cortar os sprites.

Vamos analisar como o Sprite Sheet foi cortado, neste caso ao cortar usando o tipo “Automático” vai gerar alguns
problemas. Para analisar melhor o que foi feito, clique no botão colorido logo ao lado de Apply, no lado direito da
barra de controles, isso vai fazer com que a imagem seja exibida em preto e branco pelo nível de transparência da
imagem:

Figura 7.64 - Exibir em preto e branco

Agora selecione o primeiro sprite e veja suas informações na janela Sprite, em Position, os parâmetros W e H
representa a largura e altura do sprite:
Figura 7.65 - Analisando a largura e altura do sprite

Agora selecione o sprite logo ao lado e veja que a largura e altura é diferente, isso pode ser um problema se esses
sprites forem utilizados em uma sequência de animação, onde a diferença de tamanho pode gerar inconsistências. Para
evitar que isso aconteça, cada sprite na sequência de animação deve possuir o mesmo tamanho. Outro problema que
podemos ver é no sprite 6, veja que algumas “partículas” do efeito estão separadas, mas era para ser apenas um corte, o
mesmo acontece com os demais quadros:

Figura 7.66 - Diversos cortes, mas era para ser apenas um sprite

Para resolver esses problemas, vamos usar outro tipo de corte:

Separando Novamente o Sprite Sheet da Explosão

1. Clique em Revert na barra de controles para reverter para o estado original do Sprite Sheet.
2. De volta na ferramenta Slice, em vez de Automatic, selecione a opção Grid by Cell Count, essa opção nos
permite criar uma grade de cortes baseado em colunas e linhas.

Assim podemos escolher exatamente quantas colunas e linhas o Sprite Sheet possui, e o corte será igual para cada
sprite. Na propriedade Column & Row, o parâmetro C é o número de colunas e R é o número de linhas.

3. O Sprite Sheet do exemplo possui 12 colunas e 1 linha, então use esses valores e clique em Slice para confirmar:

Figura 7.67 - Corte baseado em grade de colunas e linhas

Dessa vez o Sprite Sheet será dividido em sprites com tamanhos iguais:

Figura 7.68 - Corte realizado usando a opção Grid by Cell Count

4. Quando estiver satisfeito, clique em Apply na barra de controles para aplicar as alterações, em seguida feche a
janela do Editor de Sprites.

De volta na janela Project, clique na pequena seta no lado do Sprite Sheet para expandir ou encolher a visualização
dos sprites:

Figura 7.69 - Expandindo a visualização do Sprite Sheet na janela Project

Você pode usar esses sprites em uma animação ou usar separadamente, por exemplo, selecione o sprite “Explosão_2” e
adicione-o na cena:
Figura 7.70 - Adicionando na cena um sprite do Sprite Sheet

Vídeo 7.4 - Separando o Sprite Sheet da Explosão

Corte Automático

Como vimos antes, é possível separar um Sprite Sheet manualmente, mas em alguns casos o modo automático pode
ajudar a facilitar o processo. Com um sprite no modo Multiple e aberto no Editor de Sprite, podemos usar a
ferramenta Slice e selecionar o tipo Automatic:

Figura 7.71 - Tipo de corte automático

No parâmetro Type, quando o tipo de corte é definido para Automatic, o editor vai tentar adivinhar as bordas dos
elementos dos sprites pela sua transparência, isso vai gerar sprites com diferentes tamanhos.

Pivot

O parâmetro Pivot nos permite definir um pivot para cada sprite que for gerado, por padrão a opção Center já se
encontra selecionada:
Figura 7.72 - Pivot padrão dos sprites

O pivot de um sprite no Editor de Sprite e em outros lugares no Unity é representado por um círculo azul com um furo
no centro:

Figura 7.73 - Representação visual do pivot no Editor de Sprite

Selecione a opção Custom e o parâmetro Custom Pivot será liberado para você definir um valor exato. O valor 0 é o
ponto inicial e o valor 1 é o ponto final até as bordas do sprite, o valor 0 para ambos X e Y vai posicionar o pivot no
canto inferior esquerdo do sprite, já o valor 0.5 para ambos X e Y vai posicionar o pivot no centro do sprite. Valores
positivos para X vai posicionar o pivot cada vez mais para frente, enquanto valores positivos para Y vai posicionar o
pivot cada vez mais para cima. Selecione as diferentes posições no menu Pivot e veja o valor sendo atualizado no
parâmetro Custom Pivot, assim você pode ter uma ideia do valor utilizado para posicionar o pivot em diferentes
lugares:

Figura 7.74 - Pivot posicionado no canto superior direito (1, 1)

Método de Corte

O parâmetro Method nos permite definir como lidar com as seleções atualmente presentes no editor:
Figura 7.75 - Método de corte automático com Delete Existing selecionado

Delete Existing: Remove o que estiver atualmente selecionado no editor, antes de clicar em Slice, certifique-se
que os cortes atuais no editor não são relevantes, pois serão descartados.
Smart: Tenta criar novos retângulos enquanto mantém ou ajusta o que já estiver presente no editor.
Safe: Adiciona retângulos de seleção sem alterar nada que já estiver atualmente selecionado no editor.

Finalizando o Corte

Quando estiver pronto para cortar, clique no botão Slice, assim que finalizado você pode conferir os cortes no editor e
se necessário, você pode editar cada corte individualmente, basta selecioná-lo no editor e usar o Gizmo de caixa
retangular ou a janela Sprite. Dessa forma você pode deixar o Unity fazer o trabalho automático inicial e depois você
pode refinar os detalhes como quiser. Para confirmar, antes de fechar a janela do Editor de Sprite, não esqueça de
clicar no botão Apply na barra de controles.

Corte do Tipo Grid by Cell Size

O tipo de corte Grid by Cell Size é bastante útil quando o Sprite Sheet é arranjado em um padrão regular durante sua
criação:

Figura 7.76 - Tipo de corte em Grid by Cell Size

Tamanho de Cada Sprite

Em Pixel Size (tamanho em pixeis) é definido a largura e altura (X e Y respectivamente) para cada sprite em pixeis. Se
você é o criador do Sprite Sheet então você já sabe qual o tamanho correto, caso contrário, você pode perguntar para o
designer que criou ou descobrir por si próprio.
Margem

O parâmetro Offset nos permite criar uma margem ao redor da grade, partindo do canto superior esquerdo da textura.
Na figura a seguir você pode conferir uma ilustração onde a listra vermelha indica um Offset com o valor de 3 pontos
para ambos X e Y:

Figura 7.77 - Offset de 3 pontos

Você precisa diminuir o tamanho de cada sprite conforme o total da margem desejada, por exemplo, se cada sprite do
Sprite Sheet possui uma largura e altura de 96 pixeis e você quer uma margem de 4 pixeis ao redor, então você precisa
alterar o tamanho de cada sprite para 88 pixeis, caso contrário não vai sobrar espaço para criar a margem:

Figura 7.78 – Configurando o tamanho e margem

Espaçamento

Com o parâmetro Padding podemos criar um espaçamento entre cada corte, na figura a seguir você pode conferir um
exemplo com 5 pontos de espaço em ambos X e Y:
Figura 7.79 - Padding em 5 pontos

Pivot

Utilize o parâmetro Pivot para escolher uma das nove posições pré-definidas, ou use a opção Custom para definir uma
posição personalizada no parâmetro Custom Pivot.

Corte do Tipo Grid by Cell Count

Já vimos esta opção quando separamos o Sprite Sheet da explosão, esta opção basicamente permite cortar usando
colunas e linhas.

Figura 7.80 - Grid by Cell Count

No parâmetro Column & Row, use a propriedade C para definir a quantidade de colunas e R para definir a quantidade
de linhas, o Sprite Sheet será cortado baseado nestes valores. No exemplo da figura anterior, 5 colunas e 2 linhas
significa que o Sprite Sheet será dividido em 10 sprites. Os parâmetros Offset, Padding e Pivot também estão
disponíveis e funcionam igual como descritos anteriormente.
Técnica de Escala em 9-Fatias

A escala de 9-Fatias é uma técnica 2D que nos permite reusar uma imagem em diferentes tamanhos sem precisar criar
múltiplos assets. Esta técnica envolve dividir a imagem em nove partes, dessa forma quando você redimensionar o
sprite, as diferentes partes escalam ou são repetidas em diferentes maneiras para manter a escala normal do sprite. Isso
pode ser bastante útil para manipular algum elemento gráfico da interface ou quando for criar paredes, ou o chão em
um cenário 2D. Por exemplo, veja na figura a seguir as partes de A até I:

Figura 7.81 - Sprite separado em nove partes

Como o próprio nome da técnica diz, a imagem é dividida em 9 partes, no exemplo da figura anterior você pode
visualizar as partes que são A, B, C, D até I, as bordas verdes são o que definem como a imagem será dividida. Com
base na figura anterior, veja na tabela a seguir como as partes de um sprite dividido em 9-fatias é afetado pela sua
escala:

Tabela 7.3 - Efeito da escala em um sprite dividido em 9-fatias

Sabendo disso, se você redimensionar um sprite sem aplicar esta técnica, vai resultar em algo parecido como na figura a
seguir, as partes do sprite vai sofrer com a escala, distorcendo o gráfico:

Figura 7.82 - Redimensionando sprite sem bordas definidas

Para aplicar a técnica de 9-fatias você precisa preparar o sprite:

Aplicando a Técnica de 9-Fatias

1. Importe a imagem “Caixa9Fatias.png” que se encontra nos arquivos do livro para a pasta Sprites do seu projeto,
é a mesma imagem do exemplo anterior.

2. Com o sprite Caixa9Fatias selecionado na janela Project, siga para a janela Inspector e altere a propriedade
Type Mesh (tipo da malha) para a opção Full Rect (retângulo completo):
Figura 7.83 - Alterando o tipo da malha do sprite

3. Não esqueça de clicar em Apply para confirmar a alteração.

Malha
O Tipo da Malha refere-se a malha poligonal que constrói um modelo. Lembre-se, o Unity é um motor de jogo
3D, um sprite basicamente é uma malha plana com uma textura aplicada.

O tipo de malha Full Rect expande o contorno do sprite para completar o tamanho retangular conforme o tamanho da
textura, enquanto a opção Tight é gerado uma malha seguindo os contornos da textura. Para melhor visualizar a
diferença entre Tight e Full Rect, veja na figura a seguir um sprite de exemplo e com o modo de desenho em Shaded
Wireframe, assim você pode ver os contornos do sprite:

Figura 7.84 - Na esquerda Tight e na direita Full Rect

4. Abra o Editor de Sprite clicando no botão Sprite Editor.

Com o sprite selecionado no Editor de Sprite, uma pequena janela Sprite é exibida, você pode alterar os valores na
propriedade Border para definir o local e tamanho das bordas que vai definir as 9-fatias (abreviações L, R, T e B
significam esquerda, direita, topo e inferior respectivamente). É possível também usar o Gizmo verde ao redor do sprite
para manipular suas bordas, basta clicar e arrastar com o mouse para a posição desejada.

5. Mova as bordas conforme o exemplo na figura a seguir, use a lista verde do próprio sprite como referência.

Faça o mesmo para todos os lados:


Figura 7.85 - Ajustando as bordas de um sprite

6. Clique em Apply e feche o Editor de Sprite.

Agora se você tentar redimensionar o sprite novamente, repare que continua o mesmo. Isso acontece porque ainda não
foi alterado o modo de exibição do sprite.

7. Selecione o sprite Caixa9Fatias na cena, em seguida na janela Inspector, no componente Sprite Renderer, em
Draw Mode, altere de Simple para Sliced (fatiado):

Figura 7.86 - Alterando o modo de desenho do sprite para Sliced

Vídeo 7.5 - Aplicando a técnica de 9-fatias

Agora sim, se você utilizar a Ferramenta Retangular (T) para redimensionar o sprite, você verá o resultado da
técnica.

Utilize Apenas a Ferramenta Retangular (T)


A técnica de 9-fatias só vai funcionar se você utilizar a Ferramenta Retangular (T), caso contrário, a ferramenta
de escala (R) vai distorcer o sprite de forma indesejada.

Veja na figura a seguir uma comparação entre Simple e Sliced:

Figura 7.87 - Da esquerda para direita: "Simple" e "Sliced"

Repare que as partes nos cantos, A, C, G e I não altera de escala, B e H é alterado apenas na horizontal, D e F é
alterado apenas na vertical, enquanto o centro E expande em ambas as direções.
Repetindo um Sprite

Quando estamos construindo o cenário do jogo, é comum duplicar os sprites e colocá-lo um do lado do outro para
completar o cenário (terreno, fundo, etc.). Para entender como isso funciona vamos preparar uma cena de teste e em
seguida utilizar as ferramentas próprias para repetir um sprite.

Preparando a Cena de Teste

1. Siga para a janela Project, entre na pasta Sprites e importe o diretório “Plataforma” que se encontra nos
arquivos do livro.

Este pacote de assets contém diversos gráficos para criar um jogo de plataforma, inclui plano de fundo, objetos e Tiles:

Figura 7.88 - Assets de jogo de plataforma

Free Platformer Game Tileset


Os assets do pacote de plataforma foram obtidos do site www.gameart2d.com, todos os créditos são para o
autor oficial.

Vamos utilizar o sprite que se encontra no diretório “Assets > Sprites > Plataforma > Fundo > Fundo.png” e repeti-
lo na cena.

2. Antes de adicionar o sprite de fundo na cena, ajuste a proporção da tela para ficar mais manejável de trabalhar
com a câmera. Siga para a janela Game e na lista de proporções de tela, selecione 16:9:
Figura 7.89 - Selecionando a proporção de tela 16:9

3. Adicione o sprite Fundo na janela Hierarchy, dessa forma o mesmo será posicionado na origem da cena.

4. Ajuste o tamanho proporcional do Fundo para cobrir as bordas da câmera, use a ferramenta retangular (T) e o
ponto no canto inferior direito do sprite.

Mantenha a tecla “Shift” pressionada para manter a proporção do sprite e a tecla “Alt” também pressionada para
redimensionar a partir do pivot central do sprite:

Figura 7.90 - Redimensionando sprite do fundo

5. Para estender o Fundo, selecione-o na cena e pressione “Ctrl + D” para duplicar, mova a cópia usando o encaixe
por vértice (V) e posicione exatamente no lado do primeiro Fundo:
Figura 7.91 - Duas cópias do fundo posicionados lado a lado

6. Repita o processo até chegar no tamanho desejado.

Existe um recurso que simplifica o processo de repetir um sprite que é o Modo de Desenho do sprite em Tiled, dessa
forma podemos repetir o sprite sem precisar duplicá-lo na cena.

Siga as etapas a seguir para repetir o sprite no modo Tiled:

Repetindo Um Sprite no Modo Tiled

1. Caso tenha acompanhado os exemplos anteriores, remova as cópias e deixe apenas o sprite original selecionado.

2. Siga para a janela Inspector e no componente Sprite Renderer, em Draw Mode, selecione a opção Tiled, neste
modo as partes do sprite são repetidos conforme o sprite é redimensionado:
Figura 7.92 - Draw Mode: Tiled

Assim que Tiled é selecionado, uma mensagem de aviso é exibida dizendo que o “Sprite Tilling pode não ser exibido
corretamente, pois o Sprite não está sendo gerado como Full Rect”:

Figura 7.93 - Mensagem de aviso no modo de desenho em Tiled

3. Para corrigir isso, selecione o sprite do Fundo na janela Project, siga para a janela Inspector, no parâmetro
Mesh Type, altere para Full Rect e pressione Apply para confirmar.

Ao fazer isso, a mensagem de aviso anterior deve sumir.

4. Para repetir o fundo, selecione o sprite na cena e ative a Ferramenta Retangular (T).

5. Utilize a borda lateral para redimensionar o sprite horizontalmente de forma contínua, você pode manter a tecla
“Alt” pressionada para redimensionar em ambos os lados:
Figura 7.94 - Redimensionando sprite no modo "Tiled"

Vídeo 7.6 - Repetindo um sprite no modo Tiled

No modo de exibição do sprite em Tiled, você também pode alterar o modo como o sprite é repetido usando o
parâmetro Tile Mode que possui a opção Continuous (padrão) e Adaptive:

Figura 7.95 - Tile Mode: Continuous e Adaptive

No modo Continuous o sprite é repetido de maneira uniforme conforme é redimensionado, já no modo Adaptive, o
sprite só é repetido quando alcança o valor de esticamento (parâmetro Stretch Value). Quando a opção Adaptive é
selecionada, o slider Stretch Value é exibido onde você pode definir o valor do esticamento, que pode ser de 0 até 1:
Figura 7.96 - Stretch Value

Quando o Stretch Value está em 1, o sprite só é repetido quando a imagem é esticada duas vezes o seu tamanho
original. Se preferir, você pode alterar a dimensão do sprite usando uma largura mais precisa, use a propriedade de Size
em Width, por exemplo, use o valor 20:

Figura 7.97 - Alterando a largura do sprite no modo Tiled

Ao alterar o parâmetro Size, o sprite é redimensionado dos dois lados devido a posição do pivot no centro do objeto.
Ordem de Exibição

Ao trabalhar com sprites em um jogo 2D é muito importante definir a ordem de exibição entre eles, onde um sprite
pode ficar na frente ou atrás de outro.

Existem duas maneiras de alterar a ordem de exibição dos sprites:

Modificar a posição Z do GameObject.


Utilizar a Ordem de Camadas (opção recomendada).

Se você posicionar um sprite por cima do outro na cena, pode ser que um sprite seja exibido na frente ou atrás do outro,
se o sprite estiver na frente como esperado, não quer dizer que sua ordem de exibição esteja correta. Para entender o
comportamento da exibição dos sprites, vamos continuar com o exemplo da seção anterior e adicionar outro sprite na
cena:

Ordem de Exibição Usando a Posição Z

1. Na janela Project, selecione o sprite “Assets > Sprites > Plataforma > Tiles > MeioSuperior” e altere Mesh
Type para Full Rect.

2. Adicione o sprite “MeioSuperior” na cena e renomeie para “Gramado”.

3. Com o Gramado selecionado, siga para a janela Inspector e altere Draw Mode para Tiled, em seguida ative a
Ferramenta Retangular (T) e redimensione como desejar.

4. Posicione o Gramado por cima do Fundo. Na figura a seguir você pode ver que o Gramado está atrás do
Fundo:

Figura 7.98 - Sprite do Gramado atrás do sprite de Fundo


Mesmo se você estiver vendo o sprite Gramado “corretamente” na frente do Fundo, isso é apenas uma ilusão da
câmera ortográfica, pois ambos os sprites Fundo e Gramado estão na mesma posição Z, dessa forma o Unity não sabe
ao certo como exibir os sprites.

5. Para resolver facilmente o problema da exibição inconsistente, altere a posição Z do Gramado para -1, isso vai
fazer com que o sprite seja trazido para frente do Fundo:

Figura 7.99 - Alterando a posição Z para trazer o sprite para frente

Experimente sair da visão 2D por um momento e veja que o sprite Gramado realmente está na frente do Fundo:

Figura 7.100 - Posição do sprite do Gramado sendo exibido em 3D

Por padrão a câmera está visualizando na direção positiva do eixo Z, por isso alteramos a posição Z do Gramado para
o valor -1, fazendo com que o mesmo se aproxime da câmera.

6. Reverta a posição Z do Gramado de volta para o valor 0, pois a seguir usaremos outra técnica de ordem de
exibição.

Em vez de alterar a ordem de exibição via coordenada Z, você pode usar a Ordem de Camadas (ou camada de
exibição). Para selecionar uma camada de exibição, selecione na cena o sprite Fundo, siga para a janela Inspector, e
no componente Sprite Renderer, na seção Additional Settings, no parâmetro Sorting Layer, veja que a camada
Default já se encontra selecionada, pois todos os objetos se encontram em uma camada padrão:

Figura 7.101 - Camada de ordenação "Default" padrão

Para ajustar a ordem de exibição dos objetos na camada atual, utilize o parâmetro Order in Layer (ordem na camada):

Figura 7.102 - Alterando a ordem de exibição na camada atual

Este parâmetro define a prioridade de exibição do sprite na camada de ordenação atual. Números menores são exibidos
primeiro, enquanto camadas com numeração mais alta se sobrepõem nas que estão abaixo, ou seja, partindo do valor 0,
um valor maior vai colocar o sprite cada vez mais para frente, enquanto um valor menor ou negativo vai colocar o
sprite cada vez mais para trás dos demais. No nosso exemplo, ambos os GameObjects Fundo e Gramado
compartilham a mesma ordem na camada, causando inconsistência na exibição.

Alterando a Ordem de Exibição

Selecione o Fundo e altere Order in Layer para o valor -1, ou selecione o Gramado e altere Order in Layer para o
valor 1, de qualquer maneira o Gramado dessa vez vai ser exibido na frente do Fundo como desejado.

Gerenciando Camadas de Exibição

Para uma cena simples com poucos objetos, a camada Default pode ser o suficiente, porém, é recomendado criar novas
camadas para agrupar diferentes objetos. Para gerenciar as camadas você precisa utilizar a janela Tags And Layers que
pode ser aberto de diferentes maneiras:
Com um sprite selecionado e seguindo na janela Inspector, no componente Sprite Renderer e na propriedade
Sorting Layer, selecione a opção Add Sorting Layer (adicionar camada de ordenação):

Figura 7.103 - Abrindo Tags & Layers pelo componente Sprite Renderer

Siga para o menu Edit > Project Settings, em seguida selecione a categoria Tags And Layers.
Siga para o final da barra de ferramentas, clique no botão Layers e selecione Edit Layers:

Figura 7.104 - Abrindo "Tags And Layers" pela barra de ferramentas

Criando e Gerenciando Camadas de Ordenação

1. Abra a janela Tags And Layers utilizando uma das três maneiras que foi mencionado anteriormente.

Na janela Inspector, veja a categoria Sorting Layers.

2. Clique sobre o ícone de seta ou sobre o nome Sorting Layers para expandir, ou encolher a categoria.

Veja que a camada padrão Default já se encontra na lista:


Figura 7.105 - Lista de camadas em "Sorting Layers"

3. Para adicionar uma nova camada, clique no pequeno botão com sinal de mais “+”. Em seguida use o campo de
texto para renomear de “New Layer” para “Fundo”:

Figura 7.106 - Renomeando nova camada

A ordem como as camadas são exibidas na lista Sorting Layers faz toda a diferença, objetos que estão nas
camadas no topo da lista sempre ficam atrás nas que estão abaixo da lista. Da forma como está na figura anterior, os
objetos na camada “Fundo” sempre estarão na frente dos objetos na camada “Default”.

A camada “Default” não pode ser removida, mas sua ordem na lista pode ser alterada:

4. Selecione a camada Default e simplesmente clique e arraste-a para baixo da camada Fundo que foi criada
anteriormente:

Figura 7.107 - Camada "Default" abaixo da camada "Fundo"

Dessa forma os objetos que estiverem na camada Fundo serão exibidos atrás dos objetos que estiverem na camada
Default.
5. Crie outra camada chamada Tiles que vai servir para adicionar os sprites do terreno. Deixe esta camada em cima
da Default, mas abaixo do Fundo. O Fundo deve estar sempre no topo da lista, ficando sempre atrás dos demais.

6. Crie outra camada chamada “Objetos” que pode ser utilizada para adicionar elementos gráficos de decoração
para o cenário ou para obstáculos em geral. Deixe a camada Objetos acima de Tiles.

Repare que a camada Default deve estar na última posição da lista, dessa maneira, novos objetos que forem
adicionados na cena sempre estarão por cima dos demais.

Veja na figura a seguir como as camadas devem ficar ordenadas:

Figura 7.108 - Ordem das camadas

Com as camadas criadas, agora você precisa defini-las para os GameObjects na cena.

7. Selecione o GameObject Fundo e seguindo na janela Inspector, no componente Sprite Renderer e no parâmetro
Sorting Layer, selecione a camada Fundo que foi criada antes:

Figura 7.109 - Definindo uma camada de exibição

8. Faça o mesmo para o sprite Gramado, só que dessa vez em Sorting Layer, selecione a opção Tiles.

Vídeo 7.7 - Criando e gerenciando camadas de ordenação

Agora que você já sabe como posicionar e definir a ordem de exibição dos objetos, recomendo praticar expandindo o
cenário atual. Dentro da pasta “Assets > Sprites > Plataforma > Objetos” você vai encontrar diversos objetos,
experimente adicioná-los na cena em diferentes ordens de exibição e veja como fica o resultado. Além disso, a pasta
“Assets > Sprites > Plataforma > Tiles”, contém outros sprites de Tiles para expandir o terreno. Não esqueça de
renomear os objetos de acordo e de criar parentescos, assim a hierarquia fica melhor organizada.
Usando Máscaras de Sprites

Máscaras de Sprite pode ser utilizado para esconder ou revelar partes de um Sprite, ou grupo de sprites. Para este
exemplo, vamos preparar uma cena com um sprite de presente, uma pilha de moedas e uma lupa. Vamos fazer com que
ao passar a lupa sobre o presente, parte do presente é escondida revelando a pilha de moedas em dentro:

Figura 7.110 - Sprites: Lupa, Pilha de Moedas e Presente

Preparando o Projeto de Exemplo

1. Na janela Project, entre na pasta Sprites e importe o diretório “Máscara” que se encontra nos arquivos do livro.

Este diretório contém os sprites exibidos na figura anterior.

2. Crie uma cena (“Ctrl + N”) e salve com o nome “Usando Máscaras”.

3. Adicione ambos os sprites Pilha de Moedas e Presente na origem da cena (clique e arraste-os um por vez da
janela Project para dentro da janela Hierarchy).

Gizmo da Câmera
Se quiser esconder o ícone da câmera para não atrapalhar a visão, é bem simples, siga para a barra de controles
da janela Scene, clique no botão Gizmos, e na categoria Built-in Components, clique no pequeno ícone de
câmera logo ao lado do nome Camera:
Figura 7.111 - Desabilitando o ícone da câmera na cena

4. Adicione o sprite Lupa um pouco para o lado dos demais:

Figura 7.112 – Posicionando o sprite da Lupa

Agora você precisa alterar a ordem de exibição dos sprites para garantir que a Lupa fique sempre por cima do
Presente. Lembre-se que por padrão, todos os sprites se encontram na camada de ordenação Default.

5. Selecione o sprite Presente na cena, siga para a janela Inspector, e no componente Sprite Renderer, altere
Order in Layer para o valor 1.

6. Selecione o sprite Lupa na cena e altere a propriedade Order in Layer para o valor 2.

Repare que o sprite Pilha de Moedas em Order in Layer possui o valor 0 padrão como desejado.
Agora você precisa adicionar o GameObject responsável por definir o formato da máscara de sprite:

Criando Uma Máscara de Sprite

1. Siga para a janela Hierarchy, clique no botão Create, aponte para 2D Object e selecione a opção Sprite Mask:

Figura 7.113 - Adicionando uma "Máscara de Sprite"

2. Renomeie o GameObject para “Máscara da Lupa” e adicione-o como filho do GameObject Lupa:

Figura 7.114 - Hierarquia da Lupa

3. Redefina as coordenadas do GameObject Máscara da Lupa.

O objeto da máscara de sprite não possui uma representação visual na cena, isso acontece porque ainda não foi definido
o sprite com o formato da máscara. Com a Máscara da Lupa selecionada, siga para a janela Inspector e no
componente Sprite Mask, você precisa selecionar um sprite no parâmetro Sprite:
Figura 7.115 - Componente Sprite Mask com destaque no parâmetro Sprite

A Lupa possui uma lente redonda, então precisamos de um sprite com formato circular. Para definir o formato da
máscara de sprite, você pode criar um sprite de formato circular utilizando o Criador de Sprites do Unity.

Criando e Definindo o Formato da Máscara de Sprite

1. Siga para a janela Project, dentro da pasta Máscara, clique em Create, aponte para Sprites e selecione a opção
Circle.

2. Renomeie o círculo para Formato de Lupa.

3. Para definir a máscara, selecione o GameObject Máscara da Lupa e na propriedade Sprite, clique no pequeno
círculo no final da propriedade para abrir a janela de seleção de sprite.

4. Selecione o sprite Formato de Lupa que você criou antes e feche a janela. Você também pode clicar e arrastar o
sprite Formato de Lupa da janela Project para dentro da caixa da propriedade Sprite:

Figura 7.116 - Selecionando um sprite de máscara

As outras propriedades você pode deixar como padrão.

Feito isso, você vai ver que um círculo alaranjado é exibido na cena, essa é a máscara do sprite que você vai utilizar
para realizar o efeito desejado:
Figura 7.117 - Contorno laranja indica a máscara do sprite

Contorno da Máscara de Sprite


O Gizmo alaranjado da máscara de sprite é apenas uma representação visual na cena e não é exibido durante o
jogo.

5. Posicione e redimensione o GameObject Formato da Lupa para que fique exatamente dentro da área da lente da
Lupa:

Figura 7.118 - Antes e depois de ajustar a máscara da lupa


Por padrão, os sprites não são afetados por nenhuma máscara, então selecione o sprite Presente, siga para a janela
Inspector, no componente Sprite Renderer, você vai encontrar a propriedade Mask Interaction:

Figura 7.119 - Parâmetro "Mask Interaction"

A opção padrão None (nenhum) significa que o sprite não será afetado por nenhuma máscara. No entanto, a opção
Visible Outside Mask (visível fora da máscara) exibe o sprite normalmente desde que não haja nenhuma máscara de
sprite por cima, por outro lado, a opção Visible Inside Mask (visível dentro da máscara) permite exibir o sprite ou
partes dele apenas quando uma máscara de sprite passar por cima.

Definindo a Interação da Máscara de Sprite

1. Selecione o sprite Presente, e como queremos escondê-lo, no parâmetro Mask Interaction, selecione Visible
Outside Mask.

2. Agora selecione o sprite Pilha de Moedas e faça o oposto, em Mask Interaction, selecione a opção Visible
Inside Mask.

Você pode ver o efeito diretamente na cena, selecione o GameObject Lupa e mova-o por cima do Presente. Veja que
partes do Presente é escondido conforme você passa a Lupa, revelando a Pilha de Moedas no fundo:
Figura 7.120 - Efeito de máscaras em ação

Agora se você mover o Presente para o lado, veja que a Pilha de Moedas não está visível por causa do efeito da
máscara. Então selecione a Lupa e passe por cima, veja que agora partes da Pilha de Moedas é exibida conforme a
posição da Lupa. É possível forçar a exibição dos sprites afetados por máscara, seguindo na barra de controles da
janela Scene, na lista de modos de exibição, selecione a opção Sprite Mask:

Figura 7.121 - Forçando a exibição dos sprites afetados por máscara

Agora que você já sabe usar máscaras de sprites, em vez de usar um formato simples como um círculo, experimente
criar diferentes formatos de sprite usando o sprite Polygon, as possibilidades são infinitas. Para alterar o formato da
máscara do sprite, basta selecionar o GameObject de máscara e alterar a propriedade Sprite do componente Sprite
Mask.

Vídeo 7.8 – Usando Máscaras de Sprite


Cenário com Tile Map
Nas seções anteriores você descobriu diversas ferramentas 2D e maneiras de manipular um sprite na cena. Um cenário
2D basicamente é construído utilizando diversos sprites arranjados de uma forma para criar o nível do jogo, porém, em
vez de adicionar cada sprite do nível manualmente, é possível criar um Tile Map (Mapa de Tiles) e utilizar um Editor
de Tiles para criar o cenário com mais rapidez e eficiência.

Tiles
É uma imagem quadrada, retangular ou hexagonal, chamadas de ladrilhos, ou o seu termo em inglês Tiles. As
imagens são espelhadas em um cenário com formato de grade em uma forma semelhante a construção de tijolos
em uma parede, saiba mais no site da Wikipédia:
https://pt.wikipedia.org/wiki/Jogo_eletrônico_baseado_em_ladrilho

O termo Tile Map basicamente refere-se a um Mapa de Tiles criado a partir de sprites individuais, onde você pode
selecionar cada Tile e literalmente “pintar” o cenário do jogo.

Criando uma Paleta de Tiles

Precisamos criar uma paleta de Tiles contendo os sprites do cenário, para fazer isso utilizamos a janela Tile Palette.
Para o cenário inicial do nosso exemplo, vamos utilizar os Tiles que se encontram no diretório “Assets > Sprites >
Plataforma > Tiles” (assumindo que você importou antes).

Criando Uma Paleta de Tiles

1. Salve a cena atual e crie uma nova cena (“Ctrl + N”).

2. Caso não tenha importado antes, importe o diretório “Plataforma” dos arquivos do livro para dentro da pasta
“Sprites” do seu projeto.

3. Crie os seguintes diretórios conforme a estrutura a seguir, sendo que o diretório “Mapa de Tiles” se encontra na
raiz do projeto:

Mapa de Tiles

Paletas

Tiles

Gramado

4. No menu Window, aponte para 2D e selecione Tile Palette.

Você pode redimensionar esta janela ou agrupá-la como preferir.

5. Clique no menu Create New Palette, em seguida no campo Name, defina um nome (por exemplo, “Paleta
Gramado”).

6. Mantenha as demais opções padrão e clique em Create:


Figura 7.122 - Criando uma nova paleta de Tiles

7. Para a pasta de destino, escolha o diretório “Assets > Mapa de Tiles > Paletas” que foi criado antes.

A paleta recém-criada é carregada automaticamente, agora precisamos adicionar os sprites na paleta.

8. Com a janela Tile Palette ainda aberta, entre no diretório “Assets > Sprites > Plataforma > Tiles”, selecione
todos os sprites e arraste-os para dentro da janela Tile Palette.

9. Mais uma vez precisamos definir o diretório onde os assets dos Tiles serão salvos, selecione o diretório “Assets >
Mapa de Tiles > Tiles > Gramado”.

Feito isso, os Tiles serão arranjados automaticamente:


Figura 7.123 - Paleta de Tiles do gramado

Vídeo 7.9 - Criando uma paleta de Tiles

Criando um Mapa de Tiles

Com a paleta de Tiles criada, agora precisamos criar o Mapa de Tiles onde os tiles serão inseridos. Veja na janela Tile
Palette, o menu Active Tilemap (Mapa de Tiles ativo) está desativado, pois não existe nenhum Mapa de Tiles criado
na cena:
Figura 7.124 - Não existe nenhum Mapa de Tiles na cena

O Mapa de Tiles selecionado nesta lista será utilizado para pintar os Tiles contido na paleta de Tiles atual (Paleta
Gramado), você pode selecionar a paleta atual ou criar outra acessando o menu de paletas disponíveis:

Figura 7.125 – Paleta de Tiles disponíveis

Criando Um Mapa de Tiles

1. Siga para a janela Hierarchy, clique no botão Create, aponte para 2D Object e selecione a opção Tilemap.

Ao fazer isso, um novo GameObject chamado Grid é criado com um GameObject filho chamado Tilemap:

Figura 7.126 - Novo Mapa de Tiles adicionado na cena

O GameObject Grid determina o layout de grade dos Tiles no Mapa de Tiles, enquanto o GameObject Tilemap é
aonde os Tiles são pintados.

2. Renomeie o GameObject Tilemap para “Plataforma”.

Repare que ao fazer isso, a janela Tile Palette é atualizada com o novo Mapa de Tiles selecionado:
Figura 7.127 - Mapa de Tiles “Plataforma” atualmente selecionado

A visão da cena também exibe o formato da grade:

Figura 7.128 - Grade de Tiles na cena

Configurando o Tamanho dos Tiles

Antes de começar a pintar os Tiles na cena, precisamos configurar o tamanho das células da grade conforme o tamanho
dos Tiles. Veremos como pintar Tiles em breve, mas só para demonstrar o processo, vamos pintar um Tile de exemplo.
Com a janela Tile Palette aberta, na barra de ferramentas de pintura, selecione a ferramenta Paintbrush (pincel de
pintura), é o botão com um ícone de pincel. Em seguida selecione um dos Tiles no painel e clique uma vez em uma das
células da grade na cena:
Figura 7.129 - Pintando um Tile de exemplo

Veja como o Tile está ultrapassando o tamanho padrão da célula:

Figura 7.130 - Na esquerda está errado e na direita o tamanho correto

Precisamos inserir o Tile para couber exatamente dentro da célula da grade, podemos resolver isso de duas maneiras:

Alterar a quantidade de pixeis por unidade do sprite.


Alterar o tamanho das células diretamente na grade dos Tiles.

Você pode conferir o tamanho padrão das células da grade selecionando o GameObject Grid, siga para a janela
Inspector e veja o parâmetro Cell Size, ambos x e y possui o valor de 1 unidade:
Figura 7.131 - Tamanho padrão das células

Vamos resolver o problema utilizando a primeira alternativa.

Lembre-se que todos os sprites importados no Unity possui um tamanho padrão de 100 pixeis por 1 unidade,
precisamos ajustar este valor conforme o tamanho da textura que pode ser conferido selecionando um dos Tiles e veja o
painel de informações na parte inferior da janela Inspector:

Figura 7.132 - Painel de informações de um sprite

Alterando a Quantidade de Pixeis Por Unidade dos Tiles

1. Na janela Project, entre no diretório “Assets > Sprites > Plataforma > Tiles” e selecione todos os sprites.

2. Sabendo que nossos Tiles possui um tamanho de 128 x 128 e cada célula na grade de Tiles corresponde a 1
unidade, basta alterar o parâmetro Pixels Per Unit para o valor 128:
Figura 7.133 - Alterando a quantidade de pixeis por unidade para os Tiles

3. Não esqueça de clicar em Apply para confirmar a alteração.

Feito isso, você pode conferir na cena que o Tile do exemplo inicial está perfeitamente encaixado dentro da célula.

Vídeo 7.10 - Criando um Mapa de Tiles

Isolando o Mapa de Tiles

Para facilitar a visualização do Mapa de Tiles, é possível isolá-lo do restante da cena, você pode fazer isso utilizando a
“Visibilidade dos Objetos” ou ative o modo de foco que faz parte das ferramentas do Mapa de Tiles. Com a janela Tile
Palette aberta, você vai encontrar no canto inferior direito da janela Scene uma pequena janela sobreposta chamada
Tilemap, em Focus On (ativar o foco) selecione a opção Tilemap:

Figura 7.134 - Focando no Mapa de Tiles

O Mapa de Tiles na cena fica em destaque enquanto o restante fica esbranquiçado. Para desativar o foco, selecione a
opção None.

Ferramentas de Pintura de Tiles

Para começar a pintar Tiles, abra a janela Tile Palette e verifique o Mapa de Tiles atual (Active Tilemap), apenas o
Mapa de Tiles atual será afetado pelas ferramentas de pintura. As ferramentas de pintura de Tiles se encontram no topo
da janela Tile Palette:

Figura 7.135 - Ferramentas de pintura de Tiles

Enquanto a janela Tile Palette estiver aberta, você pode acionar cada uma das ferramentas de pintura usando um
atalho:

Tabela 7.4 - Atalhos do teclado para as ferramentas de pintura de Tiles

Nas próximas seções você vai conferir uma breve descrição de cada uma das ferramentas de pintura:

Ferramenta de Pincel de Pintura

Utilize a ferramenta de Pincel de Pintura (B) para selecionar um Tile na paleta de Tiles, ou clique e arraste para
selecionar múltiplos Tiles de uma vez. Em seguida clique em qualquer lugar no Mapa de Tiles na cena para começar a
pintar os Tiles selecionados:
Figura 7.136 - Pintando Tiles usando a ferramenta de Pincel de Pintura

Para selecionar e pintar um Tile que já se encontra no Mapa de Tiles em vez da paleta de Tiles, mantenha a tecla “Ctrl”
pressionada enquanto seleciona um Tile no Mapa de Tiles, muito mais prático que ficar alternando para a janela Tile
Palette. É possível também alternar para a ferramenta de Apagar segurando a tecla “Shift” enquanto pinta no Mapa de
Tiles, mais uma vez agilizando o processo em vez de selecionar a ferramenta manualmente.

Ferramenta de Apagar

Utilize a ferramenta de Apagar (D) para remover Tiles do Mapa de Tiles, simplesmente selecione um Tile na cena:

Figura 7.137 - Removendo Tiles do Mapa de Tiles

Para remover uma área maior, clique e arraste a ferramenta na área desejada.
Ferramenta de Seleção

Use a ferramenta de Seleção (S) para selecionar um Tile no Mapa de Tiles na cena ou na paleta de Tiles, clique e
arraste para selecionar múltiplos Tiles de uma vez. As propriedades do Tile atualmente selecionado é exibido na janela
Inspector:

Figura 7.138 - Ferramenta de seleção de Tiles

Ferramenta de Mover

Utilize a ferramenta de Mover (M) para clicar e arrastar os Tiles atualmente selecionados para uma nova posição no
Mapa de Tiles na cena, os Tiles devem ser previamente selecionados usando a ferramenta de Seleção:

Figura 7.139 – Antes e depois de utilizar a ferramenta de Mover Tiles

Ferramenta de Preencher Caixa

Utilize a ferramenta de Preencher Caixa (U) para selecionar um Tile na Paleta de Tiles, ou clique e arraste para
selecionar múltiplos Tiles de uma vez. Em seguida clique e arraste no Mapa de Tiles na cena para criar uma forma
retangular, a forma de dentro será preenchida com os Tiles selecionados:
Figura 7.140 - Ferramenta de preencher caixa de Tiles

Ferramenta de Preencher

A ferramenta de Preencher (G) é utilizada para preencher uma área contendo o mesmo Tile ou células vazias. Utilize a
paleta de Tiles para selecionar o Tile que deseja preencher:
Figura 7.141 - Preenchendo Tiles com a ferramenta de Preencher Tiles

Ferramenta de Conta-gotas

Use a ferramenta de Conta-gotas (I) para selecionar um Tile no Mapa de Tiles ou na paleta de Tiles, clique e arraste
sobre múltiplos Tiles para selecionar tudo de uma vez. Assim que selecionado, a ferramenta atual é alternada
imediatamente para a ferramenta de Pincel de Pintura, permitindo que você pinte logo em seguida no Mapa de Tiles
com os Tiles selecionados.

Vídeo Sobre as ferramentas de pintura

Vídeo 7.11 - Ferramentas de pintura de Tiles

Organizando a Paleta de Tiles

Ao importar os sprites para dentro da paleta de Tiles (janela Tile Palette), os Tiles são arranjados automaticamente,
porém, as ferramentas de pintura de Tiles também pode ser utilizado dentro da paleta de Tiles, assim podemos
reorganizar os Tiles na posição como seria pintado no Mapa de Tiles na cena, facilitando a identificação e o padrão de
pintura. Para editar os Tiles dentro da paleta de Tiles, ative o botão Edit que se encontra logo ao lado da lista de
paletas, em seguida utilize as ferramentas de pintura para reorganizar os Tiles como preferir:
Figura 7.142 - Editando os Tiles na paleta de Tiles

Não esqueça de desativar o botão Edit quando finalizar a edição.

Propriedades do Componente Grid

O componente Grid é um guia que ajuda alinhar os GameObjects na grade baseado no layout selecionado (padrão
retangular):

Figura 7.143 - Componente Grid

Confira na tabela a seguir uma breve descrição de cada propriedade:

Tabela 7.5 - Propriedades da grade de Tiles (componente Grid)


Propriedades do Componente Tilemap

O componente Tilemap é um sistema que armazena e manipula assets de Tiles para criação de níveis 2D:

Figura 7.144 - Componente Tilemap

A função deste componente é de transferir as informações necessárias dos Tiles inseridos para outros componentes,
como o Tilemap Renderer. Este componente é utilizado em conjunto com o componente Grid para arranjar os Tiles
na grade associada.

Confira na tabela a seguir uma descrição de cada propriedade:

Tabela 7.6 - Propriedades do componente Tilemap


Propriedades do Tilemap Renderer

O componente Tilemap Renderer controla como os Tiles são exibidos no Mapa de Tiles:

Figura 7.145 - Componente Tilemap Renderer

Confira na tabela a seguir uma descrição de cada propriedade:


Tabela 7.7 - Propriedades do componente Tilemap Renderer
Regra de Tiles

Nas seções anteriores você aprendeu como é fácil criar um cenário usando um Mapa de Tiles, porém, você deve ter
notado também que é necessário selecionar cada Tile manualmente, a não ser que esteja pintando o mesmo Tile, caso
queira mudar de Tile, você precisa selecioná-lo na paleta de Tiles ou diretamente na cena usando a ferramenta de conta-
gotas. Seria melhor se o Unity inserisse automaticamente os Tiles apropriados conforme um padrão de regras
estabelecido.

Instalando o Complemento RuleTile

A ferramenta que iremos utilizar nesta seção não faz parte do Unity, porém, uma das grandes vantagens do sistema de
Tiles do Unity é a possibilidade de estender suas funcionalidades via script. Trabalhar com código não é o objetivo
desta seção, você não precisa “reinventar a roda”, visto que outras pessoas já criaram o script para você utilizar. Vamos
instalar um complemento chamado Regra de Tiles (ou RuleTile) que facilita a pintura de Tiles como descrito
anteriormente, você pode baixá-lo no repositório “2d-extras” oficial do Unity no seguinte endereço:

https://github.com/Unity-Technologies/2d-extras

Este repositório contém diversas outras ferramentas, no entanto, vamos utilizar apenas o RuleTile que também
disponibilizei nos arquivos do livro:

Instalando o Complemento Ruletile

Instalar um complemento no Unity é simplesmente uma tarefa de importar os scripts para dentro do seu projeto.

1. Copie e cole a pasta “Complementos” que se encontra nos arquivos do livro para o diretório raiz do seu projeto.

Se nenhuma mensagem de erro aparecer na janela Console, quer dizer que os scripts foram implementados com
sucesso.

2. Confira se o RuleTile foi realmente instalado seguindo para a janela Project, clique no botão Create e veja se o
menu “Tiles > RuleTile” existe.

Criando um Asset de Regra de Tiles

Um asset de regra de Tiles é utilizado em conjunto com uma paleta de Tiles, vamos continuar usando a mesma “Paleta
Gramado” que criamos na seção anterior, consulte “Criando uma Paleta de Tiles” para saber mais.

Criando e Definindo Um Asset de Regra de Tiles

1. Siga para a janela Project e no diretório “Assets > Mapa de Tiles > Tiles”, acesse Create > Tiles e selecione
RuleTile.

2. Renomeie o asset para “Regras Gramado”.

3. Com o asset Regras Gramado selecionado, siga para a janela Inspector e no parâmetro Default Sprite (sprite
padrão) selecione o sprite “Assets > Sprites > Plataforma > Tiles > MeioSuperior”.
O sprite padrão é utilizado como exibição na paleta de Tiles, além disso, este é o sprite que será inserido caso nenhuma
regra seja encontrada:

Figura 7.146 - Definindo o sprite padrão

4. Clique e arraste o asset Regras Gramado da janela Project para dentro de uma célula vazia na paleta de Tiles:

Veja que o sprite padrão é exibido:

Figura 7.147 - Adicionando o asset de Regra de Tiles na paleta atual

Repare que agora você pode selecionar os Tiles individuais que já se encontram na paleta ou selecione o Tile de regras.

Criando as Regras de Tiles

Criar regras de Tiles consiste em definir exatamente quando e qual Tile deve ser inserido com base nos Tiles vizinhos
ou áreas vazias ao redor do Tile atual, se todas as regras forem verdadeiras, o Tile definido será inserido no Mapa de
Tiles. Por exemplo, um Tile só é inserido caso não tenha nenhum Tile no topo, mas é preciso existir Tiles dos lados e
na parte inferior.
Criando Regras de Tiles

1. Com o asset Regras Gramado selecionado na janela Project, siga para a janela Inspector.

2. Na lista de regras (Tiling Rules), clique no botão com sinal de “+” para adicionar uma nova regra na lista:

Figura 7.148 - Adicionando uma nova regra de Tile

Os itens no topo da lista têm mais prioridade de exibição, você pode clicar e arrastar um item para arranjá-los como
quiser. Para remover um item, selecione-o e clique no pequeno botão com sinal de menos “-“.

Um novo item é adicionado com algumas opções padrões:

Rule: Permite selecionar o tipo de regra, com a opção “Fixed” podemos definir uma posição fixa.
Collider: Define a origem do colisor.
Output: Permite definir como o Tile será exibido, a opção “Single” significa apenas um único Tile (o escolhido
na caixa do sprite).

Além dessas opções, logo ao lado você vai encontrar 9 quadrados pequenos onde definimos as regras, em seguida na
caixa do sprite definimos o sprite que será inserido conforme as regras estabelecidas.

Repare que o sprite da nova regra é o mesmo sprite padrão:

Figura 7.149 - Caixa de regras e o sprite do Tile

As regras são definidas clicando nos pequenos quadrados (exceto o centro que alterna o tipo da regra), ao clicar uma
vez, um ícone com seta verde é exibido, indicando que um Tile precisa estar naquela posição, ao clicar novamente no
mesmo quadrado, um ícone com x vermelho será exibido, indicando que um Tile não pode estar naquela posição,
clique pela terceira vez para deixar em branco, um quadro vazio simplesmente significa que pode ou não existir um
Tile naquela posição.

3. Defina as regras e os sprites conforme as figuras a seguir (veja as legendas), na sequência que são mostradas:

Figura 7.150 - Sprite "MeioSuperior"

Figura 7.151 – Sprite “SuperiorDireito”

Figura 7.152 - Sprite "SuperiorEsquerdo"

Figura 7.153 - Sprite "LateralDireito"

Figura 7.154 - Sprite "LateralEsquerdo"

Figura 7.155 - Sprite "InferiorEsquerdo"

Figura 7.156 - Sprite "InferiorDireito"

Figura 7.157 - Sprite "MeioInferior"


Figura 7.158 - Sprite "Centro"

Figura 7.159 - Sprite "CantoDireito"

Figura 7.160 - Sprite “CantoEsquerdo”

Figura 7.161 – Sprite “ConectarCantoEsquerdo”

Figura 7.162 – Sprite “ConectarCantoDireito”

Assim que finalizado, abra a janela Tile Palette e selecione o Tile de regras que foi adicionado, em seguida utilize as
ferramentas de pintura como preferir, dessa vez, ao pintar no Mapa de Tiles usando a ferramenta de Pincel de Pintura
(B), os Tiles serão inseridos automaticamente conforme o padrão desenhado.

Tile Padrão
É importante que você pinte pensando nas regras que foram criadas, se o padrão desenhado não conferir com
nenhuma regra, o Tile com o sprite padrão será exibido no lugar.
Parte 8: Jogo de Plataforma 2D para
Celular

Neste Capítulo você vai aprender:

Criar um jogo de plataforma 2D com o objetivo de coletar todas as moedas no cenário e desbloquear a próxima
fase
Preparar o projeto para a plataforma Android ou iOS
Novas ferramentas de animação
Crie um efeito de partículas usando o Sistema de Partículas
Utilize o Cine Machine para fazer a câmera seguir o personagem
Gerar um APK para instalar o jogo em um dispositivo Android
Compilar o projeto para rodar em dispositivos rodando iOS

Este capítulo vai servir como base sólida para praticar as ferramentas 2D aprendidas no capítulo anterior. Vamos criar
um jogo parecido com o exemplo do jogo 3D, onde o objetivo do jogador é de coletar todas as moedas do cenário para
destrancar uma porta que permite prosseguir para a próxima fase, no entanto, diferente do jogo 3D, não vamos criar
uma contagem regressiva, mas o jogador pode perder ao cair nas armadilhas. Nosso jogo vai rodar em dispositivos
Android e iOS, a única diferença entre eles é a maneira como o jogo será exportado, todos os recursos serão
compatíveis para ambas as plataformas.

Comportamento do Jogo
Todo script para completar este jogo já está disponível para ser importado, você só precisa ligar os pontos. No
entanto, toda lógica será revisitada no próximo livro da série Unity Total.
Preparando o Projeto

Vamos preparar o projeto que será utilizado durante o decorrer do capítulo, começando com a criação do projeto.

Criando Um Projeto 2D

Abra o Unity Hub e crie um projeto usando o modelo 2D:

Figura 8.1 - Criando um projeto 2D

Escolhendo a Plataforma Desejada


Antes de continuar, vale a pena mencionar que as duas seções a seguir são específicas para a plataforma
Android e iOS respectivamente, recomendo escolher a plataforma onde deseja instalar o jogo para testar. As
demais seções não depende da plataforma escolhida, exceto no final onde você vai exportar o jogo para
Android ou iOS.

Configurando a Plataforma Android

Por padrão o Unity cria um projeto baseado na plataforma PC, para utilizar a plataforma Android precisamos baixar o
módulo próprio:

Instalando o Módulo do Android

1. Feche o Unity e em seguida abra o Unity Hub.

2. Na aba Installs, clique no ícone ... para abrir o menu de contexto da instalação, selecione a opção Add
Component:
Figura 8.2 - Adicionar componentes de instalação

3. Na lista de plataformas, selecione Android Build Support e Android SDK & NDK Tools, clique em Next para
continuar:

Figura 8.3 - Selecionado os módulos do Android

Veja que os arquivos são relativamente pesados, dependendo da sua conexão pode demorar um pouco para baixar.

4. Aceite o acordo de licença do Google marcando a opção “I have read and agree with the above terms &
conditions” (eu li e aceitei os termos e condições acima), clique em Done para começar a baixar e instalar.

5. Assim que finalizado, abra o projeto novamente.

Assim que instalado os módulos do Android, precisamos alterar a plataforma do projeto, é melhor fazer isso com o
projeto vazio, visto que o Unity reimporta todos os assets novamente, e dependendo do caso pode levar muito tempo.
Além disso, o Unity define diversas configurações específicas para a plataforma atual:

Alterando a Plataforma do Projeto

1. Siga para o menu File > Build Settings (“Ctrl + Shift + B”).

2. Na lista de plataformas, selecione a opção Android e clique no botão Switch Platform para alternar a
plataforma:

Figura 8.4 - Alternando a plataforma do projeto para Android

3. Aguarde até que o Unity prepare seu projeto para usar com a plataforma Android, como o projeto está vazio, o
processo vai ser bem rápido.

Configurando a Plataforma iOS

Por padrão o Unity cria um projeto baseado na plataforma PC, para utilizar a plataforma iOS precisamos baixar o
módulo próprio:
Instalando o Módulo do iOS

1. Feche o Unity e em seguida abra o Unity Hub.

2. Na aba Installs, clique no ícone ... para abrir o menu de contexto da instalação, selecione a opção Add
Component:

Figura 8.5 - Adicionar componentes de instalação

3. Na lista de plataformas, selecione a opção iOS Build Support e clique em Done para continuar:
Figura 8.6 - Selecionando o módulo do iOS

Veja que o arquivo é relativamente pesado, dependendo da sua conexão pode demorar um pouco para baixar.

4. Assim que finalizado, abra o projeto novamente.

Assim que instalado o módulo do iOS, precisamos alterar a plataforma do projeto, é melhor fazer isso com o projeto
vazio, visto que o Unity reimporta todos os assets novamente, e dependendo do caso pode levar muito tempo. Além
disso, o Unity define diversas configurações especificas para a plataforma atual:

Alterando a Plataforma do Projeto

1. Siga para o menu File > Build Settings (“Ctrl + Shift + B”).

2. Na lista de plataformas, selecione a opção iOS e clique no botão Switch Platform para alternar a plataforma:
Figura 8.7 - Alternando a plataforma do projeto para iOS

3. Aguarde até que o Unity prepare seu projeto para usar com a plataforma iOS, como o projeto está vazio, o
processo vai ser bem rápido.

Importando os Assets Necessários

Para criar o jogo deste capítulo, precisamos utilizar os assets iniciais disponibilizado nos arquivos do livro, que inclui
sprites, clipes de áudio e scripts. Os demais assets serão criados durante o decorrer do desenvolvimento do jogo.

Importando os Assets Necessários

1. Para importar os assets iniciais, utilize o seguinte pacote disponibilizado nos arquivos do livro:

Plataforma2DInicial.unitypackage

Você pode clicar duas vezes sobre o arquivo .unitypackage ou no Unity siga para o menu Assets, aponte para Import
Package e selecione Custom Package.
Plano de Fundo

Por padrão a câmera exibe uma cor azul-escuro como fundo, você pode conferir isso acessando a janela Game. Em vez
de uma cor sólida, seria interessante inserir uma imagem de fundo.

Definindo o Plano De Fundo do Jogo

1. Antes de qualquer coisa, defina a resolução de teste seguindo para a janela Game, abra o menu de proporções de
tela e selecione a opção 800x480 Landscape (800x480):

Figura 8.8 - Selecionando uma proporção de tela

Talvez você tenha percebido que o menu de proporções de telas possui mais opções desde a última vez que o recurso
foi mencionado. O Unity define diversas opções conforme a plataforma atualmente selecionada, neste caso, as opções
disponíveis são resoluções de tela comuns para celular, sendo que a opção Portrait significa “Retrato” e Landscape
significa “Paisagem”, seria o mesmo que dizer o celular está em pé ou deitado respectivamente:
Figura 8.9 - Modo Retrato e Paisagem

Pelo fato do nosso jogo ser baseado em plataforma 2D, seria mais correto desenvolver o jogo pensando no modo
paisagem (widescreen), por isso a escolha da opção 800x480 Landscape, esta resolução baixa também permite testar o
jogo com mais facilidade, mas você pode escolher qualquer outra resolução de paisagem, por exemplo, a 1920x1080
Landscape é uma resolução de alta definição bastante comum.

Resolução de Teste e a Resolução do Dispositivo


A resolução de teste selecionado no menu de proporções de tela é apenas utilizado dentro do editor, a resolução
real depende do dispositivo em que o jogo será executado.

2. Siga para a janela Project e selecione o sprite “Assets > Plataforma > Fundo > Fundo 1.png”.

3. Na janela Inspector, altere Mesh Type para Full Rect e clique em Apply.

4. Adicione o sprite “Fundo 1” na origem da cena, em seguida renomeie apenas para “Fundo”.

Veja que o sprite do fundo é posicionado na cena cobrindo completamente as lentes da câmera ortográfica:
Figura 8.10 - Plano de fundo

5. Com o Fundo selecionado na cena, siga para a janela Inspector, no componente Sprite Renderer, altere a
propriedade Draw Mode para Tiled.

6. Ative a Ferramenta Retangular (T) e redimensione na horizontal, um pouco além das bordas da câmera.

Agora precisamos definir o Fundo em uma camada de exibição:

7. No menu Edit, selecione Project Settings, na categoria Tags and Layers, expanda Sorting Layers e crie uma
camada chamada “Fundo”, deixa-a acima da camada “Default”.

8. Aproveite e crie mais três camadas, uma chamada “Objetos” abaixo do “Fundo”, uma chamada “Tiles” abaixo
de “Objetos” e outra “Personagem” abaixo de “Tiles”, na seguinte ordem:

Figura 8.11 - Criando as camadas de ordenação


A camada “Fundo” será utilizada para o plano de fundo do jogo, enquanto “Objetos” é para objetos em geral, “Tiles”
para o cenário que iremos criar e “Personagem” para o próprio jogador.

9. Selecione o Fundo na cena, siga para a janela Inspector, no componente Sprite Renderer, altere a propriedade
Sorting Layer para a camada Fundo que você criou.
Construindo o Cenário de Plataforma

O começo desta seção consiste em fazer o mesmo que você fez na seção “Cenário com Tile Map”, com a diferença nos
sprites contidos no novo pacote de plataforma. Assim que o cenário estiver pronto, vamos prepará-lo para conter outros
objetos.

As etapas a seguir são um resumo do que você precisa fazer:

Criando o Cenário do Jogo

1. Crie os seguintes diretórios conforme a estrutura a seguir, sendo que a pasta “Mapa de Tiles” se encontra na raiz
do projeto:

Mapa de Tiles

Paletas

Tiles

Primavera

2. Crie um Mapa de Tiles (menu Create na janela Hierarchy, aponte para 2D e selecione a opção Tilemap). Em
seguida renomeie de “Tilemap” para “Plataforma”.

3. Renomeie também o GameObject Grid para “Grade de Tiles”.

4. Com o GameObject Plataforma selecionado, siga para a janela Inspector, no componente Tilemap Renderer,
altere Sorting Layer para a camada Tiles que você criou antes:

Figura 8.12 - Alterando a camada de exibição do Mapa de Tiles

5. Selecione todos os sprites contidos no diretório “Assets > Sprites > Plataforma > Tiles > Primavera” e altere
Pixels Per Unit para o valor 128, clique em Apply para confirmar.
6. Crie uma paleta de Tiles usando a janela Tile Palette (Window > 2D > Tile Palette) e carregue os mesmos
sprites que foram selecionados na etapa anterior.

7. Construa um cenário parecido como na Figura a seguir.

Tiles Diagonais
Evite utilizar os Tiles com declive (diagonais), por enquanto nosso jogo vai suportar apenas plataformas retas.

Crie um cenário pequeno para começarmos a trabalhar, depois você pode estendê-lo como quiser:

Figura 8.13 - Cenário básico de plataforma

Objetos de Decoração

Além do fundo e do Mapa de Tiles, podemos adicionar objetos de decoração, como gramado, árvores, folhas, etc. Esses
objetos geralmente não são interagidos pelo jogador, seu objetivo é de complementar o cenário atual.

Adicionando Objetos de Decoração

1. Comece criando um parentesco para adicionar os objetos de decoração, então adicione um GameObject vazio
(“Ctrl + Shift + N”), renomeie para “Cenário” e redefina suas coordenadas.

Na janela Project, siga para a pasta “Assets > Sprites > Plataforma > Cenário” e você vai encontrar diversos sprites
de decoração.

2. Adicione quantos sprites de decoração você achar interessante, coloque-os como filho do GameObject Cenário.

3. Certifique-se de adicionar os objetos de decoração na camada de ordenação “Fundo” que foi criada antes (Sprite
Renderer, parâmetro Sorting Layer), além disso, altere a ordem na camada (Order in Layer) para um valor acima
de 0, pois o GameObject Fundo já se encontra nesta posição:
Figura 8.14 - Alterando a ordem de exibição dos objetos de decoração

4. Renomeie os objetos na hierarquia, por exemplo, em vez de “Asset 2”, renomeie para “Árvore 1”, e assim por
diante.

Na figura a seguir você pode conferir um exemplo:

Figura 8.15 - Adicionando objetos de decoração para o cenário

Adicionando um Colisor

Para permitir que o personagem ou qualquer outro objeto interaja com o cenário, precisamos adicionar um componente
de colisor:

Adicionando o Colisor do Mapa de Tiles

1. Selecione o GameObject Plataforma, siga para a janela Inspector e clique no botão Add Component, pesquise
por “Tile” e selecione o componente Tilemap Collider 2D.

Assim que o componente Tilemap Collider 2D é adicionado, todos os Tiles na cena recebem um colisor, como
indicado pelas caixas verdes na figura seguir:
Figura 8.16 - Colisores adicionados em cada Tile

No entanto, esta não é a maneira correta, tanto no quesito de desempenho quanto em problemas de colisão que pode
ocorrer. O colisor precisa ser calculado apenas nas extremidades dos conjuntos de Tiles, em vez de cada Tile
individual, isso é resolvido adicionando um colisor composto.

2. Com o GameObject Plataforma selecionado, no componente Tilemap Collider 2D, ative a opção Used By
Composite:

Figura 8.17 – Habilitando a opção “Used By Composite”

Ao ativar esta opção, uma mensagem de aviso é exibida informando que o colisor composto não vai funcionar
corretamente até que o componente Composite Collider 2D seja adicionado. Podemos adicionar o componente que
está faltando no próprio GameObject Plataforma ou no GameObject pai na hierarquia, vamos optar pela última opção.

3. Selecione o GameObject Grade de Tiles, siga para a janela Inspector, clique no botão Add Component e
pesquise por “composite”, adicione o componente Composite Collider 2D.

Veja que agora o colisor é apenas exibido nas extremidades dos conjuntos de Tiles, você pode visualizar melhor o
colisor desabilitando o fundo e o componente Tilemap Renderer do GameObject Plataforma:
Figura 8.18 - Colisor composto em ação

Agora você pode continuar pintando novos Tiles e o colisor será recalculado automaticamente. Entretanto, existe um
pequeno problema, experimente executar o projeto pressionando “Ctrl + P” e veja que o cenário todo está caindo, isso
acontece porque o componente Composite Collider 2D depende do componente Rigidbody 2D que foi adicionado
automaticamente, este componente permite simular física no Unity, incluindo a gravidade, por isso que o cenário está
caindo.

4. Certifique-se que não esteja no modo de execução, senão as alterações serão perdidas ao encerrar o projeto.

5. Selecione o GameObject Grade de Tiles, siga para a janela Inspector e no componente Rigidbody 2D, no
parâmetro Body Type, selecione a opção Static:

Figura 8.19 - Selecionando o tipo de física para um objeto

A opção padrão Dynamic permite simular física em objetos dinâmicos que estão em movimento, enquanto que Static é
apenas um objeto estático que não se move e não é afetado por nenhuma força.

Parede Lateral

Além de adicionar um colisor para os Tiles, precisamos adicionar uma parede invisível nas laterais do cenário, com um
componente de colisão que vai impedir que o personagem saia do cenário e caia para o infinito e além.

Criando Uma Parede Lateral Invisível

1. Clique com o botão direito do mouse sobre a Grade de Tiles e selecione Create Empty, em seguida renomeie
para “Parede Lateral Esquerdo”.

2. Adicione o componente Box Collider 2D (com o objeto selecionado, siga para a janela Inspector, clique em Add
Component, navegue na categoria Physics2D e selecione o componente Box Collider 2D).

3. Use a ferramenta de mover (W) para posicionar o objeto no começo do nível, fora do cenário, mas um pouco para
dentro, dessa forma a colisão ocorre dentro do cenário e não fora.
Agora você precisa alterar a altura do colisor para cobrir a altura do cenário. Seguindo para o componente Box
Collider 2D, você vai encontrar o botão Edit Collider:

Figura 8.20 - Botão Edit Collider (editar colisor)

4. Clique no botão Edit Collider para ativar a edição do colisor.

A caixa de colisão exibe pequenos pontos ao redor do colisor:

Figura 8.21 - Gizmo do colisor no modo de edição

5. Para aumentar a altura do colisor, clique e arraste o ponto de cima e em baixo do colisor. Aumente a altura da
caixa do colisor até ser o suficiente para impedir que o personagem saia do cenário, faça de uma forma que a parte
inferior do colisor se sobreponha com o colisor dos Tiles:
Figura 8.22 - Ajustando a altura e posição do colisor da parede lateral

6. Desative o botão Edit Collider para sair do modo de edição, em seguida marque a propriedade Used By
Composite.

Lembrando que o componente Composite Collider 2D foi adicionado no GameObject Grade de Tiles, dessa forma o
colisor será ajustado automaticamente conforme os GameObjects filho contendo um colisor usado pelo compositor
(propriedade Used By Composite ativado). É importante que os colisores se sobreponham, senão o colisor será
calculado separadamente. Na figura a seguir você pode conferir que o colisor da Parede Lateral Esquerdo faz parte (é
composto) com o colisor dos Tiles:
Figura 8.23 - Colisor composto em ação

Pelo fato do colisor ser invisível, fica difícil identificá-lo na cena, mas podemos definir um ícone que ajuda identificar
objetos.

7. Com o GameObject Parede Lateral Esquerdo selecionado, siga para a janela Inspector e selecione um ícone
clicando no seguinte botão como indicado na figura a seguir:

Figura 8.24 - Definindo um ícone de exibição para um GameObject

Os ícones largos exibem o nome do GameObject, enquanto os ícones com formato de diamante exibem apenas o ícone.

8. Duplique o GameObject Parede Lateral Esquerdo, renomeie para “Parede Lateral Direito” e mova-o para o final
da fase.

Material de Física

Aproveitando que estamos falando de colisões, vamos resolver um pequeno problema. Ao mover o personagem, uma
força ou velocidade é aplicada que faz de fato o personagem se mover, essa força gera uma fricção nos colisores que
faz o personagem “grudar” ou “travar” em outros colisores.

Movimentação do Personagem
Você pode testar os efeitos do material de física quando formos adicionar os componentes de movimento do
personagem.

Este problema pode ser resolvido removendo a fricção dos colisores, isso é feito criando um asset de material de
física 2D:

Criando e Definindo Um Material de Física 2D

1. Siga para a janela Project e na raiz do diretório, crie uma pasta chamada “Physics2D”. Em seguida entre na nova
pasta.

2. No menu Create, selecione a opção Physics Material 2D.

3. Renomeie o novo material para “SemFricção”.

Com o novo material de física selecionado, você pode ver na janela Inspector a propriedade Friction.

4. Altere o valor do parâmetro Friction para 0 (sem fricção):

Figura 8.25 - Alterando a fricção de um material de física 2D

Agora você precisa aplicar este material no colisor dos Tiles.

5. Selecione a Grade de Tiles e siga para a janela Inspector.

Repare que o componente Composite Collider 2D possui um parâmetro chamado Material, que por padrão não possui
nenhum material.

6. Para aplicar o novo material que você acabou de criar, simplesmente clique e arraste o material SemFricção da
janela Project para dentro da caixa da propriedade Material:
Figura 8.26 - Definindo um material de física 2D

Você também pode aplicar o material de física clicando no pequeno botão com círculo no final do parâmetro Material,
a janela do seletor de material será aberta, selecione o asset SemFricção e feche a janela.

Camadas de Colisão

Com o Unity podemos dizer exatamente quais objetos devem interagir com outros separando-os em camadas de
colisão. Dessa forma não só organizamos nosso projeto, mas também melhoramos o desempenho do jogo, visto que o
Unity não precisa calcular colisão entre objetos sem necessidade. Vamos criar duas camadas, uma para o cenário (ou
qualquer objeto que permita que o nosso personagem reaja como colisão), e outra camada para o próprio jogador.

Criando e Definindo Camadas de Colisão

1. Siga para o menu Edit e selecione Project Settings, na categoria Tags and Layers, expanda a propriedade
Layers.

Veja que o Unity já cria algumas camadas padrão (Builtin Layer) que não pode ser removida ou editada, porém, a
camada 8 em diante (User Layer) está disponível para ser definida.

2. Na camada 8 (User Layer 8) digite “Jogador”, logo em seguida, na camada 9, digite “Plataformas”:
Figura 8.27 - Criando camadas

A camada “Jogador” será utilizada no personagem que iremos criar na próxima seção, e a camada “Plataformas”
vamos definir para o Mapa de Tiles.

3. Feche a janela Project Settings e selecione o GameObject Grade de Tiles, (lembre-se, este é o GameObject que
se encontra o colisor dos Tiles), em seguida na janela Inspector, no canto superior direito, clique no menu Layer e
selecione a opção Plataformas que foi criada antes:

Figura 8.28 – Selecionando uma camada

Uma janela de confirmação será exibida, perguntando se você deseja aplicar a camada nos filhos do parentesco.

4. Selecione No, this object only (Não, apenas neste objeto):


Figura 8.29 – Não alterar as camadas nos filhos do parentesco
Criando o Personagem

Nesta seção vamos construir o personagem controlado pelo jogador, isso é feito adicionando e configurando todos os
componentes necessários. Alguns assets como scripts e sprites já foram importados e outros estaremos criando durante
o processo, desde a adição do sprite até as animações.

O GameObject do Personagem

Os sprites do personagem se encontram no diretório “Assets > Personagem > Sprites”, e dentro deste diretório você
vai encontrar três pastas contendo os sprites que determina os estados de animação, podemos usar o sprite “Parado >
quadro-1.png” para criar o GameObject inicial:

Figura 8.30 - O personagem principal do jogo

Todos os créditos são do autor oficial da arte:

https://opengameart.org/content/running-and-jumping-boy-sprite-sheets

Criando o Gameobject do Personagem

1. Adicione na cena o sprite “Assets > Personagem > Sprites > Parado > quadro-1”, em seguida renomeie para
“Personagem”.

Repare que o tamanho original do sprite é muito grande em comparação ao cenário, podemos resolver isso alterando os
pixeis por unidade.

2. Na janela Project, selecione o sprite “Assets > Personagem > Sprites > Parado > quadro-1”, siga para a janela
Inspector e altere Pixels Per Unit para o valor 500 e clique em Apply.

3. Repita a etapa anterior para os demais sprites contidos no diretório “Assets > Personagem > Sprites”.

4. Posicione o Personagem no começo da fase, um pouco acima do Mapa de Tiles, algo parecido como na figura a
seguir:
Figura 8.31 - Personagem adicionado na cena

Posicionar o personagem no ar nos permite testar a queda inicial, depois podemos colocá-lo exatamente sobre os Tiles
do cenário.

A Tag do Personagem

Antes de adicionar e configurar os componentes necessários, vamos definir a Tag do personagem. Lembrando que uma
Tag pode ser utilizada para identificar um GameObject específico via script, a Tag do jogador será utilizada por outros
objetos para identificar o personagem na cena.

Criando e Definindo a Tag do Jogador

1. Para criar uma Tag, siga para o menu Edit e selecione Project Settings, na categoria Tags and Layers, expanda
a seção Tags e clique no botão com sinal de “+”, em seguida renomeie a nova Tag para “Jogador”:
Figura 8.32 - Criando uma Tag para o jogador (personagem)

2. Com o Personagem selecionado, siga para a janela Inspector e selecione a Tag chamada “Jogador”:

Figura 8.33 - Selecionando a Tag Jogador

A camada de Colisão do Personagem

Assim como fizemos para os Tiles, vamos definir uma camada de colisão própria para o personagem, desta forma
temos mais controle sobre quais objetos interagem com o personagem. Lembrando que a camada “Jogador” já foi
criada na seção “Camadas de Colisão”, vamos apenas defini-la.

Definindo a camada de colisão do personagem

1. Selecione o Personagem e siga para a janela Inspector, no menu Layer, selecione a opção “Jogador”:
Figura 8.34 - Definindo a camada de colisão do personagem

Repare que estamos utilizando o nome “Jogador”, mas, na verdade refere-se ao Personagem controlado pelo jogador.

Criando o Prefab do Personagem

Vamos aproveitar e criar um Prefab do personagem, esta etapa pode ser feita depois que o personagem estiver
completamente pronto, já que estamos lidando com a criação do GameObject, vamos fazer isso agora.

Criando o Prefab do Personagem

Clique e arraste o GameObject Personagem da janela Hierarchy para dentro da janela Project, no diretório “Assets >
Personagem”. Lembrando que as próximas alterações no Personagem devem ser feitas no Modo Prefab, senão as
alterações serão controladas e marcadas no menu Overrides, saiba mais acessando a seção “Manipulando as
Alterações”.

Adicionando e Configurando os Componentes

Para tornar um sprite estático em um GameObject dinâmico, precisamos adicionar os componentes necessários e
configurar seus parâmetros conforme o design do jogo. Lembrando que todos os scripts de movimento do personagem
já foram importados, você só precisa adicioná-los no Personagem:

Adicionando e Configurando os Componentes

Quando adicionamos o sprite do personagem na cena, o componente Sprite Renderer é adicionado automaticamente,
mas precisamos alterar sua ordem de exibição padrão:

1. No componente Sprite Renderer, no parâmetro Sorting Layer, selecione a opção Personagem (criado
anteriormente como indicado na Figura 8.11).

Vamos utilizar a física do Unity para movimentar o personagem, para que isso seja possível, precisamos adicionar o
componente Rigidbody 2D:

2. Na janela Inspector, clique no botão Add Component, acesse Physics2D e selecione o componente Rigidbody
2D.

Altere as propriedades do Rigidbody 2D conforme a seguir:

Body Type: Verifique se a opção Dynamic está selecionada, dessa forma o personagem será movido pela
simulação da física conforme sua velocidade.
Gravity Scale: Define a gravidade, quanto maior o valor, mais força será aplicada na queda. Altere para o valor
4.
Collision Detection: Determina o modo de colisão, selecione a opção Continuous para realizar o cálculo com
mais precisão. A opção padrão Descrete pode fazer com que os colisores se sobreponham, causando um efeito
indesejado.
Interpolate: Selecione a opção Interpolate para suavizar a movimentação durante os quadros do jogo.
Constraints: Em Freeze Rotation podemos travar ou congelar a rotação do personagem, marque a opção Z,
dessa forma evitamos que o personagem caia para os lados.

Figura 8.35 - O componente Rigidbody 2D

Para permitir que o motor de física do Unity realize os cálculos da física, precisamos adicionar um colisor, permitindo
que o Personagem possa interagir com outros objetos no jogo. O colisor com formato de caixa é o mais comum e ideal
para o nosso personagem:

3. Siga para a janela Inspector, clique em Add Component, acesse Physics2D e selecione o componente Box
Collider 2D.

O volume do colisor será ajustado conforme o tamanho do sprite na cena, porém, precisamos “espremer” um pouco o
colisor para caber dentro da arte do sprite e não nas áreas vazias. O parâmetro Offset desloca o colisor, enquanto o
parâmetro Size define o volume do colisor.

4. No componente Box Collider 2D, ajuste o Offset para as coordenadas (0.017, -0.09) e Size para as
coordenadas (0.64, 1.3):
Figura 8.36 - Ajustando o colisor do personagem

Na figura a seguir você pode ver o resultado na cena (Gizmo verde), você não precisa cobrir tudo, apenas parte do
“corpo”:

Figura 8.37 - Colisor do personagem exibido na cena

Agora vamos adicionar os scripts personalizados que faz de fato o personagem ser movimentado pelo jogador.

5. No diretório “Assets > Personagem > __Scripts”, você vai encontrar o script EntradasDoPersonagem e
Personagem, adicione ambos os scripts para o GameObject Personagem.

Adicionando Um Script Como Componente


Lembrando que a maneira mais fácil de adicionar um script para um GameObject é clicando e arrastando o
asset do script da janela Project para dentro da janela Inspector.

O componente Entradas Do Personagem é utilizado para capturar as entradas do jogador (teclas e botões touch), veja
que a propriedade Entrada Atual possui a opção “Teclado” e “Touch”, sendo “Teclado” a opção padrão. Quando o
jogo for executado por um celular real, a entrada será alternada para “Touch” automaticamente, porém, a opção
“Teclado” nos permite testar o jogo no PC durante seu desenvolvimento:

Figura 8.38 - Componente "Entradas Do Personagem"

As teclas definidas são “A” e “D” para movimentar o personagem na horizontal, a tecla “Espaço” para pular e a tecla
“E” para interagir com os objetos no cenário. O componente Personagem utiliza as entradas capturadas no componente
Entradas Do Personagem para mover o personagem na cena, além disso, este componente detecta a colisão com o
cenário e define as propriedades de movimento e do pulo:

Figura 8.39 - Componente "Personagem"


Veja na tabela a seguir uma descrição das propriedades:

Tabela 8.1 - Propriedades do componente "Personagem"


6. No componente Personagem, altere apenas a propriedade Camada de Colisão para a opção “Plataformas” e
mantenha o resto padrão.

7. Execute o projeto (“Ctrl + P”) e faça os testes iniciais. Os controles são bem simples, utilize as teclas “A” e “D”
para se movimentar na horizontal e a tecla “Espaço” para pular.

Com o projeto ainda em execução, alterne para a janela Scene e veja que existe 2 linhas vermelhas no pé do
personagem sendo disparados para baixo, esses são os “raios de disparo” que mencionei anteriormente:
Figura 8.40 - Exibição dos raios de disparo

Podemos usar os “raios de disparo” para detectar o ambiente em volta do personagem. Neste caso, estamos utilizando
para detectar se o personagem está sobre uma superfície, se esta verificação não fosse feita, o personagem poderia
pular mais de uma vez, além disso, o sistema de animação não saberia ao certo quando transitar entre os estados. No
entanto, a distância dos raios de disparo está muito grande (deixei de forma intencional para demonstrar o caso),
fazendo com que o personagem consiga pular muito cedo sem mesmo colidir com as plataformas. Podemos resolver
isso diminuindo a distância dos raios, uma pequena distância deve ser suficiente para o nosso jogo.

8. No componente Personagem, altere a Distância da Plataforma para um valor baixo, por exemplo, 0.02 (faça
isso com o projeto encerrado).

Para detectar a colisão com as plataformas, apenas 2 raios são necessários, um em cada ponta do “pé”, porém, pode
existir casos em que a largura da plataforma é menor entre os dois raios:
Figura 8.41 - Na esquerda apenas 2 raios e na direita 3 raios

Veja que na figura anterior, no exemplo à esquerda nenhum dos raios está detectando a plataforma branca no centro, se
isso acontecer, o personagem será impedido de pular, pois o jogo não sabe que o personagem realmente está sobre uma
superfície. Já no exemplo da direita, 3 raios foram utilizados, neste caso o raio do meio detectou a colisão com a
plataforma como esperado, porém, pode acontecer de a plataforma branca estar entre dois raios, causando o problema
novamente, neste caso 4 raios devem resolver o problema.

9. Nosso jogo não possui plataformas com largura menor que os Tiles do cenário, por via das dúvidas, no parâmetro
Quantidade de Raios, altere para o valor 4, vale ressaltar quanto maior o valor, mais processamento será exigido
durante a execução do jogo.

Na figura a seguir você pode ver que dois raios estão detectando a plataforma (linhas vermelhas) e dois raios não está
detectando nada (linhas verdes), mesmo assim, o personagem pode pular:
Figura 8.42 – 4 raios de disparo

Efeitos Sonoros

Vamos aproveitar e definir o som do pulo e o som quando o personagem morre. No componente Personagem, na seção
“Referências” precisamos definir as referências nas propriedades Som Pulo e Som Morreu. Repare que ambos os
parâmetros requerem uma referência do tipo ReproduzirEfeitoSonoro, este é um script que permite reproduzir
qualquer efeito sonoro.

Definindo os Efeitos Sonoros do Personagem

Ambos os efeitos sonoros precisam ser adicionados em um GameObject separado, dentro do parentesco do
Personagem.

1. Clique com o botão direito do mouse no GameObject Personagem e selecione Create Empty, em seguida
renomeie para “Pulo AudioSource” e se necessário redefina suas coordenadas.

2. Na janela Project, entre no diretório “Assets > __Scripts > Áudio” e adicione o script
ReproduzirEfeitoSonoro para o GameObject Pulo AudioSource.

Repare que ao fazer isso, o componente Audio Source é adicionado automaticamente.

3. No componente Audio Source, defina na propriedade AudioClip o clipe de áudio “Assets > Personagem >
Áudio > Pulo” (arquivo do tipo .wav).

4. Desmarque a propriedade Play On Awake (pois não queremos que o som seja reproduzido ao iniciar).

Quando se trata de efeitos sonoros, o som geralmente é variado, por exemplo, o som de uma explosão nunca soa do
mesmo jeito.

Podemos variar o efeito sonoro de três maneiras:

Alterar o Pitch (altura do som) usando valores aleatórios, quanto maior o valor, mais agudo é o som, quanto
menor, mais forte é o som.
Utilizar múltiplos clipes de áudio para o mesmo efeito sonoro.
Uma combinação das duas opções anteriores.

O componente Reproduzir Efeito Sonoro permite fazer tudo isso, porém, vamos apenas alterar o Pitch de forma
aleatória.

5. No componente Reproduzir Efeito Sonoro, marque Pitch Aleatório, em seguida ajuste Pitch Min para o valor
0.8 e Pitch Max para o valor 1.2:

Figura 8.43 - Ativando o Pitch aleatório para o som da moeda coletada

Pitch Alto ou Baixo


Cuidado ao ajustar o valor mínimo e máximo, se você exagerar nos valores, o som pode ficar estranho.

6. Selecione o Personagem e de volta no componente Personagem (Script), defina a referência no parâmetro Som
Pulo como sendo o GameObject Pulo AudioSource:

Figura 8.44 - Definindo a referência do som do pulo

7. Repita as etapas anteriores para criar um GameObject chamado “Morreu AudioSource”, selecione o clipe de
áudio “Morreu” (que se encontra no mesmo diretório do clipe de áudio do pulo) e defina a referência Som Morreu
no componente Personagem.

Para o som de morreu, recomendo não utilizar o Pitch Aleatório, visto que o mesmo fica um pouco distorcido, a não
ser que você utilize outro clipe de áudio com efeito diferente.
Animando o Personagem

Até agora nosso personagem pode se movimentar livremente no cenário, mas você deve ter notado que apenas o sprite
inicial é exibido, tanto para correr e pular. Podemos melhorar a experiência do jogo criando animações para 3 estados
de animação (parado, correndo e pulando). Você já aprendeu um pouco sobre o sistema de animações do Unity no
capítulo “Primeiro Projeto de Jogo 3D” na seção “Animação da Moeda”, nesta seção vamos utilizar o mesmo
conhecimento e aprender mais sobre os estados de animação (Animation State Machines).

Preparando as Animações

Para começar a animar, precisamos criar os Clipes de Animação e gerenciá-los utilizando um Controlador de
Animação (Animator).

Criando os Clipes de Animação

1. Na janela Project, siga para o diretório “Assets > Personagem” e crie uma pasta chamada “Animações”, em
seguida entre nesta pasta.

Vamos criar 4 clipes de animação, um para o estado “parado”, “correndo” e dois para os quadros do pulo (pulando e
caindo).

2. Crie um clipe de animação acessando o menu Create e selecione Animation, em seguida renomeie para
“PersonagemParado”. Com o asset ainda selecionado, siga para a janela Inspector e marque a opção Loop Time,
dessa forma podemos reiniciar a animação ao finalizar.

3. Duplique o clipe de animação anterior (selecione-o na janela Project e pressione “Ctrl + D”), em seguida
renomeie para “PersonagemCorrendo”.

4. Crie uma pasta chamada “No Ar”, em seguida entre nesta pasta e crie um clipe de animação chamado
“PersonagemPulo”. Duplique-o e renomeie para “PersonagemQueda”.

5. Feito isso, volte para o diretório “Assets > Personagem > Animações” e crie um Controlador de Animação
acessando o menu Create e selecione a opção Animator Controller. Em seguida renomeie para
“PersonagemAnimator”.

Com os assets criado, agora precisamos definir o controlador de animação para o nosso Personagem.

6. Selecione o GameObject Personagem e siga para a janela Inspector, clique em Add Component, acesse
Miscellaneous e selecione a opção Animator.

7. No componente Animator, no parâmetro Controller, defina a referência como sendo o asset


“PersonagemAnimator”.

Definindo os Estados e Quadros de Animação

Definir os quadros das animações basicamente consiste em definir quais sprites pertence a qual clipe de animação. Isso
é feito clicando e arrastando os sprites da janela Project para dentro da janela Animation, cada sprite é inserido em um
quadro de animação diferente, dessa forma podemos criar uma ilusão de movimento. Antes de definir os quadros de
animação, precisamos definir o clipe de animação no Controlador de Animação onde a animação será utilizada, isso é
feito utilizando a janela Animator.

Criando e Definindo um Blend Tree

Para a animação do estado “parado” e “correndo”, vamos criar um Blend Tree, este recurso de animação é utilizado
para permitir que múltiplas animações sejam misturadas suavemente.

Criando e Definindo Um Blend Tree

1. Na janela Animator, clique com o botão direito do mouse em uma área vazia, aponte para Create State e
selecione From New Blend Tree:

Figura 8.45 - Criando um novo Blend Tree

Ao fazer isso, um bloco laranja com o nome Blend Tree é inserido, a cor laranja indica o estado padrão, como este foi
o primeiro, ele se torna padrão automaticamente:

Figura 8.46 - Estado de animação padrão


O bloco verde chamado “Entry” é o ponto de entrada para iniciar um estado de animação, repare na seta saindo do
estado Entry para o estado Blend Tree, isso significa que o estado de animação padrão será executado primeiro ao
iniciar o jogo.

Organizando os Estados de Animação


Você pode movimentar os blocos (estados de animação) dentro da janela Animator para organizá-los como
preferir.

2. Com o novo Blend Tree selecionado (clique com o botão esquerdo do mouse sobre um estado), siga para a
janela Inspector e renomeie para “Sobre uma Plataforma”:

Figura 8.47 - Renomeando um estado de animação

3. Para editar um Blend Tree, clique duas vezes sobre o estado “Sobre uma Plataforma”, você pode conferir na
barra de controles da janela Animator o painel de navegação exibindo o estado interno:

Figura 8.48 - Editando um Blend Tree

Você pode clicar em Base Layer para voltar ao estado anterior.

4. Dentro do Blend Tree “Sobre uma Plataforma” você vai encontrar o bloco de estado com o nome Blend Tree,
selecione-o e siga para a janela Inspector, renomeie também para “Sobre uma Plataforma”:

Figura 8.49 - Renomeando um Blend Tree

As transições entre as animações são feitas utilizando parâmetros de animação, por exemplo, para transitar entre o
estado “parado” e “correndo” precisamos identificar se o personagem realmente está correndo ou parado com base nas
entradas e no comportamento do jogador via script. Dessa forma podemos utilizar a velocidade do personagem e o
estado dele nas plataformas para determinar qual animação deve ser executada.

Configurando o Blend Tree “Sobre Uma Plataforma”

1. Na janela Animator, você vai encontrar duas abas, sendo elas Layers e Parameters, clique na aba Parameters:

Figura 8.50 - Parâmetros de animação

Na lista de parâmetros você vai encontrar um chamado “Blend” que foi criado quando adicionamos um Blend Tree
anteriormente. Os nomes dos parâmetros são muito importantes, eles devem ser o mesmo nome definido no script.

2. Podemos usar o nome que já foi criado, clique duas vezes sobre o parâmetro Blend, em seguida renomeie para
VelocidadeX (respeite maiúsculo e minúsculo).

O parâmetro VelocidadeX foi definido no script Personagem, o valor nele contido é atualizado conforme a
velocidade horizontal do personagem, ou seja, conforme o jogador controla para esquerda ou direita. Você pode
conferir o parâmetro utilizado pelo Blend Tree atual seguindo na janela Inspector e veja a propriedade Parameter:

Figura 8.51 - O parâmetro atual do Blend Tree

Além disso, o tipo do Blend Tree utilizado é definido na propriedade Blend Type, a opção padrão 1D combina as
animações de acordo com um único parâmetro (no nosso caso seria o parâmetro VelocidadeX):
Figura 8.52 - Tipos de Blend Tree

Agora podemos adicionar os clipes de animação que serão transitados conforme o valor de VelocidadeX. Isso é feito
utilizando a lista Motion que atualmente está vazia (List is Empty).

3. Na lista Motion, clique no pequeno botão com sinal de mais + e selecione a opção Add Motion Field:

Figura 8.53 - Adicionando um novo campo de animação

4. Repita a etapa anterior, criando-se dois itens na lista.

5. No primeiro item da lista, clique no pequeno botão com círculo e selecione o clipe de animação
PersonagemParado:

Figura 8.54 - Definindo os clipes de animação


6. Para o próximo item na lista, selecione o clipe de animação PersonagemCorrendo.

Repare que assim que os clipes de animação são definidos, a janela Animator é atualizada com os novos estados. Você
pode simular a transição entre os estados utilizando o parâmetro VelocidadeX:

Figura 8.55 - O Blend Tree "Sobre uma Plataforma"

O valor que determina a transição entre as animações é definido na propriedade Threshold, por padrão os valores são
definidos automaticamente. Para definir os valores manualmente, desabilite a propriedade Automate Thresholds.

7. Desabilite a propriedade Automate Thresholds, em seguida na lista de clipes de animação (Motion), na coluna
Threshold, para o clipe de animação PersonagemParado defina o valor 0 e para o PersonagemCorrendo defina o
valor 0.1:

Figura 8.56 - Alterando o Threshold

Se o valor é igual a 0 então quer dizer o que o jogador não está movendo o personagem na horizontal (parado), porém,
se o valor for maior que 0.1 quer dizer que o jogador está movendo o personagem (correndo).

Animação do Estado “Parado” e “Correndo”

Com o Blend Tree “Sobre uma Plataforma” devidamente criado e configurado, agora podemos inserir os quadros de
animação nos respectivos clipes de animação.

Animação do Estado “Parado” e “Correndo”

1. Abra a janela Animation (menu Window > Animation > Animation), e com o Personagem selecionado,
selecione no painel de propriedades animadas o clipe de animação PersonagemParado:

Figura 8.57 - Clipe de animação PersonagemParado selecionado

Os sprites que iremos utilizar serão inseridos no clipe de animação atualmente selecionado nesta lista.

2. Entre no diretório “Assets > Personagem > Sprites > Parado” e selecione todos os sprites, em seguida clique e
arraste-os para dentro da linha do tempo da janela Animation:

Figura 8.58 - Inserindo os sprites da animação

Os sprites serão inseridos na sequência de dois quadros, como são apenas dois quadros de animação, a taxa de quadros
atual (60) vai deixar a animação muito rápida, você pode conferir isso executando o jogo.

3. No painel de propriedades animadas, altere a taxa de quadros no campo Samples, utilize o valor 5:
Figura 8.59 - Alterando a taxa de quadros da animação

Repita o processo para definir os quadros de animação para o clipe de animação PersonagemCorrendo:

4. No painel de propriedades animadas, selecione o clipe de animação PersonagemCorrendo.

5. Entre no diretório “Assets > Personagem > Sprites > Correndo” e selecione todos os sprites, em seguida clique
e arraste-os para dentro da linha do tempo da janela Animation.

6. Altere Samples para o valor 12.

Execute o projeto e veja se as animações estão funcionando como esperado (exceto o pulo que iremos definir a seguir).

Animação do Estado “Pulando”

Basicamente vamos fazer o mesmo como foi feito na seção anterior, além disso, vamos definir a transição partindo do
estado “Sobre uma Plataforma” para o estado de quando o personagem estiver no ar (pulando ou caindo).

Criando a Transição Para o Movimento No Ar

1. Na janela Animator, certifique-se que esteja na camada base de animações, é aonde o estado “Entry” se
encontra.

2. Clique com o botão direito do mouse em uma área vazia, aponte para Create State e selecione From New
Blend Tree. Em seguida renomeie o estado de “Blend Tree” para “No Ar”.

Repare que não existe nenhuma conexão (transição) com o estado “No Ar”, precisamos criar uma transição do estado
“Sobre uma Plataforma” com o estado “No Ar” e vice-versa, ou seja, a animação de “parado” e “correndo” pode
transitar para a animação “pulando”, o mesmo acontece ao contrário, assim que o personagem aterrissar sobre uma
plataforma, a transição deve voltar para o estado “Sobre uma Plataforma”.

3. Clique com o botão direito do mouse sobre o estado “Sobre uma Plataforma” e selecione Make Transition.
Uma seta será exibida seguindo o cursor do mouse, apenas clique com o botão esquerdo do mouse no estado “No
Ar” para definir a transição:
Figura 8.60 - Criando uma transição de estados de animação

Ao clicar sobre a seta de transição que conecta os estados, a janela Inspector vai exibir as configurações e condições
que determina como e quando a transição será realizada:

Figura 8.61 - Configurações e condições da transição selecionada

Podemos realizar a transição da animação a partir de um tempo específico ou com o valor de um parâmetro em uma
condição.

4. Como não iremos utilizar um tempo específico, desmarque a opção Has Exit Time (possui tempo de saída).
Além disso, expanda a propriedade Settings e desmarque a opção Fixed Duration (duração fixa), pois nossa
transição não possui um tempo de duração fixo:
Figura 8.62 - Configurando uma transição de estado de animação

Dessa forma garantimos que as transições entre os estados aconteçam imediatamente sem nenhum atraso. Ao
desabilitar a opção Has Exit Time, uma mensagem de aviso é exibida dizendo que uma transição válida precisa de pelo
menos uma condição ou um tempo específico, caso contrário a transição será ignorada.

As condições são definidas na lista Conditions:

Figura 8.63 - Lista de condições (vazia)

Para o nosso exemplo, a animação do pulo ou queda só será executada caso o personagem não esteja sobre uma
plataforma, em outras palavras, vamos utilizar um parâmetro de animação.

5. Na janela Animator e na lista de parâmetros (aba Parameters), no canto superior direito do painel, clique no
botão com sinal de + e selecione a opção Bool:

Figura 8.64 - Criando um novo parâmetro de animação do tipo Bool

Os tipos disponíveis são os valores comuns que podemos utilizar para realizar as transições, sendo que Bool significa
verdadeiro ou falso. O parâmetro VelocidadeX que foi criado antes é do tipo Float, pois armazena números com
valores decimais, enquanto que Int armazena apenas números inteiros, e Trigger funciona como um gatilho que é
acionado e desligado em seguida.

6. Renomeie o parâmetro para EstaNaPlataforma.


Certifique-se de renomear exatamente igual, caso contrário, o sistema de animação não vai conseguir realizar a
transição, lembre-se, este nome já foi definido no script, o único jeito de alterar o nome é editando o código.

7. De volta na lista de condições, clique no botão com sinal de + para adicionar uma condição. Em seguida no menu
de condições, selecione o parâmetro “EstaNaPlataforma” e defina o valor false (falso):

Figura 8.65 - Definindo uma condição de transição

Dessa forma o estado “Sobre uma Plataforma” só será transitado para o estado “No Ar” se o parâmetro
EstaNaPlataforma retorne falso, ou seja, apenas quando o personagem pular ou cair.

8. Agora precisamos definir a transição de volta, clique com o botão direito do mouse sobre o estado “No Ar” e
selecione Make Transition, em seguida clique no estado “Sobre uma Plataforma”.

9. Com a transição de volta para o estado “Sobre uma Plataforma” selecionado, desmarque Has Exit Time e
Fixed Duration. Adicione uma condição e selecione o parâmetro EstaNaPlataforma, só que dessa vez defina o
valor true (verdadeiro):

Figura 8.66 - Definindo uma transição de volta para o estado "Sobre uma Plataforma"

Dessa forma se o personagem não estiver no ar (parâmetro EstaNaPlataforma possui o valor true), a transição é
realizada de volta para o estado “Sobre uma Plataforma”.
Para finalizar, só nos resta definir os quadros de animação de pulando e caindo, isso é feito dentro do estado “No Ar”.

Definindo os Quadros de Animação do Pulo

1. Clique duas vezes sobre o estado “No Ar” para editá-lo, em seguida renomeie também para “No Ar”.

2. Crie um parâmetro de animação do tipo Float chamado VelocidadeY, dessa vez estamos lidando com a
velocidade vertical do personagem.

3. Na lista de parâmetros do Blend Tree, selecione VelocidadeY:

Figura 8.67 - Selecionando o parâmetro de animação VelocidadeY

4. Na lista Motion, adicione dois Motion Field e defina os clipes de animação PersonagemQueda e
PersonagemPulo, exatamente nesta ordem.

Você não precisa alterar o valor de Threshold, visto que existe apenas dois clipes de animação e o valor padrão está
correto (0 acontece no ápice do pulo e caindo, enquanto 1 é durante e até o ápice do pulo):

Figura 8.68 - Definindo o Blend Tree "No Ar"

5. Siga para a janela Animation e selecione o clipe de animação PersonagemPulo. Em seguida insira o sprite
“Assets > Personagem > Sprites > No Ar > PuloCima”. Como é apenas um quadro, você pode alterar Samples
para o valor 1:
Figura 8.69 - Definindo o quadro de animação do personagem pulando

6. Na janela Animation, selecione o clipe de animação PersonagemQueda e insira o sprite “Assets > Personagem
> Sprites > No Ar > PuloQueda”, em seguida altere a propriedade Samples para o valor 1.

Experimente executar o projeto e faça os testes.


Câmera Segue com Cine Machine

Agora que você pode controlar o personagem no começo do nível, seria interessante ver o que está acontecendo no
restante do cenário. Se você executar o jogo você vai ver apenas a tela inicial, pois a câmera está fixa olhando na
mesma posição, se você tentar controlar o personagem para frente, ele vai sumir da visão da câmera, o ideal é fazer
com que a câmera siga o movimento do personagem.

Instalando o Cine Machine

O Cine Machine é um pacote desenvolvido pelo Unity que possui muitas ferramentas para manipular câmeras no jogo,
como é um pacote que não vem pré-instalado, vamos instalá-lo utilizando o Gerenciador de Pacotes do Unity.

Cine Machine
O Cine Machine é um pacote grande e relativamente complexo, vou mostrar e configurar apenas o necessário
para o nosso jogo, mas fique à vontade para experimentar outras opções também.

Siga as etapas a seguir para instalar o Cine Machine:

Instalando o Cine Machine

1. Siga para o menu Window e selecione Package Manager.

Uma janela será aberta exibindo uma lista de todos os pacotes instalados e disponíveis para instalar, a primeira
inicialização pode levar alguns segundos para completar a lista (requer conexão com a internet):

Figura 8.70 - Gerenciador de Pacotes (Package Manager) do Unity


2. Verifique se todos os pacotes estão sendo listado clicando no menu suspenso no canto superior esquerdo da janela
e selecione a opção All Packages (todos os pacotes):

Figura 8.71 - Exibindo todos os pacotes

3. Dentre as opções disponíveis, selecione o pacote Cinemachine e clique no botão Install que se encontra no canto
inferior direito da janela:

Figura 8.72 - Instalando o pacote Cinemachine

4. Aguarde o progresso de instalação, assim que finalizado você já pode fechar a janela do Gerenciador de Pacotes.

Se o menu Cinemachine foi adicionado na barra de menu do Unity, quer dizer que o Cine Machine foi instalado com
sucesso.

Configurando uma Câmera Virtual

Com o Cine Machine podemos adicionar múltiplas câmeras virtuais, cada uma representando uma parte específica.
Para o nosso jogo, apenas uma câmera virtual é suficiente, esta câmera principal deve seguir os movimentos do
personagem conforme as entradas do jogador.

Criando Uma Câmera Virtual

1. Para adicionar uma câmera virtual, siga para o menu Cinemachine e selecione a opção Create Camera 2D.

Veja que no menu Cinemachine podemos criar vários tipos de câmera, como estamos desenvolvendo um jogo 2D,
precisamos selecionar a opção Create 2D Camera (criar uma câmera 2D):

Figura 8.73 - Criando uma câmera 2D

Uma câmera virtual chamada “CM vcam1” é adicionada na janela Hierarchy, veja também que a câmera principal
(GameObject Main Camera) possui um ícone do Cine Machine, indicando que a câmera está sendo manipulada pelo
Cine Machine:

Figura 8.74 – Câmera virtual do Cinemachine adicionado na cena

2. Renomeie de “CM vcam1” para “Câmera do Personagem”.


Se você abrir a janela Game você vai notar que a câmera está desalinhada e afastada do cenário, é necessário realizar
algumas configurações para ajustar a câmera como desejado, vamos começar definindo o GameObject que a câmera
deve seguir.

Movendo a Câmera Com o Personagem

1. Com o GameObject Câmera do Personagem selecionado, siga para a janela Inspector e você vai encontrar o
componente Cinemachine Virtual Camera.

A propriedade Follow (seguir) permite definir um GameObject que a câmera deve seguir.

2. Defina na propriedade Follow o GameObject Personagem:

Figura 8.75 - Definindo o GameObject que a câmera deve seguir

A câmera será posicionada no centro do Personagem, porém, ainda precisamos ajustar a distância da câmera para
exibir apenas o cenário.

3. Expanda a propriedade Lens (lentes da câmera) e veja que a propriedade Ortographic Size (tamanho da câmera
ortográfica) possui o valor 10 padrão, diminua este valor até que a câmera foque apenas no cenário do jogo, no meu
caso usei o valor 4.4:

Figura 8.76 - Ajustando o tamanho da câmera ortográfica

A janela Game deve exibir algo parecido como na figura a seguir:


Figura 8.77 - Resultado da câmera após ajustar o tamanho das lentes

Repare na figura anterior que a parte vazia do cenário no lado esquerdo (área azul) está sendo exibido pela câmera
também, precisamos limitar a posição da câmera apenas para exibir o cenário, para fazer isso podemos utilizar uma
extensão chamada Confiner (confinador).

Confinando a Câmera Dentro do Cenário

1. No final do componente Cinemachine Virtual Camera você vai encontrar a seção Extensions, na propriedade
Add Extension, clique no menu e selecione a opção CinemachineConfiner:

Figura 8.78 - Adicionando a extensão CinemachineConfiner


Um componente chamado Cinemachine Confiner será adicionado, a maneira como limitamos a câmera é a partir de
um colisor contendo a área onde a câmera será limitada, isso é feito definindo a referência deste colisor no parâmetro
Bounding Shape 2D, porém, ainda não criamos o confinador da câmera contendo este colisor.

2. Para criar o confinador da câmera vamos utilizar um colisor no formato de polígono, comece criando um
GameObject vazio (“Ctrl + Shift + N”), renomeie para “Confinador da Câmera” e redefina suas coordenadas.

3. Com o Confinador da Câmera selecionado, siga para a janela Inspector, clique em Add Component, acesse
Physics2D e selecione o componente Polygon Collider 2D.

4. Antes de qualquer coisa, é importante que no componente Polygon Collider 2D você ative a opção Is Trigger:

Figura 8.79 - Ativando a opção Is Trigger

Dessa forma o colisor é ignorado pela física do Unity e é apenas utilizado para detectar as colisões, caso contrário, o
colisor do personagem e outros colisores na cena vão entrar em conflito com o colisor do confinador.

Um colisor com formato de pentágono será adicionado na cena:

Figura 8.80 - Formato padrão do Polygon Collider 2D

Um pentágono é formado por 5 pontos, porém, como vamos criar um formato retangular, precisamos de apenas 4
pontos.

5. No componente Polygon Collider 2D, ative o botão Edit Collider, em seguida na visão da cena, mantenha a
tecla “Ctrl” pressionada e mova o cursor para um dos pontos da forma. As linhas afetadas pela remoção do ponto
ficam em vermelho, apenas clique uma vez para remover:

Figura 8.81 - Removendo um ponto da forma do colisor

6. Agora mova os demais pontos (clique e arraste) para uma posição que deseja confinar a câmera.

Crie uma forma retangular ao redor do cenário, não precisa ser um retângulo perfeito, apenas um formato parecido
(linha roxa ilustrada na figura seguir), depois podemos refinar os pontos:

Figura 8.82 - Definindo o confinador da câmera

7. Para refinar os pontos da forma do colisor, siga para o componente Polygon Collider 2D e desative o botão Edit
Collider, em seguida expanda a propriedade Points > Paths > Element 0, dentro você vai encontrar 4 elementos que
são os 4 pontos da forma. Ajuste as coordenadas x e y de cada ponto com mais precisão (use valores exatos), na
figura a seguir você pode conferir um exemplo:

Figura 8.83 - Pontos do colisor do confinador

8. De volta no componente Cinemachine Confiner, defina na referência da propriedade Bounding Shape 2D como
sendo o GameObject Confinador da Câmera:

Figura 8.84 - Definindo a referência do colisor para confinar a câmera

A câmera será deslocada para dentro do formato do colisor.

Como de costume, experimente executar o jogo e faça os testes.

Ajustar o Confinador da Câmera


Se você estender o cenário, lembre-se de ajustar o confinador da câmera também, senão a câmera vai parar de
seguir o personagem no último ponto em que o confinador foi alterado.

Configurando a Zona Morta

A zona morta (ou deadzone em inglês) é uma área onde a câmera não se move até que personagem saia da zona morta.
Isso é muito útil para evitar que a câmera se mova muito rápido com entradas leves do jogador.

Configurando a Zona Morta da Câmera

1. Com o GameObject Câmera do Personagem selecionado, siga para a janela Game e veja que existem diversos
Gizmos que representa diferentes configurações da câmera:

Figura 8.85 - Gizmos do Cine Machine

Você pode utilizar os Gizmos para configurar diversos aspectos da câmera, porém, para um ajuste mais preciso, vamos
utilizar a janela Inspector.

2. Siga para a janela Inspector, no componente Cinemachine Virtual Camera, expanda a propriedade Body.

Dentre as opções, precisamos ajustar Dead Zone Height (altura da zona morta) e Dead Zone Width (largura da zona
morta).

3. Altere a propriedade Dead Zone Width para o valor 0.265 e Dead Zone Height para o valor 0.07:
Figura 8.86 - Ajustando a zona morta da câmera

Esses valores devem ser ajustados conforme o tamanho do personagem, experimente executar o projeto e faça os testes
para descobrir a diferença, na figura a seguir você pode conferir a zona morta após os ajustes, a câmera não vai se
mover enquanto o personagem estiver nesta área:

Figura 8.87 – A zona morta da câmera


Moedas para Coletar

O objetivo principal do jogo é de coletar todas as moedas para destrancar a porta da fase que permite carregar o
próximo nível. A ideia é parecida como fizemos para o jogo 3D, no entanto, não vamos criar uma contagem regressiva,
mas o jogador pode morrer (perder) ao cair nas armadilhas (buracos e espinhos no cenário).

O Sprite Sheet da Moeda

Vamos começar separando o Sprite Sheet da moeda e em seguida iremos utilizar o mesmo Sprite Sheet para criar a
animação da moeda girando.

Figura 8.88 - O Sprite Sheet da moeda

Separando o Sprite Sheet da Moeda

1. Selecione o sprite “Assets > Objetos > Moeda > Sprites > Animação da Moeda”, em seguida na janela
Inspector, altere Sprite Mode para Multiple e clique em Apply para confirmar.

2. Clique no botão Sprite Editor.

3. Na barra de controles da janela, clique no botão Slice, utilize o tipo Automatic e clique no botão Slice.

Figura 8.89 - Corte automático do Sprite Sheet da moeda

4. Feito isso, clique no botão Apply (no final da barra de controles da janela) para confirmar a edição.

Animação da Moeda

Agora podemos adicionar na cena o primeiro sprite do Sprite Sheet, porém, vamos aproveitar e criar o GameObject da
moeda e os assets da animação tudo de uma vez da seguinte maneira:
Criando o GameObject e a Animação da Moeda

1. Primeiro, acesse o diretório “Assets > Objetos > Moeda” e crie uma pasta chamada “Animações”.

2. No diretório “Assets > Objetos > Moeda > Sprites”, selecione todos os sprites do Sprite Sheet (use a seta para
expandir a visualização), em seguida clique e arraste-os para dentro da janela Scene.

A janela de criar animação será exibida.

3. Aponte para o diretório “Assets > Objetos > Moeda > Animações” e salve com o nome “Moeda”.

Um asset de Clipe de Animação e Controle de Animação será criado na janela Project.

4. Renomeie o GameObject para “Moeda”.

5. Selecione o clipe de animação “Moeda” na janela Project, siga para a janela Inspector e marque Loop Time.

6. Renomeie o asset do Controlador de Animação para “MoedaAnimator”.

O GameObject que foi adicionado na cena já possui um componente Animator com o controlador definido. Pelo fato
do Controlador de Animação ter sido definido automaticamente, se você seguir na janela Animator, você vai notar que
o clipe de animação que foi criado antes foi adicionado também.

7. Com o GameObject Moeda selecionado na cena, abra a janela Animation e altere Samples para o valor 25.

8. Aproveite e crie um Prefab da Moeda, clique e arraste o GameObject Moeda da janela Hierarchy para dentro da
janela Project, no diretório “Assets > Objetos > Moeda”.

Com isso feito, se você executar o jogo, a animação da moeda será executada em um laço infinito (Loop Time) como
esperado.

Criando Diversas Cópias da Moeda

1. Na janela Hierarchy, clique com o botão direito do mouse no GameObject Cenário e selecione Create Empty,
em seguida redefina suas coordenadas e renomeie para “Moedas”.

2. Adicione a Moeda atual para dentro do parentesco do GameObject Moedas que foi criado na etapa anterior.

3. Duplique o Prefab da Moeda (“Ctrl + D”) e posicione em diferentes locais no cenário.

Dica de Posicionamento
Utilize a ferramenta Snap para posicionar os GameObjects com mais precisão. Ative a ferramenta de mover
(W) e mantenha a tecla “Ctrl” pressionada enquanto realiza a transformação. Você pode controlar a precisão da
transformação utilizando a janela que se encontra no menu Edit > Snap Settings:
Figura 8.90 - Configurando a ferramenta Snap

Para mais informações, acesse a seção “Transformação em Incremento”.

Como nosso cenário é pequeno, decidi adicionar 6 moedas posicionadas como na figura a seguir:

Figura 8.91 - Posicionando as diversas moedas no cenário

Alterações no Prefab da Moeda


Lembre-se que as próximas alterações na Moeda devem ser feitas no Modo Prefab, senão as modificações não
serão replicadas nas cópias.

Os Componentes da Moeda

Até o momento a moeda está se comportando como se fosse um item de decoração, ou seja, o personagem não
consegue interagir, se você controlar o personagem para coletar a moeda, nada vai acontecer. Vamos resolver isso
adicionando e configurando os componentes necessários.

Adicionando o Colisor

Para que o Personagem interaja com a Moeda, precisamos adicionar um colisor, neste caso podemos adicionar um
colisor com formato circular (ou outro colisor que assemelha melhor com o desenho do sprite).

Adicionando o Colisor Com Formato de Círculo


1. No Modo Prefab da Moeda e com a mesma selecionada, siga para a janela Inspector, clique em Add
Component, acesse Physics2D e selecione o componente Circle Collider 2D.

O colisor vai se encaixar perfeitamente ao redor do sprite, porém, não vamos utilizá-lo para colidir, apenas para
detectar a colisão:

2. No componente Circle Collider 2D, marque Is Trigger.

Adicionando o Script da Moeda

O comportamento da Moeda se encontra no script “Assets > Objetos > Moeda > __Scripts > Moeda.cs”, sua
funcionalidade é de registrar cada moeda da cena e executar as instruções quando a mesma for coletada.

Adicionando o Script Moeda

Ainda no Modo Prefab da Moeda:

1. Na janela Project, siga para o diretório “Assets > Objetos > Moeda > __Scripts”, em seguida clique e arraste o
script Moeda para dentro do GameObject Moeda na janela Hierarchy.

Outra maneira de adicionar um script é com o GameObject selecionado, clique e arraste o script da janela Project para
dentro da janela Inspector.

O componente Moeda (Script) possui duas propriedades, sendo elas Partículas Moeda e Som Moeda, são referências
que ainda não podemos definir, pois ainda não criamos o que está sendo pedido, o primeiro é o GameObject com o
efeito de partículas, e o segundo permite reproduzir um som ao coletar a moeda.

Efeito de Partículas ao Coletar

Partículas é um assunto que ainda não vimos, apesar de relativamente complexo, podemos criar efeitos rapidamente
utilizando o Sistema de Partículas do Unity. Esses efeitos podem ser líquidos, fumaça, nuvens, fogo e feitiços de
magia, para a nossa moeda, vamos criar um efeito de moeda “quebrando” e jogando diversos “pedaços” no cenário,
este efeito será executado apenas quando o personagem coletar uma moeda. Em geral, partículas basicamente são
pequenas imagens ou malhas que são exibidas e movidas em uma grande quantidade, cada partícula representa uma
pequena porção do efeito, o efeito completo é criado quando todas as partículas são exibidas em conjunto.

Nesta seção vou mostrar apenas os parâmetros necessários para criar o efeito que precisamos, assim que aprender o
básico, você pode testar as diferentes propriedades e descobrir o resultado.

Criando o Efeito das Partículas da Moeda

Para começar, precisamos criar um GameObject especial que contém o componente Particle System, vamos adicioná-
lo como filho da Moeda.

1. Clique com o botão direito do mouse no GameObject Moeda na janela Hierarchy, aponte para Effects e
selecione Particle System.

Você vai notar imediatamente o efeito padrão na cena:


Figura 8.92 - Efeito padrão do sistema de partículas

2. Renomeie de Particle System para “Partículas da Moeda”.

3. Tenha certeza que o GameObject Partículas da Moeda está no ponto de sua origem, senão as partículas serão
emitidas fora do centro da Moeda (clique com o botão direito do mouse no título do componente Transform e
selecione Reset).

Enquanto o GameObject Partículas da Moeda estiver selecionado, seu efeito será reproduzido na cena, dessa forma
podemos visualizar uma prévia de como está ficando. Uma pequena janela é exibida no canto inferior direito da janela
Scene utilizada para controlar as partículas durante os testes:

Figura 8.93 - Controlando o efeito das partículas na cena

Com o GameObject Partículas da Moeda selecionado, você pode conferir na janela Inspector que existem muitas
propriedades em diferentes categorias, precisamos alterar os valores padrão para alcançar o efeito desejado. As
categorias representam grupos de propriedades para criar diferentes efeitos, elas podem ser ativadas ou desativadas
clicando no pequeno botão circular como indicado na figura a seguir:
Figura 8.94 - Categoria de efeitos ativados e desativados

4. Na categoria principal, em Duration altere para o valor 2.00 (a duração do efeito), Start Lifetime para o valor 2
(o tempo de vida de cada partícula em segundos, a mesma será removida ao chegar no 0), Start Speed para o valor 3
(a velocidade inicial das partículas), Start Size para o valor 0.2 (o tamanho inicial das partículas), Start Color
defina uma cor amarela (a cor inicial das partículas, o amarelo é representado pelo valor RGB (255, 255, 0),
Gravity Modifier use o valor 1 (aplica gravidade nas partículas) e Simulation Space selecione a opção World (as
partículas serão geradas no espaço global da cena e não dentro do espaço local da Moeda):

Figura 8.95 - Propriedades principais das partículas

Na categoria Emission (emissão) controlamos como as partículas são emitidas, a partir de uma taxa ao longo do tempo
ou via “rajadas” de partículas.

5. Altere Rate over Time para o valor 0 (define o número de partículas emitidos por segundo, vamos gerar apenas
uma “rajada” de partículas, por isso o valor 0). Para gerar rajadas, utilizamos a lista Bursts que atualmente está vazia,
clique no pequeno botão com sinal de +, em seguida altere Count para o valor 5 (cinco partículas por rajada):
Figura 8.96 - Definindo rajadas de partículas

Na categoria Shape (formato) é definido o volume do emissor, o formato escolhido controla onde as partículas serão
emitidas e sua direção inicial.

6. Na propriedade Shape, selecione a opção Circle (o formato do volume onde as partículas serão emitidas, no
nosso caso escolhemos um formato circular), altere Radius para o valor 0.23 (o raio da forma).

Figura 8.97 - Alterando o formato do emissor de partículas

Na categoria Color over Lifetime (cor durante o tempo de vida) podemos controlar a cor das partículas durante seu
tempo de vida. Vamos fazer com que as partículas fiquem cada vez mais transparente até o seu final.

7. Por padrão, uma cor gradiente é utilizada, no parâmetro Color, clique na caixa de cor para abrir a janela
Gradient Editor, selecione o ponto no canto superior direito e defina Alpha para o valor 0.

Repare que os pontos no topo definem a transparência e os pontos de baixo definem a cor do gradiente:

Figura 8.98 - Configurando a cor gradiente


Na categoria Collision (colisão) podemos permitir que as partículas colidem com o cenário.

8. Altere a propriedade Type para a opção World (dessa forma as partículas podem colidir com os GameObjects na
cena), Mode selecione a opção 2D (pois estamos lidando com objetos bidimensionais), Dampen use o valor 0.2
(ajusta a fricção das partículas na colisão, quanto maior o valor, mais lento ficam ao colidir) e Bounce use o valor
0.3 (permite que as partículas saltem na colisão). Em Collision With selecione apenas a opção Plataformas
(permite selecionar quais camadas de colisão as partículas irão interagir):

Figura 8.99 - Ajustando a colisão das partículas

Na categoria Renderer definimos como as partículas são renderizadas (exibidas), vamos alterar apenas o material
padrão.

9. Seguindo na janela Project, no diretório “Assets > Objetos > Moeda”, crie uma pasta chamada “Materiais”, em
seguida entre nesta pasta.

10. Crie um material chamado “MoedaParticulasMat”, em seguida na janela Inspector, selecione o shader
“Mobile > Particles > Additive”:

Figura 8.100 - Selecionando o shader Mobile > Particles > Additive

Este é um shader próprio para usar com o sistema de partículas e é otimizado para celulares (melhor desempenho).

11. Com o shader “MoedaParticulasMat” selecionado, altere Particle Texture (a textura de cada partícula) para o
sprite “Assets > Objetos > Moeda > Sprites > Moeda” (clique e arraste o asset até a caixa da textura ou clique em
Select).

Figura 8.101 - Definindo uma textura para um shader

12. De volta na categoria Renderer das partículas, altere a propriedade Material para o material
“MoedaParticulasMat” que foi criado antes:

Figura 8.102 - Alterando o material das partículas

Por padrão, as partículas são geradas em um laço infinito, no nosso caso vamos realizar apenas um ciclo de partículas.

13. De volta nas propriedades principais, desmarque a opção Looping (permite gerar um novo ciclo de partículas
após o término do tempo de duração, deixamos ativado no começo apenas para acompanhar a execução das partículas
continuamente na cena):

Figura 8.103 - Desativando o ciclo continuo de emissões

Como desativamos o laço de execução das partículas na etapa anterior, a emissão será realizada apenas uma vez na
inicialização, ou seja, no primeiro quadro do jogo. No entanto, as partículas só serão emitidas quando o jogador coletar
a moeda, então precisamos desativar o próprio GameObject Partículas da Moeda, dessa forma quando a moeda for
coletada, o GameObject é ativado e consequentemente a emissão das partículas serão geradas.

14. Com o GameObject Partículas da Moeda selecionado, siga para a janela Inspector e desmarque a caixa como
indicado na figura seguir:
Figura 8.104 - Desativando o GameObject das partículas da moeda

15. Selecione o GameObject Moeda (o pai na hierarquia) e no componente Moeda (Script), na propriedade
Partículas Moeda, defina o GameObject Partículas da Moeda:

Figura 8.105 - Definindo a referência das partículas da moeda

Som da Moeda ao Coletar

Efeitos sonoros em jogos é muito importante, os sons indicam diferentes comportamentos do que está acontecendo ao
redor, incluindo quando uma moeda é coletada, o típico som de “plim” é ideal para o nosso jogo. Se você analisar o
componente Moeda (Script), repare que o parâmetro Som Moeda requer uma referência do tipo
ReproduzirEfeitoSonoro, vamos fazer o mesmo que fizemos para definir os efeitos sonoros do Personagem.

Definindo o Som da Moeda ao Coletar

1. No Modo Prefab da Moeda, adicione um GameObject vazio (“Ctrl + Shift + N” e renomeie para “Moeda
AudioSource”, se necessário redefina suas coordenadas para sua origem.

2. Na janela Project, entre no diretório “Assets > __Scripts > Áudio” e adicione o script
ReproduzirEfeitoSonoro para o GameObject Moeda AudioSource.

Repare que ao fazer isso, o componente Audio Source é adicionado automaticamente.

3. No componente Audio Source, defina na propriedade AudioClip o clipe de áudio “Assets > Objetos > Moeda >
Áudio > MoedaColetada” (arquivo do tipo .wav).

4. Desmarque a propriedade Play On Awake (pois não queremos que o som seja reproduzido ao iniciar).

5. No componente Reproduzir Efeito Sonoro, marque Pitch Aleatório, em seguida ajuste Pitch Min para o valor
0.8 e Pitch Max para o valor 1.2:
Figura 8.106 - Ativando o Pitch aleatório para o som da moeda coletada

6. Selecione o GameObject Moeda e de volta no componente Moeda (Script), defina a referência no parâmetro
Som Moeda como sendo o GameObject Moeda AudioSource:

Figura 8.107 - Definindo a referência do som da moeda

Alterando as Camadas de Colisão

Vamos criar uma camada de colisão próprio para os objetos que podem ser coletados pelo jogador, incluindo a moeda.

Camada de Colisão Para Objetos Coletáveis

1. Acesse o menu Edit > Project Settings, na categoria Tags And Layers, expanda Layers, e na próxima camada
disponível, nomeie para “Coletaveis” (evite utilizar acentos):

Figura 8.108 - Criando uma camada de colisão para objetos coletáveis

2. Ainda no Modo Prefab da Moeda, selecione o GameObject Moeda, siga para a janela Inspector e no menu
Layer, selecione a opção Coletaveis:

Figura 8.109 - Definindo a camada de colisão para a moeda

3. Uma janela será exibida perguntando se você deseja aplicar a alteração nos filhos do parentesco, selecione No,
this object only (Não, apenas neste objeto).

Experimente executar o jogo para testar como as moedas são coletadas, no entanto, você vai notar que diversas
mensagens de erro aparecem no Console, isso acontece porque o script Moeda está tentando se comunicar com outras
referências que ainda não definimos, vamos resolver isso em breve.

Exibindo o Total de Moedas

Quando o jogo é iniciado, cada Moeda no cenário é registrado no Gerenciador do Jogo (ainda não adicionamos), e o
total de moedas é atualizado na interface utilizando o Gerenciador da Interface (também não adicionamos), a lógica
para que isso aconteça já existe, só precisamos ligar os pontos. Nesta seção vamos adicionar uma interface do usuário
para exibir o total de moedas no cenário, estou assumindo que você já viu a seção “Contando as Moedas” quando
criamos o primeiro jogo 3D, dessa forma posso ignorar alguns detalhes durante a explicação a seguir.

Criando a Canvas do Jogo e o Painel De Moedas

1. Comece adicionando uma Canvas seguindo para a janela Hierarchy, clique no botão Create, aponte para UI e
selecione Canvas. Em seguida renomeie para “Canvas do Jogo”.

A escala dos elementos na interface por padrão é redimensionada conforme a resolução atual do dispositivo, podemos
manter uma resolução constante ou definir uma resolução de referência. Vamos definir uma resolução de referência,
dessa forma os controles permanecem consistentes em resoluções maiores, isso é feito no componente Canvas Scaler
(Script) adicionado por padrão no Canvas do Jogo.

2. No componente Canvas Scaler, na propriedade UI Scale Mode (modo da escala da interface), selecione a opção
Scale With Screen Size (escalonar com um tamanho de tela):
Figura 8.110 - Escalonar com um tamanho de tela

3. A propriedade Reference Resolution (resolução de referência) é exibida, altere para a resolução (800, 600).

4. Em seguida, na propriedade Screen Match Mode (modo de combinação de tela) deixe a opção Match Width Or
Height (combinar largura ou altura) selecionada.

5. Para utilizar tanto a largura e a altura da tela como referência, altere o slider Match para o valor 0.5, ou seja,
uma média entre os dois.

Agora vamos criar o painel de moedas onde deve conter um ícone da moeda e um texto exibindo o total de moedas no
cenário.

6. Clique com o botão direito do mouse no GameObject Canvas do Jogo e selecione a opção Create Empty. Em
seguida renomeie para “Painel de Moedas”.

7. Com o Painel de Moedas selecionado, siga para a janela Inspector e no componente Rect Transform selecione
a âncora pré-definida “no topo e à esquerda” (faça isso com as teclas “Shift + Alt” pressionada para definir o pivot
e a posição respectivamente):

Figura 8.111 - Painel de Moedas no canto superior esquerdo da tela

Isso significa que o total de moedas será exibido no canto superior esquerda da tela.

8. Ainda no componente Rect Transform, altere a largura (Width) para o valor 200 e a altura (Height) para o
valor 40.
Para o ícone da moeda, vamos utilizar uma imagem comum.

Adicionando o Ícone da Moeda

1. Clique com o botão direito do mouse sobre o GameObject Painel de Moedas, aponte para UI e selecione
Image. Em seguida renomeie para “Ícone da Moeda”.

2. Novamente nas âncoras pré-definidas, mantenha as teclas “Shift + Alt” pressionadas e selecione a opção “no
meio e à esquerda”:

Figura 8.112 - Posicionando o ícone da moeda no centro e à esquerda

3. Para criar uma margem entre as bordas da tela, no componente Rect Transform, altere Pos X para o valor 10.

4. Altere Width e Height para o valor 25.

5. No componente Image, altere Source Image para o sprite “Assets > Objetos > Moeda > Sprites >
ÍconeDaMoeda”.

Podemos adicionar um efeito de sombra atrás da imagem que pode destacar e melhorar sua visualização.

6. Na janela Inspector, clique em Add Component, acesse UI > Effects e selecione o componente Shadow.

O efeito já pode ser visualizado na cena, porém, no componente Shadow podemos realizar alguns ajustes.

7. O parâmetro Effect Color define a cor do efeito, geralmente sombras é escuro e pouco transparente (valor
padrão), se preferir diminua um pouco a opacidade. No parâmetro Effect Distance podemos ajustar a posição ou a
distância da sombra, utilize as coordenadas (2, -2).

Para o texto das moedas vamos utilizar o TextMesh Pro.

Inserindo o Texto da Contagem de Moedas


1. Os recursos essenciais do TextMesh Pro precisam ser importados primeiro, então siga para o menu Window,
aponte para TextMeshPro e selecione Import TMP Essential Resources. Na janela Import Unity Package que foi
exibida, deixe tudo marcado e clique em Import.

2. Na janela Hierarchy, clique com o botão direito do mouse sobre o Painel de Moedas, aponte UI e selecione
TextMeshPro – Text. Em seguida renomeie para “Texto das Moedas”.

3. Utilize a âncora pré-definida “no meio e à esquerda”, ajuste Pos X para o valor 44, Width para 156 e Height
para o valor 40.

4. No componente Text Mesh Pro UGUI (Script), altere Text para o texto 0, Font Style ative o botão B (negrito),
Font Size para o valor 28 e alinhamento (Alignment) no meio e à esquerda.

Também podemos adicionar um efeito de sombra atrás do texto, só que em vez de adicionar o componente Shadow,
vamos alterar uma propriedade diretamente no shader do texto.

5. Nas opções do shader do texto, marque o efeito Underlay e ajuste os parâmetros como preferir:

Figura 8.113 - Adicionando um efeito de sombra no texto

O resultado pode ser conferido na figura a seguir:

Figura 8.114 - Painel de Moedas


Adicionando os Gerenciadores

Com a interface criada, agora precisamos adicionar os componentes que definem o comportamento do jogo e da
interface. O fluxo das moedas basicamente funciona da seguinte maneira, quando o jogo é iniciado, cada uma das
moedas na cena se comunica com o Gerenciador do Jogo onde as mesmas são armazenadas, em seguida o próprio
Gerenciador do Jogo se comunica com o Gerenciador da Interface para atualizar o total de moedas na tela, dessa forma
o jogador sabe quantas moedas precisa ser coletado. Agora quando o jogador coleta uma moeda, o processo é realizado
de maneira semelhante, só que dessa vez o Gerenciador do Jogo verifica se todas as moedas foram coletadas para
determinar se a porta da fase pode ser destrancada (lembre-se, o objetivo do jogo é coletar todas as moedas para
prosseguir para a próxima fase), além disso, a interface é atualizada diminuindo o total de moedas.

O Gerenciador do Jogo basicamente possui as seguintes tarefas:

Define o estado do jogo (inclui está jogando, fim e a vitória).


Armazena as moedas da fase.
Define o local (a porta) para a próxima fase.
Controla as moedas coletadas para destrancar a próxima fase.
Reinicia a fase atual em caso de morte (o jogador perdeu).

Adicionando o Gerenciador do Jogo

1. Crie um GameObject vazio e renomeie para “Gerenciador do Jogo”, redefina suas coordenadas se necessário.

2. Na janela Inspector, clique em Add Component e pesquise pelo componente “GameManager” (ou
Gerenciador de Jogo em português), adicione o componente encontrado.

Com o componente adicionado, você vai notar duas propriedades, o Estado Atual (define o estado do jogo que
determina se o jogador está vivo ou é o fim do jogo, o valor padrão “Em Jogo” significa que não é o fim do jogo), e a
propriedade Tempo Para Reiniciar (o tempo em segundos antes de reiniciar a fase em caso de morte, por padrão 1
segundo).

Como mencionado antes, o Gerenciador do Jogo se comunica com o Gerenciador da Interface, vamos adicioná-lo em
seguida. O Gerenciador da Interface basicamente possui uma única tarefa:

Atualizar o total de moedas conforme é adicionado (antes de iniciar a fase) ou removido (coletado pelo jogador).

Adicionando o Gerenciador da Interface

1. Crie um GameObject vazio e renomeie para “Gerenciador da Interface”, redefina suas coordenadas se
necessário.

2. Na janela Inspector, clique em Add Component e pesquise pelo script “GerenciarUI”, adicione o componente
encontrado.

3. O parâmetro Texto Moedas é revelado, defina esta referência como sendo o GameObject Texto das Moedas:
Figura 8.115 - Definindo a referência dos textos das moedas

E basicamente é isso, agora você pode executar o projeto novamente para testar e dessa vez nenhuma mensagem de
erro será exibida no início, verifique também se a interface é atualizada como esperado. No entanto, se você coletar
todas as moedas, o Gerenciador do Jogo vai determinar que a porta da fase deve ser destrancada, mas como ainda não
adicionamos este GameObject, um erro será gerado. Continue lendo, aos poucos vamos completando o quebra cabeça.
Completando a Fase Atual

Para completar a fase atual, o jogador precisa coletar todas as moedas no cenário, a porta da fase será destrancada,
permitindo que o jogador prossiga para a próxima fase. Se o jogador encontrar a porta, mas ainda existem moedas para
coletar, a porta permanece trancada impedindo que o jogador prossiga. Por questões de simplicidade, decidi criar o
Prefab inicial da Porta, vamos realizar as alterações novas, enquanto o resto você já deve saber como funciona, dessa
forma evito criar redundância e ficar repetindo as mesmas etapas.

Adicionando a Porta da Fase

1. Na janela Project, acesse o diretório “Assets > Objetos > Porta” e você vai encontrar o Prefab chamado Porta,
adicione-o na cena, no final da fase e posicione por cima dos Tiles:

Figura 8.116 - Porta da fase adicionada na cena

O Prefab da Porta possui alguns objetos filhos que são os sprites da própria porta (Topo, Estrutura, Porta de
Abertura, Trancado e Fundo) e algumas fontes de áudio (Destrancando, Abrindo e Fechando):
Figura 8.117 - Hierarquia da Porta

Alguns detalhes do GameObject Porta:

Os sprites devem estar na camada de ordenação (Sorting Layer) chamada “Objetos” e nas respectivas ordens
(Order in Layer).
O GameObject Porta possui o componente Porta (Script) contendo todo o comportamento, e um componente
Box Collider 2D marcado como Is Trigger é utilizado para detectar se o Personagem está próximo.
O GameObject Porta de Abertura possui um componente Animator responsável por executar a animação da
porta abrindo e fechando.
Com o GameObject Porta de Abertura selecionado, abra a janela Animation, selecione no painel das
propriedades animadas o clipe de animação “FechandoPorta” ou “AbrindoPorta” e veja que a animação é
realizada apenas alterando a escala x:

Figura 8.118 - Animação da porta abrindo ou fechando é feita alterando a escala x do sprite

O pivot do GameObject Porta de Abertura se encontra no centro e à direita (Right Center), este é o ponto
utilizado para realizar a animação da escala x do sprite.

Quando o jogo for iniciado, a porta adicionada na cena vai se comunicar com o Gerenciador do Jogo para definir a
porta atual da fase, dessa forma o jogo sabe qual porta deve ser destrancada quando jogador coletar todas as moedas do
cenário. Assim que a porta for aberta ou fechada, algumas instruções devem ser executadas, quando aberta, o
personagem deve caminhar automaticamente até o centro da porta, assim que a porta abrir completamente e o jogador
já estiver no centro, então a porta pode ser fechada, além disso, quando a porta for fechada completamente, significa
que o jogador deve prosseguir para a próxima fase. Essas instruções podem ser executadas adicionando Eventos de
Animação, dessa forma podemos executar algum código conforme o quadro de animação atual, por exemplo, o último
quadro da animação abrindo e fechando pode ser utilizado para executar as instruções mencionadas anteriormente.

Adicionando Eventos de Animação

1. Selecione o GameObject Porta de Abertura (o filho da Porta) e abra a janela Animation.

2. No painel das propriedades animadas, selecione o clipe de animação “AbrindoPorta” e selecione o último
quadro da animação (30), em seguida clique no botão Add event:

Figura 8.119 – Adicionando um evento de animação

Um pequeno traço azul (indicando que está selecionado) é adicionado na linha do tempo, este é um evento de
animação:

Figura 8.120 - Evento de animação adicionado na linha do tempo

Assim que um evento de animação é selecionado, a janela Inspector exibe uma propriedade chamada Function,
contendo uma lista de todos os métodos disponíveis que pode ser executado:
Figura 8.121 - Eventos de animação disponíveis

Estes métodos estão disponíveis no script EventosDaPorta adicionado no próprio GameObject Porta de Abertura,
ou seja, a lógica que você deseja executar deve estar no script onde o componente Animator foi adicionado, caso
contrário, não será possível definir um evento de animação, pois nenhuma opção vai estar disponível para escolher.

3. Selecione a opção AoAbrirEstaPorta().

4. De volta no painel das propriedades animadas, selecione o clipe de animação “FechandoPorta” e repita a etapa
2, só que dessa vez escolha a opção AoFecharEstaPorta().

Transição Entre Cenas

Com a porta da fase devidamente adicionada na cena, agora nos resta determinar qual fase deve ser carregada e como
será carregada. Para fazer isso vamos utilizar um Gerenciador de Cena (responsável por carregar outras cenas durante
o jogo) e um Fader de Cena (utilizado para criar o efeito da tela escurecendo entre as transições de cena).

Definindo a Próxima Fase

1. Selecione o GameObject Porta e siga para a janela Inspector.

Veja no componente Porta (Script) que existe uma propriedade chamada Próxima Fase, você precisa definir o nome
da cena que será carregada:

Figura 8.122 - Nome da cena (a próxima fase)


O nome da cena é o mesmo nome renomeado no asset da cena, é importante que uma cena com este nome exista no
projeto, senão um erro será gerado impedindo que o jogador prossiga.

2. Como ainda não criamos outra fase, insira o nome “Principal” (assumindo o nome da cena atual).

A Cena Para Carregar


É importante que a cena exista na lista Scenes in Build, configurado acessando Edit > Build Settings, caso
contrário, um erro será gerado e a transição de cena não será realizada.

Repare que não faz sentido definir a próxima fase como sendo a fase atual (a cena atual), mas para facilitar os testes
deve servir.

Assim que o jogador entrar na porta, o Gerenciador da Cena será chamado para carregar a próxima fase.

Adicionando o Gerenciador da Cena

1. Crie um GameObject vazio, renomeie para “Gerenciador de Cenas” e redefina suas coordenadas se necessário.

2. Com o mesmo selecionado, siga para a janela Inspector, clique em Add Component e pesquise pelo componente
“GerenciarCena”, em seguida adicione o componente que foi encontrado.

Repare que este componente não expõe nenhuma propriedade, seu propósito é de apenas gerenciar as cenas
internamente.

O Gerenciador de Cenas vai se comunicar com o Fader de Cena para criar um efeito “escurecendo” ao transitar entre
as cenas, vamos fazer isso utilizando uma Canvas.

Adicionando o Fader de Cena

1. Siga para a janela Hierarchy, clique no botão Create, aponte para UI e selecione a opção Canvas. Renomeie
para “Canvas Fader de Cena”.

É importante que o Canvas Fader de Cena seja exibido no topo da Canvas do Jogo (onde contém o painel das
moedas), dessa forma quando a transição de escurecer a tela for executada, a tela toda fica escura, caso contrário, outros
elementos podem ser exibidos por cima da tela escura.

2. Com o GameObject Canvas Fader de Cena selecionado, siga para a janela Inspector, e no componente Canvas,
altere Sort Order para o valor 1:
Figura 8.123 - Alterando a ordem de exibição de uma Canvas

Valores maiores tem maior prioridade de exibição, ou seja, sabendo que o valor padrão de Sort Order é 0, então a
Canvas do Jogo será exibida atrás da Canvas Fader de Cena. Agora precisamos adicionar o componente responsável
por criar o efeito da transição de escurecendo a tela.

3. Com o GameObject Canvas Fader de Cena selecionado, siga para a janela Inspector, clique em Add
Component e pesquise pelo componente de script FaderDeCena, em seguida adicione o componente que foi
encontrado.

Este componente expõe duas propriedades, sendo elas o Fader Canvas Group (a referência de um grupo de Canvas
utilizada para alterar a transparência) e a propriedade Duração Fade (define o tempo do efeito para escurecer e mostrar
a tela).

Vamos criar o elemento responsável por escurecer a tela:

4. Clique com o botão direito do mouse sobre o GameObject Canvas Fader de Cena, aponte para UI e selecione
Image. Em seguida renomeie para “Fader Escuro”.

5. Com o Fader Escuro selecionado, no componente Image, altere a propriedade Color para uma cor preta, RGBA
(0, 0, 0, 255). Em seguida clique em Add Component, navegue na categoria Layout e selecione o componente
Canvas Group.

6. Desmarque as propriedades Interactable, Blocks Raycasts e Ignore Parent Groups, você não precisa entender
o funcionamento delas agora, apenas saiba que são desnecessárias e podem ser desativadas.

O Canvas Group possui uma propriedade chamada Alpha que nos permite alterar a transparência de todos os
elementos no parentesco onde o mesmo foi adicionado, incluindo a própria imagem do Fader Escuro.

7. Altere Alpha para o valor 0 (completamente transparente), dessa forma o jogo é iniciado com a tela transparente.

O valor do parâmetro Alpha é alterado pelo componente Fader de Cena que foi adicionado no Canvas Fader de
Cena.

8. Selecione o Canvas Fader de Cena, e na propriedade Fader Canvas Group, defina a referência como sendo o
GameObject Fader Escuro:

Figura 8.124 - Definindo a referência do Fader Escuro

Experimente executar o projeto e colete todas as moedas, um som de porta destrancando é reproduzido, isso significa
que a porta foi desbloqueada e o jogador pode prosseguir para a próxima fase. Então se aproxime da porta e pressione a
tecla “E” (tecla de interação), o personagem vai abrir a porta, e assim que fechada, a transição de cena será executada,
escurecendo toda a tela, em seguida a nova fase será carregada e o efeito da cena fica transparente mostrando a nova
fase.
Adicionando Armadilhas

Até o momento nosso personagem está literalmente “passeando no parque”, não existe nenhum perigo, além disso, se
o personagem cair no buraco (assumindo que você criou uma brecha no mapa), o personagem vai cair no infinito e
além, pois não existe nada detectando o buraco.

Nesta seção vamos definir o seguinte:

O componente da “saúde” para o personagem que é afetado pelo componente “causar dano” adicionado nas
armadilhas.
Criar um “espinho” onde o personagem deve evitar contato.
Definir áreas consideradas como “buraco”.
Criar a animação do personagem morrendo (efeito de sangue).

Assim que o personagem morrer, a fase atual será reiniciada para o jogador tentar novamente.

A vida do Personagem

Para que as armadilhas causem dano ou algum efeito no personagem, precisamos adicionar um componente
responsável por implementar a vitalidade do personagem.

Adicionando o Componente da Vitalidade

1. No Modo Prefab do Personagem e com o mesmo selecionado, siga para a janela Inspector, clique em Add
Component e procure por Vitalidade, adicione o componente que foi encontrado.

Você vai notar uma propriedade chamada Total de Vidas contendo o valor 1 padrão. No nosso jogo, quando o
personagem cair em uma armadilha, ele deve morrer imediatamente, então mantenha 1 vida. Repare que existe um
campo chamado “Ao Morrer”, este é um evento que é executado quando o Personagem morre, o que será executado
quando isso acontecer já existe no script Personagem, vamos apenas definir.

2. No evento da propriedade “Ao Morrer”, clique no pequeno botão com sinal de mais +.

Um campo chamado None (Object) é exibido (indicando nenhum objeto selecionado), neste campo precisamos definir
o GameObject contendo o método que será executado quando o personagem morrer.

3. Clique e arraste o Personagem da janela Hierarchy para dentro desta caixa como indicado na figura a seguir:

Figura 8.125 - Definindo um GameObject para executar um evento

O menu logo ao lado (indicado por No Function, ou sem função) é exibido, listando todos os componentes e métodos
disponíveis que podem ser executados por este evento.

4. Clique no menu de eventos, aponte para Personagem e selecione a opção AoMorrer():

Figura 8.126 - Evento Personagem.AoMorrer() selecionado

Dessa forma, assim que o personagem entrar em contato com alguma armadilha, um método dentro do script
Vitalidade será executado, invocando o método AoMorrer que se encontra no script Personagem (o evento que
definimos), este método basicamente desativa o personagem e executa outras instruções relacionadas ao fim do jogo.

Armadilha de Espinho

Uma armadilha basicamente consiste em detectar se o jogador colidiu com o colisor da armadilha, quando isso
acontecer, a vitalidade do personagem é obtida e o método AoMorrer() que definimos antes será executado.

Criando a Armadilha de Espinho

1. Na janela Project, entre no diretório “Assets > Objetos > Armadilhas > Espinho > Sprites” e adicione na cena
o sprite “Espinho”.

2. Crie uma camada de colisão chamada “Armadilhas”, em seguida com o GameObject Espinho selecionado, siga
para a janela Inspector, e altere Layer para a camada Armadilhas.

3. No componente Sprite Renderer, altere Sorting Layer para “Objetos” e Sorting Order para o valor 10.

4. Clique em Add Component, navegue na categoria Physics2D e selecione o componente Polygon Collider 2D,
em seguida ative Is Trigger e clique no botão Edit Collider.

O volume do colisor Polygon Collider 2D é ajustado conforme o gráfico do sprite, porém, você precisa refinar o
formato.

5. Como o espinho possui um formato triangular, utilize apenas 3 pontos e ajuste-os para caber corretamente ao
redor do gráfico do sprite:
Figura 8.127 - Ajustando o colisor do espinho

Repare que no exemplo da figura anterior, coloquei o colisor um pouco para dentro do gráfico do sprite, dessa forma
evitamos que a colisão ocorra muito cedo. Agora você precisa adicionar o componente responsável por “causar dano na
vitalidade” do personagem.

6. Na janela Inspector, clique em Add Component e pesquise pelo script CausarDano, adicione o componente
que foi encontrado.

Algumas propriedades serão exibidas, sendo elas Camadas de Acerto (as camadas de colisão que serão utilizados para
“causar dano”), Dano (total de dano que este GameObject vai causar), Morte Imediata (se marcado, este GameObject
causa morte imediata, como mencionado antes, nosso personagem possui apenas uma chance, o mesmo deve morrer se
esta opção estiver marcada ou não) e Desabilitar Dano Ao Acertar (quando marcado, o dano é desabilitado, evitando
que seja executado novamente).

7. Em Camadas de Acerto, selecione apenas a camada “Jogador”, em Dano use o valor 1, ative Morte Imediata e
Desabilitar Dano Ao Acertar:

Figura 8.128 - O componente Causar Dano

Assim que o componente Causar Dano detectar a colisão com o Personagem, o mesmo vai obter a Vitalidade do
personagem e remover 1 vida, como nosso personagem só tem uma chance e a morte é imediata, a fase deve ser
reiniciada logo em seguida.
8. Crie um Prefab do Espinho, salvando-o no diretório “Assets > Objetos > Armadilhas > Espinho”.

9. Posicione o Espinho em um local específico no cenário:

Figura 8.129 - Espinho criado e posicionado no cenário○

Agora você pode duplicar o espinho e posicionar em diferentes lugares, como esta é a primeira fase, decidi adicionar
apenas um.

Experimente executar o projeto e pule sobre o Espinho, o Personagem vai “travar” na animação atual e a fase vai ser
reiniciada, isso acontece porque ainda não definimos a animação do personagem morrendo.

Armadilha de Buraco

Para a armadilha do buraco, basicamente vamos fazer o mesmo que fizemos para o Espinho, entretanto, o buraco não é
um sprite visível, é apenas uma área na cena que aciona a morte do personagem.

Criando a Armadilha do Buraco

Vamos utilizar um sprite quadrado para definir a área do buraco.

1. Siga para a janela Project, no diretório “Assets > Objetos > Armadilhas > Buraco > Sprites”, crie um sprite no
formato quadrado (menu Create > Sprites > Square), em seguida renomeie para “Buraco”.

2. Adicione o sprite Buraco na cena, em seguida na janela Inspector, altere Layer para a camada Armadilhas.

3. No componente Sprite Renderer, altere a cor do sprite (parâmetro Color) para um vermelho puro e com
transparência de 100, utilize o valor RGBA (255, 0, 0, 100).

4. Adicione o componente Box Collider 2D e ative Is Trigger.

O volume do colisor deve se ajustar automaticamente conforme o tamanho do sprite.


5. Adicione o componente de script Buraco (botão Add Component e pesquise por nome).

A única tarefa do componente Buraco (Script) é de alterar a cor do sprite para 100% transparente, dessa forma
evitamos que a cor seja exibida durante o jogo (mesmo estando fora da câmera). A cor vermelha é apenas para destacar
o buraco na cena e facilitar sua edição, assim que o jogo é iniciado, a cor deve ficar completamente transparente.

6. Adicione o componente Causar Dano e faça exatamente como você fez para o Espinho, ou seja, em Camadas
de Acerto selecione apenas a camada “Jogador”, em Dano use o valor 1, ative Morte Imediata e Desabilitar Dano
Ao Acertar.

7. Posicione e redimensione o Buraco para cobrir o buraco no cenário, algo parecido como na figura a seguir:

Figura 8.130 - Posicionando e redimensionando o Buraco

8. Crie um Prefab do Buraco, salvando-o no diretório “Assets > Objetos > Armadilhas > Buraco”.

Experimente executar o projeto e faça o teste jogando o Personagem no buraco (Isso é Esparta! Não? Ok).

Animação do Personagem Morrendo

Atualmente não há nada indicando que o personagem perdeu ou morreu, ao entrar em contato com uma das armadilhas,
o personagem simplesmente se congela, vamos resolver isso criando uma animação de esguicho ou borrifo de sangue.

Figura 8.131 - Quadros da animação do borrifo de sangue


Adicionando o Clipe de Animação “Morrendo”

1. Na janela Project, entre no diretório “Assets > Personagem > Animações” e crie um clipe de animação (menu
Create > Animation). Renomeie para “PersonagemMorrendo”.

2. Com o Personagem selecionado na cena, abra a janela Animator e adicione o clipe de animação
“PersonagemMorrendo”. Em seguida renomeie o estado para “Morrendo”:

Figura 8.132 - Estado de animação “Morrendo”

O estado da animação “Morrendo” pode ser transitado a partir de qualquer estado, ou seja, o personagem não precisa
estar no estado “Sobre uma Plataforma” ou no estado “No Ar”, para isto existe o estado Any State (qualquer estado)
indicado pela cor azul-claro como na figura a seguir:

Figura 8.133 - Estado de animação "Qualquer Estado"

3. Clique com o botão direito do mouse sobre o estado Any State e selecione Make Transition, em seguida clique
com o botão esquerdo do mouse no estado Morrendo.

Agora precisamos definir o parâmetro responsável por acionar o estado do personagem morrendo.

4. Na janela Animator, no painel Parameters, clique no botão com sinal de +, selecione o tipo Trigger, em seguida
renomeie o parâmetro para AoMorrer:

Figura 8.134 - Adicionando um parâmetro de animação do tipo Trigger

O tipo Trigger é parecido com o tipo Bool, a diferença é que assim que ela se torna verdadeira (é acionada), ela volta a
ficar falso em seguida, funciona como se fosse um botão ou gatilho.
5. Selecione a transição (seta entre Any State e Morrendo), siga para a janela Inspector, desabilite Has Exit Time
e Fixed Duration, em seguida defina a condição usando o parâmetro AoMorrer:

Figura 8.135 - Configurando a transição entre Any State para Morrendo

Com o estado da animação devidamente definida, agora precisamos adicionar os quadros da animação.

Definindo os Quadros da Animação Morrendo”

1. Siga para a janela Project e selecione o Sprite Sheet “Assets > Personagem > Sprites > Sangue”, agora na
janela Inspector, altere a propriedade Sprite Mode para Multiple, clique em Apply, em seguida clique em Sprite
Editor.

2. Na barra de controles do Sprite Editor, clique no botão Slice, selecione o tipo Grid By Cell Count e defina 6
linhas e 1 coluna (parâmetro Column & Row), em seguida clique no botão Slice para confirmar:
Figura 8.136 - Separando o Sprite Sheet do sangue

3. Para confirmar, clique no botão Apply e feche a janela.

4. Com o Personagem selecionado, abra a janela Animation e nas propriedades animadas, selecione o clipe de
animação “PersonagemMorrendo”.

5. Para definir os quadros da animação, siga para a janela Project e selecione todos os sprites do Sprite Sheet do
Sangue, e arraste-os para dentro da linha do tempo da janela Animation.

6. Altere Samples para o valor 24.

Feito isso, experimente executar o projeto e “morra” algumas vezes para testar a animação. Repare que a animação de
morrendo “congela” no último quadro, pois não existe nenhuma transição para outro estado. Para resolver isso
podemos desativar o sprite logo após o último quadro.

7. No painel de propriedades animadas, ative o botão de gravação, em seguida na linha do tempo selecione o
quadro 6 e siga para a janela Inspector. No componente Sprite Renderer, altere Sprite para a opção None:

Figura 8.137 - Definindo o último quadro da animação do sangue

8. Desative o botão de gravação e faça o teste novamente.


Controles para Celular

Até agora estamos testando o jogo na máquina onde estamos desenvolvendo, como nosso foco é a plataforma mobile
(Android e iOS), precisamos adicionar controles que respondem ao toque na tela. O componente Entradas Do
Personagem que foi adicionado ao GameObject Personagem possui uma propriedade chamada Entrada Atual que
nos permite escolher entre Teclado e Touch:

Figura 8.138 - Entrada atual

A opção Teclado é utilizada durante o desenvolvimento, enquanto Touch quando selecionado, permite utilizar toques
na tela como entradas para o personagem correr, pular e interagir. No entanto, se você expandir a entrada chamada
“Pular”, veja que existe uma propriedade chamada “Botão Touch” sem nada definido, esta referência é um gráfico na
tela que será utilizado como botão para o jogador pressionar (tocar na tela).

Adicionando e Definindo as Entradas Touch

Para facilitar o processo, já criei um Prefab contendo as entradas touch, você só precisa definir as referências dos
botões.

1. Na janela Project, siga para o diretório “Assets > Prefabs > UI” e clique e arraste o Prefab “Entradas Touch”
para dentro da janela Hierarchy, como filho do GameObject “Canvas do Jogo”.

Ao expandir o parentesco do GameObject “Entradas Touch” você vai encontrar o “Botão Pular” e “Botão
Interagir”, ambos se encontram no canto inferior direito da tela, e o botão “Analógico Digital” posicionado no canto
inferior esquerdo é utilizado para simular um botão analógico que permite movimentar o personagem na horizontal:

Figura 8.139 - Botões de entrada touch

2. Com o Personagem selecionado na cena, no componente Entradas do Personagem, expanda “Pular” e defina a
referência na propriedade Botão Touch como sendo o GameObject Botão Pular:
Figura 8.140 - Definindo a referência do botão touch

3. Expanda a entrada “Interagir” e defina a referência na propriedade Botão Touch como sendo o GameObject
Botão Interagir.

4. Para o analógico digital, expanda a entrada “Horizontal”, e defina a referência na propriedade Analógico Digital
como sendo o GameObject do mesmo nome.

Também precisamos definir a referência do contêiner onde as entradas touch foram inseridas, isso é feito na
propriedade Entradas Touch.

5. Ainda no componente Entradas do Personagem, defina a referência na propriedade Entradas Touch como
sendo o GameObject “Entradas Touch” (o GameObject pai contendo os botões e o analógico digital).

O contêiner das entradas touch é definido simplesmente para que o script possa ativar os botões touch quando o jogo
for executado em um celular real, ou seja, enquanto estiver desenvolvendo, você pode desativar o GameObject
Entradas Touch e utilizar apenas o teclado para testar.

Altere a propriedade Entrada Atual para a opção Touch e experimente executar o jogo para testar, você pode utilizar
os cliques do mouse para simular os toques na tela. No entanto, a melhor maneira de testar um jogo para celular, é
jogando no próprio dispositivo, veremos como fazer isso em breve.
Reprodutor de Música

Podemos reproduzir uma música de fundo para dar mais vida ao jogo, vamos fazer algo parecido como fizemos para o
jogo 3D, exceto que dessa vez vamos utilizar um script personalizado. O componente Reprodutor de Música (Script)
que iremos utilizar, basicamente adiciona o componente Audio Source na inicialização e utiliza as propriedades
definidas para configurar o Audio Source automaticamente.

Música de Fundo

1. Comece adicionando um GameObject vazio (“Ctrl + Shift + N”), renomeie para “Reprodutor de Música” e
redefina suas coordenadas.

2. Com o Reprodutor de Música selecionado, siga para a janela Inspector, clique em Add Component e busque
pelo componente de script ReprodutorDeMusica, adicione o componente encontrado.

Três propriedades serão exibidas, sendo elas Clipe da Música (o clipe de áudio da música a ser reproduzida),
Reproduzir Ao Iniciar (determina se a música deve ser reproduzida ao iniciar o jogo) e Volume da Música (define o
volume inicial da música).

3. Nossa música se encontra no diretório “Assets > Áudio > Música > Pixelland” (arquivo .mp3), defina este clipe
de áudio na propriedade Clipe de Música.

4. Deixe marcado Reproduzir Ao Iniciar.

5. Altere Volume da Música para o valor 0.7.

Figura 8.141 - Reprodutor de Música configurado

Execute o jogo e verifique se a música está reproduzindo.


Otimização Básica

Nesta seção vamos realizar algumas otimizações básicas que pode melhorar muito o desempenho do jogo,
especialmente em se tratando de jogos para celulares que possui hardware limitado. Otimização é algo que requer muita
atenção e cuidado, não precisamos nos aprofundar neste assunto agora, mas vou mostrar o básico que podemos fazer
para o nosso projeto.

Matriz de Colisão de Camadas

Lembra quando adicionamos as diferentes camadas de colisão durante o decorrer do capítulo? Então, a camada
“Jogador” é utilizada em alguns scripts para determinar a interação com o cenário, basicamente todas as camadas
interagem com a camada “Jogador”, no entanto, não precisamos realizar cálculos desnecessários entre objetos que não
interagem entre outros. Com a Matriz de Colisão podemos determinar quais objetos podem interagir com outros
conforme suas camadas, melhorando o desempenho do jogo.

Configurando a Matriz de Colisão de Camadas

1. Siga para o menu Edit > Project Settings, e selecione a categoria Physics2D. Em seguida ignore as
configurações iniciais e no final você vai encontrar a propriedade Layer Collision Matrix:

Figura 8.142 - Layer Collision Matrix (matriz de colisão de camadas)

Veja na figura anterior que todas as caixas estão marcadas, isso significa que todos os objetos nestas camadas de
colisão podem interagir entre si, para o jogo isso é um desperdício de recursos, pois o Unity precisa calcular a colisão
entre todos os objetos.

2. Comece desmarcando todas as caixas, assim fica mais fácil selecionar depois apenas o que precisamos.

Repare que o nome de uma camada de colisão se encontra em uma linha e em uma coluna, dessa forma podemos
definir quais camadas devem interagir com as outras.

3. Marque as caixas conforme as regras a seguir:

A camada “Jogador” colide com todas as camadas que criamos, ignorando as que foram criadas pelo Unity.
A camada “Coletaveis” colide com “Plataformas” por causa do efeito das partículas das moedas.
Nenhuma camada colide com a mesma camada.

A matriz de colisão deve ficar como na figura a seguir:

Figura 8.143 - Definindo a matriz de colisão de camadas

Empacotando Sprites

Empacotar sprites basicamente significa obter sprites individuais e uni-los em apenas uma textura que chamamos de
Sprite Sheet. Cada gráfico no jogo exige uma comunicação do processador com a placa de vídeo que chamamos de
“draw calls”, quanto maior o número de “draw calls”, mais processamento será exigido para exibir um quadro de
jogo. Se o processamento for lento, a placa de vídeo vai ficar “esperando” por informações, deixando o jogo lento
também. Durante o decorrer do projeto utilizamos alguns Sprite Sheet e diversos sprites individuais, no exemplo do
Sprite Sheet da moeda, apenas um “draw call” é utilizado, pois todos os sprites da animação da moeda se encontram
em apenas uma textura. Já no caso dos Tiles do cenário, cada Tile se encontra em um sprite separado, resultando em
um “draw call” para cada Tile único.

Você pode conferir a quantidade de “draw calls” utilizado pelo jogo acessando a janela Game, clique no botão Stats
que se encontra no final da barra de controles, e procure por Batches:
Figura 8.144 - Estatísticas do jogo e quantidade de Batches (draw calls)

No exemplo da figura anterior, 20 Batches significam 20 “draw calls”, podemos melhorar isso criando um Sprite
Sheet (também conhecido como Sprite Atlas) diretamente dentro do Unity.

Criando Um Sprite Atlas Para os Tiles Do Cenário

1. Na janela Project, siga para o diretório “Assets > Sprites” e crie uma pasta chamada “Atlas”, em seguida entre
nesta pasta.

Vamos criar um Sprite Atlas para conter todos os Tiles do cenário.

2. Acesse o menu Create da janela Project e selecione Sprite Atlas. Em seguida renomeie para
“TilesSpriteAtlas”.

Com o asset “TilesSpriteAtlas” selecionado, você pode ver suas configurações na janela Inspector. Na tabela a seguir
você pode conferir uma descrição das propriedades:

Tabela 8.2 - Propriedades de um Sprite Atlas


3. Deixe marcado Include in Build.

4. Desmarque Tight Packing, isso evita que os sprites sejam exibidos dentro de outros.

5. Em Objects For Packing, clique no botão com sinal de “+” e selecione o diretório “Assets > Sprites >
Plataforma > Tiles > Primavera”.

6. Clique no botão Pack Preview para criar a textura do Atlas:

Figura 8.145 - Definindo os sprites para criar o Atlas

O resultado da textura pode ser conferido na parte inferior da janela Inspector. Expanda a janela de pré-visualização
movendo o cursor do mouse sobre o título do painel e clique com o botão direito do mouse:
Figura 8.146 - Visualização da textura do Sprite Atlas

Se você adicionar novos objetos, clique novamente no botão Pack Preview para atualizar a textura.

7. Agora você pode repetir as etapas anteriores para criar diferentes Sprites Atlas, uma contendo os sprites de
decoração, interface, o personagem, etc.

Na figura a seguir você pode conferir alguns exemplos:

Figura 8.147 - Diferentes Sprite Atlas

Assim que criado e definido os Sprites Atlas, veja novamente no painel Stats que o número de Batches não mudou,
você só vai perceber a diferença ao executar o projeto. Então execute o jogo e veja se a quantidade de Batches (draw
calls) diminuiu.
Exportando o Jogo para Android

Agora que já temos uma base sólida de um jogo completo, podemos exportá-lo para ser jogado em um celular real, isso
é feito criando um arquivo APK. Mas afinal o que é APK? Um Android Package Kit é um formato de arquivo
utilizado pelo sistema operacional do Android para distribuição e instalação de aplicativos para celular, é semelhante a
um arquivo .exe no Windows utilizado para instalar programas, o arquivo APK basicamente faz o mesmo só que para
Android.

Configurando o Projeto Antes de Exportar

Estou assumindo que você seguiu as etapas “Configurando a Plataforma Android” no começo do capítulo, ou seja, o
módulo do Android e seus requerimentos (SDK e JDK) devem estar instalados e configurados, além disso, a plataforma
atual deve ser a Android.

Configuração do Player

Nas Configurações do Player podemos definir os aspectos comuns para a plataforma atual, como o nome, ícone e a
orientação da tela.

1. Siga para o menu Edit e selecione Project Settings, em seguida no painel à esquerda, clique na categoria Player.

2. Altere Company Name para o seu nome (padrão “DefaultCompany”) e Product Name para o nome do jogo
(nome atual do projeto).

3. Em Default Icon você pode selecionar uma textura presente no projeto para servir como ícone, você pode
selecionar o asset “Assets > Objetos > Moeda > Sprites > Moeda.png”.

As configurações anteriores são utilizadas para todas as plataformas, porém, precisamos alterar as configurações
específicas para a plataforma que vamos exportar. Logo abaixo você vai encontrar duas abas de configurações, uma
para a plataforma PC, Mac, Linux e outra aba de configurações para a plataforma Android:
Figura 8.148 - Configurações específicas para o Android

4 Clique na aba do ícone do Android como indicado na figura anterior (já deve estar ativo por ser a plataforma
atual).

Nosso jogo requer um tamanho de tela horizontal grande o suficiente que permita visualizar todo o cenário ao redor do
personagem. A melhor maneira de conseguir isso é jogando com o celular deitado, ou seja, no modo paisagem.
Podemos “forçar” o jogo a ser executado em uma orientação específica:

5. Dentre as configurações disponíveis, expanda Resolution and Presentation (resolução e apresentação), procure
por Orientation (orientação da tela), em Default Orientation (orientação padrão) escolha a opção Landscape Right
(paisagem à direita).

Repare que existe Landscape Right e Landscape Left, right e left ou direita e esquerda é apenas a posição do botão
Home no modo paisagem, o usuário precisa rotacionar o celular conforme esta configuração.

Outra configuração importante que precisamos definir é a identificação única do aplicativo, é um nome específico
utilizado pela Google Play, mesmo sabendo que não vamos publicar o jogo na loja, ainda sim precisamos definir este
nome, caso contrário não será possível exportar. O nome do pacote é escrito usando o que chamamos de DNS-reverso
seguindo o formato com.nomeDaEmpresa.nomeDoJogo, para o “nome da empresa” você pode utilizar seu próprio
nome.

6. Expanda a seção Other Settings (outras configurações) e procure por Identification (identificação), em Package
Name (nome do pacote) defina o ID do aplicativo seguindo o modelo do exemplo padrão, é permitido usar caracteres
alfanuméricos, pontos e hifens. Por exemplo, se Company Name (nome da empresa) é “Unity Total” e Product
Name (nome do jogo) é “Plataforma 2D”, então Package Name deve ser com.UnityTotal.Plataforma2D:
Figura 8.149 - Definindo a ID do aplicativo

Existem outras configurações, mas por enquanto você pode ignorá-las.

Gerando o Arquivo APK

O próximo passo é gerar o arquivo APK que nos permite instalar o jogo no celular, isso é feito utilizando a janela
Build Settings.

Gerando O Arquivo APK

1. Siga para o menu File > Build Settings (“Ctrl + Shift + B”).

2. Certifique-se que na lista Scenes in Build a cena Principal do jogo esteja listada, se a lista estiver vazia, clique
no botão Add Open Scenes (adicionar as cenas abertas).

Figura 8.150 - Cenas na build

3. Na lista Platform, selecione a plataforma Android, mantenha as configurações padrões e clique no botão Build:
Figura 8.151 - Exportando o jogo para Android

4. Uma janela será aberta pedindo para que você selecione um local para exportar o jogo, você pode criar o diretório
“Plataforma 2D > Builds > Android” e exportar o jogo nesta pasta. Então na janela Build Android, defina o nome
do arquivo APK e salve na pasta desejada:
Figura 8.152 – Salvando o arquivo APK

Assim que finalizado, a pasta contendo o arquivo APK será aberto, agora você pode enviar este arquivo para o seu
celular e instalá-lo como se fosse qualquer outro aplicativo.

Salvando e Instalando um APK no Celular

Normalmente quando instalamos um aplicativo no Android, utilizamos o Google Play Store, dessa forma o usuário
nem sequer precisa saber da existência do termo APK. No entanto, por questões de segurança, o Android bloqueia a
instalação de aplicativos APK, pois não foram verificados pela Play Store.

Como Instalar Um APK a Partir do Computador

1. Com o APK salvo, utilize uma maneira de enviá-lo para o seu celular, você pode conectá-lo diretamente no PC
via USB ou envie o arquivo para a nuvem e baixe-o no seu celular.

Agora você precisa habilitar a instalação de aplicativos de fontes confiáveis ou desconhecidas.

Android Oreo ou Superior


Se você estiver usando o sistema Android Oreo ou superior, o processo muda um pouco, se este for o seu caso,
pule para a etapa 5 a seguir.

2. No menu principal das Configurações do Android, entre na categoria Segurança, em seguida marque a opção
Fontes Desconhecidas.

3. Uma mensagem de aviso será exibida, confirme que você está ciente tocando em Ok.

4. Localize o APK salvo no seu celular e abra-o para instalar.

Se você estiver usando Android Oreo ou superior, a opção global “Fontes Desconhecidas” foi removida e agora a
configuração é feita por cada aplicativo.

5. Localize o APK salvo no seu celular e abra-o, será solicitado que você autorize a permissão, toque em
Configurações e ative a opção ao lado de “Permitir desta fonte” na tela seguinte.

6. Aperte o botão de voltar para retomar a instalação.

Assim que instalado o APK, utilize o ícone que foi criado para executar o jogo.
Exportando o Jogo para iOS

Exportar o jogo para um dispositivo rodando iOS requer um processo um pouco mais complicado em comparação
como é feito para Android, isso acontece pelo fato do processo ser feito de maneira externa, ou seja, você precisa ter
acesso a um Mac com Xcode instalado.

Os requerimentos básicos são:

Um computador Mac rodando OS X 10.11 ou superior.


A última versão do Xcode, disponível no seguinte endereço:

https://itunes.apple.com/br/app/xcode/id497799835?mt=12

Um dispositivo rodando iOS (iPhone ou iPad).


Conta gratuita do ID Apple que pode ser criada no seguinte link:

https://appleid.apple.com/

Configurando o Projeto Antes de Exportar

Antes de continuar, estou assumindo que você seguiu as etapas na seção “Configurando a Plataforma iOS” no começo
do capítulo, ou seja, o módulo do iOS deve estar instalado e a plataforma atual deve ser a iOS.

Configuração do Player

Nas Configurações do Player podemos definir os aspectos comuns para a plataforma iOS, como o nome, ícone e a
orientação da tela.

1. Siga para o menu Edit e selecione Project Settings, em seguida no painel à esquerda, clique na categoria Player.

2. Altere Company Name para o seu nome (padrão “DefaultCompany”) e Product Name para o nome do jogo
(nome atual do projeto).

3. Em Default Icon você pode selecionar uma textura presente no projeto para servir como ícone, você pode
selecionar o asset “Assets > Objetos > Moeda > Sprites > Moeda.png”.

As configurações anteriores são utilizadas para todas as plataformas, porém, precisamos alterar as configurações
especificas para a plataforma que vamos exportar. Logo abaixo você vai encontrar duas abas de configurações, uma
para a plataforma PC, Mac, Linux e outra aba de configurações para a plataforma iOS:
Figura 8.153 - Configurações especificas para o iOS

4. Clique na aba do ícone do iOS como indicado na figura anterior (já deve estar ativo por ser a plataforma atual).

Nosso jogo requer um tamanho de tela horizontal grande o suficiente que permita visualizar todo o cenário ao redor do
personagem. A melhor maneira de conseguir isso é jogando com o celular deitado, ou seja, no modo paisagem.
Podemos “forçar” o jogo a ser executado em uma orientação especifica:

5. Dentre as configurações disponíveis, expanda Resolution and Presentation (resolução e apresentação), procure
por Orientation (orientação da tela), em Default Orientation (orientação padrão) escolha a opção Landscape Right
(paisagem à direita).

Repare que existe Landscape Right e Landscape Left, right e left ou direita e esquerda é apenas a posição do botão
Home no modo paisagem, o usuário precisa rotacionar o celular conforme esta configuração.

Outra configuração importante que precisamos definir é a identificação única do aplicativo, é um nome específico
utilizado pela App Store, mesmo sabendo que não vamos publicar o jogo na loja, ainda sim precisamos definir este
nome, caso contrário não será possível exportar. Este nome é escrito usando o que chamamos de DNS-reverso
seguindo o formato com.nomeDaEmpresa.nomeDoJogo, para o “nome da empresa” você pode utilizar seu próprio
nome.

6. Expanda a seção Other Settings (outras configurações) e procure por Identification (identificação), em Bundle
Identifier defina o ID do aplicativo seguindo o modelo padrão, é permitido usar caracteres alfanuméricos, pontos e
hifens. Por exemplo, se Company Name (nome da empresa) é “Unity Total” e Product Name (nome do jogo) é
“Plataforma 2D”, então Bundle Identifier deve ser com.UnityTotal.Plataforma2D:
Figura 8.154 - Definindo a ID do aplicativo

7. Uma configuração que vale a pena mencionar ainda na seção Other Settings é a Target Device (dispositivo de
destino), utilize o menu para selecionar apenas iPhone e iPad, ou ambos:

Figura 8.155 - Dispositivo de destino

8. Logo em seguida você vai encontrar Target SDK, se sua intenção é de executar em um celular real, selecione
Device SDK, caso queira testar o jogo em um emulador do Xcode, selecione Simulator SDK:

Figura 8.156 - SDK de destino

Existem outras configurações, mas por enquanto você pode ignorá-las.

Adicionando seu ID Apple para o Xcode

Antes de compilar seu projeto, precisamos criar uma ID da Apple e defini-la no Xcode, isso é feito apenas uma vez, ou
seja, a mesma conta pode ser utilizada para qualquer futuro projeto do Unity.

Criando e Adicionando Seu ID Apple no Xcode

1. Caso ainda não tenha uma ID da Apple, obtenha uma conta no seguinte endereço oficial:
https://appleid.apple.com/.

2. Abra o Xcode.

3. Siga para o menu no topo da tela e selecione Xcode > Preferences.

A janela de preferências do Xcode será aberta.


4. No topo da janela, selecione a aba Accounts para exibir as informações sobre as ID da Apple que foram
adicionadas no Xcode.

5. Para adicionar sua ID da Apple, clique no botão com sinal de + que se encontra no canto inferior esquerdo, em
seguida selecione Apple ID e clique em Continue:

Figura 8.157 - Adicionando uma nova ID da Apple no Xcode

6. Uma janela será exibida pedindo por suas credenciais, insira sua ID Apple e senha para continuar.

Sua ID da Apple será exibida na lista, você pode selecioná-la para obter mais informações sobre a sua conta.

Exportando um Projeto do Xcode

O próximo passo é gerar o projeto do Xcode que será utilizado para compilar o jogo, isso é feito utilizando a janela
Build Settings.

Gerando o Projeto do Xcode

1. Siga para o menu File > Build Settings (“Ctrl + Shift + B”).

2. Certifique-se que na lista Scenes in Build a cena Principal do jogo esteja listada, se a lista estiver vazia, clique
no botão Add Open Scenes (adicionar as cenas abertas).
Figura 8.158 - Cenas na build

3. Na lista Platform, selecione a plataforma iOS, mantenha as configurações padrões e clique no botão Build:

Figura 8.159 - Exportando o projeto do Xcode

A janela Build iOS será aberta pedindo para você selecionar um local para exportar o projeto do Xcode, você pode
criar uma pasta no diretório “Plataforma 2D > Builds > iOS” e exportar nesta pasta (veja que “Plataforma 2D” neste
caso é o diretório raiz do projeto e não a pasta “Assets”).

4. Na janela Build iOS, salve como “Plataforma2D” e na pasta desejada:


Figura 8.160 – Salvando o projeto do Xcode

O Unity vai criar um projeto do Xcode chamado “Plataforma2D” dentro da pasta “Builds > iOS”. Assim que finalizar,
a pasta onde você salvou será aberta contendo o projeto do Xcode.

Compilando o Jogo com Xcode

Siga as próximas etapas para compilar seu jogo com Xcode:

Compilando o Jogo Com Xcode

1. Com a pasta do projeto do Xcode aberta, clique duas vezes no arquivo Unity-iPhone.xcodeproj para abri-lo no
Xcode:
Figura 8.161 - Projeto do Xcode

2. No canto superior esquerdo, selecione Unity-iPhone para visualizar as configurações do projeto.

A aba General vai ser exibida por padrão:

Figura 8.162 - Configurações do projeto na aba General (geral)

Na seção Identity você vai notar uma mensagem de aviso dizendo que não foi encontrado uma assinatura de identidade
válida:

Figura 8.163 - Assinatura de identidade não encontrada

3. Clique no botão Fix Issue para resolver o problema, uma janela será exibida listando as equipes disponíveis. Se
você estiver usando uma ID Apple gratuita, seu nome deve estar listado seguido de “(Personal Team)”. Clique em
Choose para permitir que o Xcode baixe os certificados necessários e gere um perfil provisório.

4. Conecte seu dispositivo no seu computador utilizando um cabo USB.

Se esta é a sua primeira vez conectando este dispositivo, você verá uma mensagem dizendo que o Xcode está
“processando arquivos de símbolos” (processing symbol files), isso significa que o Xcode está obtendo informações
do seu dispositivo para permitir depuração de aplicativos.

Aguarde até que o processo finalize.

A última etapa antes de compilar o projeto é garantir que o dispositivo está desbloqueado, pois o Xcode não vai
conseguir executar aplicativos em dispositivos bloqueados com uma senha.

5. Se o seu dispositivo está bloqueado com uma senha, é melhor alterar esta configuração antes de compilar. No seu
dispositivo, acesse Ajustes do sistema e toque na opção Geral, em seguida, acesse Bloqueio Automático e selecione
Nunca.

6. Para compilar, siga para o canto superior esquerdo da interface do Xcode e clique no botão com ícone de
“Reproduzir”:

Figura 8.164 - Compilando o projeto do Xcode

Se você nunca usou seu Mac para desenvolver iOS ou OSX antes, talvez uma mensagem seja exibida perguntando se
você deseja habilitar o modo do desenvolvedor. Este modo significa que você não precisa informar sua senha toda vez
que uma tarefa de desenvolvimento for executada.

7. Habilite o modo do desenvolvedor clicando no botão Enable, em seguida insira sua senha:

Figura 8.165 - Habilitando o modo do desenvolvedor para este Mac

Assim que finalizado, uma mensagem “Build succeeded” (compilação bem-sucedida) será exibida na barra no centro
superior do Xcode.

Para finalizar, talvez você tenha visto no seu dispositivo uma mensagem de aviso sobre “Desenvolvedor
Desconhecido” (Untrusted Developer), ou uma mensagem no Xcode dizendo “Não é possível executar [nome do seu
jogo]”, se isso acontecer, significa que você precisa definir no seu dispositivo para confiar em aplicativos gerados por
sua ID da Apple.

8. No seu dispositivo, acesse os Ajustes do sistema, toque em Geral, depois Gerenciar Dispositivos e Perfis,
selecione seu ID Apple, em seguida toque em Confiar.
Agora você pode executar o jogo que foi instalado no seu dispositivo.
Parte 9: Conclusão & Apêndice

Parabéns! Se você chegou até aqui e completou todos os capítulos anteriores, quer dizer que você está pronto para
aprender e encarar qualquer coisa relacionada com o Unity. Porém, a série do livro não termina aqui, existe muito
conteúdo a ser abordado que exige um módulo próprio. Acesse nosso site oficial para obter mais informações de
módulos futuros:

https://unity-total.blogspot.com
O que Esperar do Próximo Livro?

No próximo livro focaremos com Scripts C#, pois a programação é uma parte essencial do desenvolvimento de jogos,
então quanto mais cedo começarmos, melhor. Se você tem alguma sugestão para o próximo livro, por favor, entre em
contato, ficarei grato em saber sobre o que posso melhorar e adicionar.
Apêndice

Nesta seção você vai encontrar conteúdo extra que pode ser consultado como referência, também possui partes
importantes, mas que foram separadas dos outros capítulos para não “quebrar” o escopo ou o contexto atual.

Introdução ao Visual Studio Code

O Visual Studio Code é um editor de código que possui tudo que você precisa para desenvolver seu jogo, inclui
Intellisense, depurador, integração com Git e muitas extensões que podem ser instaladas separadamente. O editor é
multiplataforma, então se você estiver no Windows, Mac ou Linux e esteja procurando por um editor de código leve,
porque não usar o VS Code?

Baixando e Instalando o Editor

O primeiro passo é acessar o site https://code.visualstudio.com/.

Na página inicial você vai encontrar os links para baixar, se você estiver no Windows ou no Mac o assistente de
instalação deve estar disponível, ou se você estiver no Linux você vai encontrar os pacotes “.deb” ou “.rpm”:

Figura 9.1 - Página inicial do Visual Studio Code

Ubuntu, Mint e Derivados


Uma maneira rápida de instalar no Ubuntu ou em distribuições derivadas é usando a linha de comando.
Primeiro, digite sudo apt-get update para atualizar o banco de dados de pacotes, e para instalar, digite:
sudo apt-get install code.

Você também pode baixar o editor no seguinte endereço:

https://code.visualstudio.com/Download

Instalando os Pré-requisitos

Para utilizar os recursos do C# no Visual Studio Code você precisa instalar o Mono (suporte do C# para
desenvolvimento multiplataforma) e as extensões (utiliza o suporte do Mono para melhorar a experiência de
programação com o editor).

Instalando o Mono

1. Acesse o site oficial do Projeto do Mono:

https://www.mono-project.com/download/stable/

2. Escolha sua plataforma e faça a instalação normalmente.

Para o Linux siga as etapas que se encontra na própria página de Download, enquanto Windows e Mac você pode
baixar o assistente de instalação.

O próximo passo é instalar as extensões necessárias:

Instalando as Extensões Necessárias

1. Com o editor aberto, siga para a barra lateral no lado esquerdo e clique no botão “Extensões” (“Ctrl + Shift +
X”):

Figura 9.2 - Painel de extensões do VS Code

2. Na barra de busca, pesquise por “C#” e selecione a extensão que foi encontrada. No lado direito você vai
encontrar as informações sobre a extensão selecionada. Clique no botão Install para iniciar a instalação da extensão:
Figura 9.3 - Instalando a extensão C#

3. Instale também a extensão Debugger for Unity (permite depurar o código do jogo, este é um tópico avançado
que será utilizado no próximo módulo do livro):

Figura 9.4 - Extensão Debugger for Unity

4. Instale também a extensão Unity Tools (adiciona diversas funcionalidades para o desenvolvimento com o Unity):

Figura 9.5 - Extensão Unity Tools

5. Reinicie o editor para garantir que tudo foi instalado corretamente, simplesmente feche e abra o VS Code.

Definindo o Editor de Código Padrão

Siga as etapas a seguir para definir o VS Code como o editor de código padrão do Unity:

Definindo o Editor de Código Padrão


1. No Unity, siga para o menu Edit (ou menu Unity no Mac) e selecione a opção Preferences.

2. Clique na aba External tools (Ferramentas Externas) e na lista de opções em External script editor, selecione a
opção Browse (Procurar).

3. Localize e selecione o executável do VS Code (“code.exe” ou apenas “code” no Linux e Mac).

Localização do executável do VS Code em cada sistema:

Windows: C:\Program Files\Microsoft VS Code


Linux: /usr/bin/code
Mac: Dentro da pasta Aplicativos (/Applications/Visual Studio
Code.app/Contents/Resources/app/bin)

4. Certifique-se que a opção “Visual Studio Code” esteja selecionada, em seguida feche a janela de preferências:

Figura 9.6 - Selecionando o VS Code como o editor de código padrão

Abrindo o Projeto

No Unity, siga para o menu Assets e selecione Open C# Project, uma nova janela do Visual Studio Code será aberta
com o seu projeto do Unity:
Figura 9.7 - Projeto do Unity aberto no Visual Studio Code

Para abrir um arquivo de script a partir do Unity, clique duas vezes sobre o mesmo na janela Project, a janela do VS
Code será alternada com o script aberto.

Resolvendo Problemas
Se por algum motivo o editor não reconhecer o projeto, pode ser que apenas um arquivo esteja aberto em vez da
solução do projeto, neste caso é importante que no Unity o projeto seja aberto primeiro usando a opção do menu
Assets e selecione Open C# Project. Para obter outras informações sobre algum problema de instalação ou
com as extensões, acesse a janela Output pressionando “Ctrl + Shift + U”, ou siga para o menu View e
selecione Output.

No lado esquerdo da interface você vai encontrar o Explorador de arquivos do seu projeto (“Ctrl + Shift + E”),
repare que o diretório principal é a pasta do seu projeto:
Figura 9.8 - Explorador de arquivos do VS Code

Utilize a pasta Assets para navegar e abrir algum arquivo de script.

Alterando o Idioma da Interface

É possível alterar o idioma da interface, porém, apenas o pacote inglês está instalado por padrão. Siga as etapas a seguir
para instalar e definir o pacote de idioma Português do Brasil:

Alterando o Idioma da Interface

1. Acesse o painel de Extensões (“Ctrl + Shift + X”).

2. Busque pela extensão “portuguese”, o resultado da pesquisa deve exibir o pacote “Portuguese (Brazil)
Language Pack for Visual Studio Code”.

3. Com a extensão selecionada, clique no botão Install.

Assim que instalado, uma janela de informação é exibida no canto inferior direito perguntando se você deseja alterar o
idioma desejado e reiniciar o editor:
Figura 9.9 - Mensagem de confirmação para alterar o idioma

4. Clique no botão Yes, o VS Code vai definir a configuração e o editor será reiniciado com a interface traduzida.

Se a mensagem indicado na Figura anterior não for exibida, é possível realizar a alteração manualmente.

5. Pressione “Ctrl + Shift + P” para abrir a Palheta de Comandos, em seguida pesquise por “display” e selecione a
opção “Configure Display Language”:

Figura 9.10 - Utilizando a Palheta de Comandos

O arquivo “locale.json” será aberto no editor.

6. Altere a linha "locale":"en" para "locale":"pt-br":

Figura 9.11 - Definindo o idioma de exibição do editor

7. Salve o arquivo pressionando “Ctrl + S”. Em seguida reinicie o editor para que as alterações tenham efeito.

Acessando as Configurações do Editor


No Explorador de Arquivos (“Ctrl + Shift + E”), veja que foi criado uma pasta chamada “.vscode” contendo o
arquivo de configuração “settings.json” gerado automaticamente. A configuração gerada por padrão esconde
diversos arquivos que não precisa ser listado no Explorador. É possível usar este arquivo para configurar outros
aspectos do editor também, essas configurações serão aplicadas apenas para o projeto atual. Para configurar o editor de
forma global (afeta todos os projetos), clique no ícone de engrenagem que se encontra no canto inferior esquerdo da
janela, em seguida selecione Settings (Configurações):

Figura 9.12 - Acessando as configurações do editor

Outra maneira de acessar as configurações do editor é seguindo para o menu File (Arquivo), aponte para Preferences
(Preferências) e selecione Settings (Configurações) ou use o atalho “Ctrl + ,”.

Voltar para a seção “Coletando a Moeda”.


Glossário

Confira a seguir uma descrição de diversos termos utilizados durante o decorrer do livro.

2D

Objeto 2D

Um “GameObject” 2D como um “Sprite".

Sprite atlas

Também conhecido como Sprite Sheet, é uma textura composta por diversas texturas menores.

Animação

A janela Animator

A janela onde o “Controlador de Animação” é visualizado e editado.

A janela Animation

A janela utilizada para editar os “Quadro-chave” de uma animação.

Clipe de Animação

É uma simples “unidade” de movimento que guarda informações de animação que pode ser utilizado para animar
personagens ou realizar animações simples.

Chave de Animação

O valor de uma “Propriedade Animável”, definido em um ponto específico no tempo. Ao definir pelo menos duas
chaves para a mesma propriedade, vai criar uma animação.

Componente Animator

Um “Componente” que permite animar um “GameObject” usando o Sistema de Animação do Unity. O componente
Animator possui uma referência para um “Asset” de um “Controlador de Animação”.

Controlador de Animação

Controla a animação usando um ou mais “Clipe de Animação”.

Quadro-chave

Um quadro que marca o ponto de início ou fim de uma transição em uma animação. Uma sequência de quadros-chave
define qual movimento o usuário verá, enquanto as posições dos quadros-chave da animação definem a cronometragem
do movimento.
Assets

Asset

Qualquer arquivo suportado pelo Unity e que pode ser utilizado no seu projeto. Um Asset pode vim de um arquivo
criado fora do Unity, como um Modelo 3D, um arquivo de áudio ou uma imagem. Você também pode criar alguns
tipos de assets no Unity, como um “Controlador de Animação” ou um “Sprite”.

Arquivo de Modelo

Um arquivo contendo informações 3D, que pode incluir definições para ”Malhas”, animações, materiais e texturas.

Loja de Assets

Uma biblioteca para obter assets gratuitos e comerciais, criado por membros do Unity ou da comunidade. Oferece uma
grande variedade de assets, desde texturas, modelos, animações até exemplos de projetos completos, tutoriais e
extensões para o Editor do Unity.

Modelo

Uma representação de um modelo 3D de algum objeto, como um personagem, um prédio ou uma peça de mobiliário
(cadeira, mesa, sofá, etc.).

Prefab

Um tipo de asset que permite armazenar no Projeto um “GameObject” completo com “Componentes” e propriedades.
O Prefab funciona como um modelo onde você pode criar novas instâncias do objeto na “Cena”.

Standard Asset (ou Elementos Básicos)

Uma coleção de assets úteis fornecidos pelo Unity.

Unidade do Unity

A unidade de tamanho utilizado pelos projetos do Unity. Por padrão, 1 Unidade do Unity corresponde a 1 metro.

Áudio

Audio Listener

Um “Componente” que funciona como um microfone, recebendo sons de “Audio Source” (fontes de áudio)
na “Cena” e reproduzindo nos alto-falantes do computador.

Audio Source

Um “Componente” que reproduz um “Clipe de Áudio” na “Cena” para um “Audio Listener”.

Clipe de Áudio

Um contêiner no Unity para dados de áudio. O Unity suporta assets de áudio em mono, estéreo e de múltiplos canais
(até oito canais). O Unity pode importar arquivos de áudio no formato .aif, .wav, .mp3 e .ogg.

Play On Awake

Marque esta propriedade para fazer com que o “Audio Source” seja reproduzido ao iniciar o jogo.

Editor

A janela Console

Uma janela do Unity que exibe erros, avisos e outras mensagens gerado pelo Unity ou por seus próprios “Scripts”.

A Visão do Projeto

Faz parte da janela Project, é a visão que exibe o conteúdo do seu diretório de “Assets”.

A Visão da Cena

Uma visão interativa no mundo em que você está criando. Você pode usar a visão da janela Scene para selecionar e
posicionar cenário, personagens, “Câmeras”, luzes e qualquer outro tipo de “GameObject”.

Inspector

Uma janela do Unity que exibe informações sobre o “GameObject” ou “Asset” atualmente selecionado, permitindo que
você inspecione e edite os valores.

Zoom

Um controle da câmera da visão da cena que permite escalonar a visão na tela. Para obter mais informações, acesse a
seção “Zoom”.

Física

Box Collider (Colisor de Caixa)

Um “Componente” de “Colisor” com formato cúbico utilizado para “Detectar Colisões” com
outros “GameObjects” como dados e cubos de gelo.

Capsule Collider (Colisor de Capsula)

Um “Componente” de “Colisor” com formato de capsula utilizado para “Detectar Colisões” com
outros “GameObjects” como barris e pernas de um personagem.

Colisor

Uma forma invisível que é utilizada para lidar com colisões físicas para um objeto. Um colisor não precisa ser do
mesmo formato que a “Malha” de um objeto, um formato aproximado geralmente é suficiente e indistinguível durante
o gameplay.

Character Controller (Controlador do Personagem)


Um simples “Componente” de “Colisor” com formato de capsula com recursos específicos para se comportar como se
fosse um personagem no jogo.

Detectar Colisões

Um processo automático realizado pelo Unity que determina se um “GameObject” em movimento entrou em contato
com qualquer outro “Colisor”.

Rigidbody

Um “Componente” que permite que um “GameObject” seja influenciado pela simulação da gravidade e outras forças
da física.

Gráficos

Gizmo

Um gráfico sobreposto associado com algum “GameObject” na “Cena”, e são exibidos na visão da cena (“A Visão da
Cena”). Ferramentas internas como a ferramenta de mover são Gizmos, e você pode criar um Gizmo personalizado
utilizando texturas ou Scripting. Alguns Gizmos são apenas exibidos quando o GameObject está selecionado, enquanto
outros Gizmos são exibidos independente de qual GameObject está selecionado.

Malha

O principal gráfico primitivo do Unity. Malhas compõem uma grande parte dos seus mundos 3D.

Material

Um “Asset” que define como uma superfície deve ser renderizada (exibida), inclui referências para “Texturas”, cores,
dentre outras opções. As opções disponíveis por um Material depende do “Shader” utilizado pelo material.

Mesh Filter

Um “Componente” que obtém uma “Malha” dos seus “Assets” e transfere para o componente “Mesh Renderer” para
“Renderizar” na tela.

Mesh Renderer

Um “Componente” que obtém uma geometria do componente “Mesh Filter” e renderiza em uma posição definida no
“Componente Transform” do objeto.

Modo de Renderização (Rendering Mode)

Um parâmetro do Shader Padrão (“Standard Shader”) que permite escolher se o objeto deve possuir transparência, caso
sim, define qual tipo de combinação utilizar.

Normal Map

Um tipo de “Textura” que permite adicionar detalhes na superfície do modelo, como relevos e arranhões que são
capturados pela luz como se fizessem parte da geometria.
Pixel

A menor unidade em uma imagem computada. O tamanho do pixel depende da resolução da tela.

Quad

Um objeto primitivo que assemelha com um plano, mas com apenas 1 unidade longa em todas as extremidades.

Skybox

Um tipo especial de “Material” utilizado para representar céus. Geralmente de 6 lados.

Sprite

Um objeto de gráfico 2D. Se você está acostumado a trabalhar com 3D, Sprites basicamente são um tipo padrão de
“Textura” tratado de maneira especial.

Shader

Um script que combina cálculos matemáticos e algoritmos para calcular a cor de cada “Pixel” renderizado, baseado na
iluminação e nas configurações do “Material”.

Standard Shader

Um “Shader” interno utilizado para “Renderizar” objetos do mundo real, como pedra, madeira, vidro, plástico e metal.
Suporta uma grande variedade de tipos e combinações de shaders.

Textura

Uma imagem utilizada para “Renderizar” um “GameObject”, “Sprite" ou um elemento da “UI”. Texturas geralmente
são aplicadas na superfície de uma “Malha” para deixá-la com o visual desejado.

Tile

Um “Sprite" renderizado em um “Tilemap”.

Tilemap

Um “GameObject” que permite criar níveis 2D utilizando Tiles (ladrilhos) com uma grade associada.

Terreno

A paisagem na sua “Cena”. Um “GameObject” do Terreno adiciona um grande plano na sua Cena e você pode usar a
janela “Inspector” para criar e detalhar o terreno.

Renderizar

O processo de exibir gráficos na tela. Por padrão, a “Câmera” principal no Unity é utilizada para renderizar sua visão
na tela.

Geral
Billboard

Um “Objeto 2D” texturizado que rotaciona na direção em que a “Câmera” está olhando.

Build

O processo de compilar seu Projeto em um formato pronto para ser executado em uma plataforma específica.

Câmera

Um componente que cria uma imagem de um particular ponto de vista da “Cena”. Uma Cena no Unity é criada
arranjando e movendo objetos em um espaço tridimensional, porém, a tela do observador é bidimensional. O trabalho
de uma Câmera é capturar a visão 3D e torná-la “plana” para ser exibida na tela.

Cena

Uma Cena contém os ambientes e menus do seu jogo. Imagine um arquivo de Cena como se fosse um nível de jogo
único. Em cada cena, você insere os ambientes, obstáculos e decorações do cenário, basicamente cria-se o design e
constrói seu jogo em diferentes partes.

Componente

Uma parte funcional de um “GameObject”. Um GameObject pode conter vários componentes. O Unity possui
diferentes componentes internos, mas você pode criar seu próprio componente escrevendo “Scripts”.

Componente Transform

Determina a Posição, Rotação e Escala de cada objeto na “Cena”. Todo “GameObject” possui um componente
Transform.

GameObject

O objeto fundamental das “Cenas” do Unity que representa personagens, itens, cenário, “Câmeras” e muito mais. A
funcionalidade de um GameObject é definida pelos “Componentes” adicionados nele.

Objeto 3D

Um “GameObject” 3D como um Cubo ou um “Terreno”.

Parentesco

Um objeto que contém objetos Filhos na Hierarquia. Quando um “GameObject” é Pai de outro GameObject, o
GameObject Filho vai mover, rotacionar e escalonar exatamente como acontece no Pai. Imagine o Parentesco como se
fosse a relação entre seus braços e seu corpo; quando seu corpo se move, seus braços também se movem junto.

Linha do Tempo

Animação

Um conjunto de imagens que cria uma imagem em movimento quando executado em sequência. No Unity, uma
animação é o resultado de adicionar duas chaves de animação diferente, em dois tempos diferentes, para a
mesma “Propriedade Animável”.

Interpolação

Os valores estimados que determina o formato de uma “Curva de Animação” entre dois quadros.

Curva de Animação

A curva desenhada entre os conjuntos de quadros da mesma “Propriedade Animável”, em diferentes quadros ou
segundos. O formato da curva de animação é determinado pela posição dos tangentes e do modo de “Interpolação”
selecionado de cada quadro.

Propriedade Animável

Uma propriedade que pertence a um “GameObject”, ou faz parte de um componente adicionado ao GameObject, que
pode possuir diferentes valores ao decorrer do tempo.

UI (User Interface)

Canvas

A área que contém todos os elementos da “UI” na “Cena”. A área da Canvas é exibida como um retângulo na visão da
cena.

Texto

Um pedaço de texto não interativo exibido para o usuário. Pode ser usado para disponibilizar legendas ou rótulos para
outros controles da interface ou para exibir instruções ou qualquer outro tipo de texto.

UI

(User Interface ou Interface do Usuário) permite que o usuário interaja com seu jogo.

Scripting

Tag

Uma palavra de referência que você pode atribuir para um ou mais “GameObjects” que ajuda a identificar
GameObjects para fins de Scripting. Por exemplo, você pode definir uma Tag chamada “Comestivel” (evite utilizar
acentos) para qualquer item que o jogador pode comer no seu jogo.

Scripts

Um pedaço de código que permite criar seus próprios “Componentes”, acionar eventos de jogo, modificar propriedades
dos Componentes ao decorrer do tempo e responder as entradas do usuário de qualquer maneira que desejar.