GAMES - DESENVOLVIMENTO DE JOGOS
COM UNITY
CONTEÚDO PROGRAMÁTICO
Unity Essencial Introdução ao curso
Conferir infraestrutura, hardware, software
● Apresentação do professor ● Lista de alunos ● Introdução ao Unity
Visão geral da ferramenta
●
O que é game engine, diferença com relação a IDEs genéricos
●
Showcase (jogos feitos no Unity)
●
Comunidade, Asset Store, facilidade de achar material e ajuda
●
Plataformas: possibilidades e restrições
●
Possibilidade de muitas plataformas (PC, mobile, consoles, etc)
●
Consoles só com licença específica do Unity, e participação nos programas do fabricante (+Kits de
●
desenvolvimento)
Com Unity free é permitido comercializar o jogo até US$ 100.000,00 anuais
●
Na web há a restrição do WebPlayer e WebGL ainda não está estável
●
Programa do curso, projetos que serão desenvolvidos
●
Interface
Criar um novo projeto (selecionar a pasta)
Principais áreas do editor (cena, game, project, inspector, console)
●
Layouts do editor
●
Conceito de cena e game objects, criar (salvar) cena, adicionar objetos à ela
●
Sistema de eixos 3D, experimentos com cubos, Transform
●
Ferramentas de edição: pan, posição, rotação, escala, edição por vértices (atalhos)
●
Modos de visão: perspectiva vs ortográfico, menu de atalhos de vistas
●
Câmera (posicionamento)
●
Ativação da física com Rigidbody
●
Execução do jogo, pausa, execução frame a frame (atalhos)
●
Experimentos com Colliders, edição do formato do collider
●
Ativar/desativar objetos e componentes
●
Projeto do Unity (salvar, mover)
Salvar o projeto
●
Estrutura de um projeto Unity (conteúdo das pastas)
●
Armazenar toda pasta do projeto (zipar, colocar no pendrive, etc).
●
Abrir um projeto
●
Cuidado: não criar um projeto dentro de outro
●
Montagem de uma cena, parte 1
Hierarquia, posição, escala, rotação de objetos dentro de outros
●
Game objects dentro de outros (hierarquia) vs componentes (ficam "dentro" dos objetos)
●
Modelagem de estruturas com primitivas (plano, cubo, esfera, etc)
●
Vertex, Edge e Face
●
Câmera (completo)
●
Navegação FPS no editor (setas)
●
Montagem de uma cena, parte 2
Escala do editor (unidade: metro), uso do cubo para medir
●
Materiais, aplicação nos objetos, escala, escolha de shaders
●
Importação de texturas (diferença entre o arquivo e a textura importada)
●
Luzes (experimentos com diferentes tipos de luzes e cubos, habilitar sombra)
●
Prefabs
Criação de prefabs, conversão de objetos da cena
●
Utilização de prefabs
●
Mudanças de valores de componentes, reset, apply, revert
●
Terreno (completo)
●
Árvores (completo)
●
Montagem de ambientes externos, parte 2
Água (completo)
●
Skybox, ambient light, fog
●
Exercício: ajuste da iluminação da cena
●
Essencial da visão em 1ª pessoa
First Person Character Controller (completo)
●
Limite de áreas navegáveis (colliders invisíveis)
●
Exercício: criar um level de parkour (plataformas)
●
Scripts básicos, parte 1
Visão geral do Gameloop (conceito)
●
Criar script, apresentação do MonoDevelop
●
Métodos padrão (Start, Update)
●
Mudança de propriedades de componentes do próprio objeto
●
Exemplo: PlataformaAutomatica (apresentação das partes do script: variáveis (inspector), métodos)
●
Relação entre o MonoDevelop e o Unity, compila ao ganhar foco
●
Mais exemplos básicos:
●
Luz piscando, mudando de intensidade
●
Outros
●
Scripts básicos, parte 2
Input com teclado, configuração das propriedades do projeto
●
Exemplo: Lanterna (tecla F liga/desliga luz)
●
Exemplo: LargarBola (tecla Q cria um prefab de bola na frente do player criação dinâmica de
●
prefab)
Scripts básicos, parte 3
Detecção de colisão, OnCollisionEnter
●
Exemplo: Cestas para bolas: detecta que uma bola foi largada sobre ela
●
Triggers
●
Detecção de colisão, OnTriggerEnter, OnTriggerExit
●
Exemplo: PortaoAutomatico (ao entrar no trigger, muda a posição do portão)
●
Exemplo: PortaoAutomatico (precisa entrar no trigger e pressionar E)
●
RigidyBody (completo)
●
Tamanho e distribuição dos colliders vs distribuição da massa
●
Colliders estáticos, isKinematic
● Physics material ● Importância da escala ● Gravidade ●
Joints, ragdoll (boneco de cubos)
●
Scripts
Controle de RigidBody por código (forças)
●
Exemplo: Tiros e misseis
●
Exercício: level de destruição de paredes (feitas de cubos).
●
Essencial da visão em 3ª pessoa
3rd Person Character Controller (completo)
●
Correção dos vínculos das animações do modelo (o default vem com erro)
●
Anatomia do modelo: modelo, texturas, animações (visão geral)
●
Mecanim criação de visão em 3ª pessoa sem o componente
Animator (editor), estados e transições
●
Parâmetros
●
Script: controle de parâmetros via código
●
Exemplo: movimento do personagem
●
Câmera com follow
●
AssetStore e importação de modelos
Usando a AssetStore, baixando modelos (casas)
●
Importação de modelos de outras fontes (casas, personagens)
●
Importação de modelos contendo animações
●
Modelos humanóides compatíveis com Mecanim
●
Pacotes de animações mecanim (motion capture)
●
Áudio
Importação de clips de áudio (completo)
●
Audio Source (completo)
●
Audio Listener (completo)
●
OnGUI
●
Método para criação de interface
●
Essencial de veículos
Wheel colliders
●
Montagem de veículos, centro de massa e outros ajustes
●
Controle do veículos via código
●
Distribuição do jogo
Opções de qualidade
●
Publicação para Windows, Linux, Mac (completo)
●
Distribuição com ZIP
●
Exercício: distribuir o jogo para os colegas testarem
●
Publicação para Web
Webplayer opções básicas, limitações
●
WebGL opções básicas, limitações
●
Envio para o servidor (simulação)
●
Unity Intermadiário Introdução ao curso
Conferir infraestrutura, hardware, software
●
Apresentação do professor
●
Lista de alunos
●
Mais detalhes sobre o MonoDevelop (atalhos, configurações)
Formatação ao salvar ● Quebra de linha ● Tab ●
Instalação de outros editores
Microsoft Visual Studio
●
Linguagens suportadas
C# e JS
Explicação de scripts do curso essencial (nomes dos itens: o que é variável, função, método, etc) Variável e constante ● Tipos de dados ●
Operadores e tabela verdade
●
Estruturas de seleção If, else, switch
●
Função
●
Método
●
Métodos padrão e quando são chamados, explicação do sistema por trás disso.
Gameloop
●
Update, FixedUpdate, Start, Awake, OnEnable, OnDesable…
●
Awake antes do Start
●
Scripts do Unity, parte 1
Utilização de input (exemplos do curso essencial)
●
Detalhar mais os eixos
●
Exercícios
Exercícios com condições e teclas
●
Pegar exemplos anteriores
●
Exercícios com flags, contadores, acumuladores (plataforma automática e semelhantes)
●
Scripts do Unity, parte 2
Introdução a Orientação a Objetos
Classes, métodos e variáveis estáticos
● Vetores 2D e 3D Vector3 ● Vector2 ●
Rotinas úteis, parte 1
Distância entre vetores, Lerp, etc.
Distancia entre objetos
●
Lerp para movimentação
●
Print e Debug.Log e Debug.Break
●
Scripts do Unity, parte 3
Atributos ● Enumerations ● Propriedades ● Operador “?” ●
Carga de cena (síncrona, assíncrona, aditiva)
Application.LoadLevel carrega outra cena. Ela deve estar adicionada nas propriedades de build.
●
Application.LoadLevelAdditive carrega a outra cena mesclando com a atual
●
Exercício: jogo de parkour (essencial) com fases passa de fase ao chegar no final das trilhas.
Exercitar a troca de cena (menu para fase, por exemplo, onde descarrega uma e carrega outra);
●
Exercitar também a carga aditiva (ir carregando pedaços da fase conforme o jogador chega neles
●
montar as fases de forma a se encaixarem);
Carga dinâmica de recursos
Pasta resources qualquer pasta chamada “Resources”, em qualquer local, terá todo seu conteúdo
●
incluído no jogo.
Cuidado para não deixar lixo nessa pasta aumentará o tamanho do jogo desnecessariamente.
●
O ideal é que todo asset seja referenciado no editor (inspector), de forma que o
●
Unity sabe quais carregar e quais ignorar por não serem utilizado em nenhum
●
lugar.
●
Carga de prefabs, texturas, text assets, áudio clips
Resources.Load(“nome do asset”) “nome do asset” é o nome do arquivo dentro de alguma pasta
●
Resources.
“nome do asset” não leva extensão e pode conter pastas (referenciando subpastas presentes na
●
pasta Resources). Caminhos são separados com a barra direita “/”.
Exemplos:
Renderer.material.mainTexture = Resources.Load("madeira") as Texture;
●
GameObject obj = Resources.Load("carro") as GameObject;
●
TextAsset myJson = Resources.LoaCargad("tabela") as TextAsset;
●
“tabela” deve ter extensão txt, html, htm, xml, json, csv, bytes, yaml, fnt
●
Acessar o texto do asset assim: string s = myJson.text;
Controle sobre a execução de scripts
Ordem de execução de Scripts específicos
●
Métodos de frame (Update, LateUpdate, FixedUpdate)
●
Configurações de time scale e fixed time step
● Time scale ● Time.TimeScale. ● Câmera lenta. ●
Zero não para a execução de update ou outros métodos.
●
Fixedupdate para de executar.
●
Implicações de mexer no fixed time step
●
Passo da física
●
Raycast, layers e tags
Layers e tags, acesso via código
● Rotinas de cast ● Raycast ● Spherecast ● Linecast ● Debuger ● Debug.DrawRay ● Debug.DrawLine ● GUI Avançada Inteligência artificial Navmesh ● Programação de bots ● Exercícios ● Animação no Unity
Recapitulação do Animator essencial (estados, parâmetros)
●
Blend Trees
●
Criação de clips de animação: timeline, janela Animation
●
Rotinas e eventos na timeline
● Corotinas ● Exercícios ● Lightmaps
Conceito de de lightmap, exemplos
●
Janela lightmap (completo)
●
Troca dinâmica de lightmap via programação
●
Exercício: experiência com lightmaps (gerar cenas diurnas, noturnas, experimentar com as opções).
●
State Machine Behavior
●
Salvar dados com PlayerPrefs
Sistemas de partículas
●
Shuriken (completo)
●
Desenvolvimento de projeto completo, com GD e assets do curso
●
Distribuição do jogo geração de instalador
Geração de instalador com In no Setup
●
Exercício: publicar e gerar instalador, teste do instalador dos colegas