Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

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âmeraVirtual
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
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 deuma 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.
https://unity-total.blogspot.com
mailto: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
https://store.unity.com/pt/products/unity-personal
https://store.unity.com/pt/products/unity-plushttps://store.unity.com/pt/products/unity-pro
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/.
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:
https://unity.com/pt
https://store.unity.com/pt
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:
https://forum.unity.com/forums/unity-hub.142/
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:
Figura1.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çandocom 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 penamencionar 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 Savepara 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 novamenteou 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 removerobjetos:
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 - ComponenteTransform
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 menude 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 mantera 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.
FiltrandoAssets 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 corazul-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):
https://en.wikipedia.org/wiki/Cartesian_coordinate_system
https://es.wikipedia.org/wiki/Coordenadas_cartesianas
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ão3D 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 modelos3D 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 coordenadalocal. 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.
Visibilidadeno 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 sairdo 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:
Figura3.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, desdesua 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 suportadopelo 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:
https://pt.wikipedia.org/wiki/Mapeamento_de_textura
https://pt.wikipedia.org/wiki/Mapeamento_UV
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 deshader 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 osvalores (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 DrawInstanced
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 tabelaa 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 eplantas 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 umavez 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
serobtidos 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,
algoparecido 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 - Definindoo 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, precisamoscriar 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 paraajustar 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.
Desativandoo 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
propriedadesde 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 jogadorcoletar 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ódigoda 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:
https://en.wikipedia.org/wiki/Skybox_(video_games)
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 ativeo 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 pequenoquadrado 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

Mais conteúdos dessa disciplina