Desenvolvimento de Jogos Mobile com Unity Raphael Marques Unity 3D • Game Engine completa e intuitiva • Ecossistema completo – Ferramenta – Forum – Tutoriais – Loja de assets • Multiplataforma • 100% Gratuita!!! (Versão Personal) – Versão Professional tem adição de outros serviços Funcionamento do Minicurso • Demonstração do Unity (para jogos 2D) • Alguns conceitos do Unity • Jogo Space Shooter • Jogo de Plataforma MUITA ATENÇÃO QUANDO FOR UM PASSO-A-PASSO!!! Elementos básicos do Unity • Asset – qualquer arquivo do seu projeto • Scene (cena) – arquivo de cada fase do seu jogo • GameObject – cada elemento da cena • Component – cada parte de um GameObject Interface do Unity • Dividida em abas ajustáveis: – Project: arquivos (assets) do projeto – Hierarchy: objetos da cena – Inspector: atributos dos objetos – Scene: edição visual da cena – Game: visual do jogo rodando – Console: debug Programação Orientada a Objetos Carro Personagem - posição : (x,y,z) - rotação: (x,y,z) - peso : float - velocidade : float - aceleração : float + acelerar() + frear() + ligar() + desligar() + virar() - posição : (x,y,z) - rotação: (x,y,z) - velocidade : float - força : float - vidas : int + andar() + pular() Checkpoint - posição : (x,y,z) - rotação: (x,y,z) - salvar() Parede - posição : (x,y,z) - rotação: (x,y,z) - largura : float - altura : float Programação Orientada a Componentes Carro Personagem Checkpoint Parede GameObject GameObject GameObject GameObject Componente Componente Componente Componente Componente Componente Componente Componente Componente Programação Orientada a Componentes Carro Personagem Checkpoint Parede GameObject GameObject GameObject GameObject Transform Transform Transform Transform Collider Collider Collider Collider Renderer Renderer SalvarJogo Renderer Andar Andar Checkpoint Rigidbody Rigidbody Teclado Pular Carro Teclado Personagem Principais componentes • • • • • • • • • Transform: posição, rotação e escala Renderer: desenha um modelo ou imagem na tela Collider: forma física do objeto pra detecção de colisão Rigidbody: objeto físico com massa, velocidade, etc... Camera: controla o que é visto da cena AudioSource: emite som Canvas: desenha elementos de interface Animator: controla animações Scripts: lógica específica: Andar, Pular, Checkpoint, etc... Scripts (C#) Coisa GameObject public class MeuScript : MonoBehaviour { Transform public int x; Rigidbody2D public Transform t; MeuScript int y; void Start(){ Rigidbody2D rb = GetComponent<Rigidbody2D>(); rb.velocity = new Vector3(0, 10, 0); } void Update(){ if( Input.GetKeyDown(KeyCode.X) ) t.gameObject.SetActive(false); } } Demonstração Tipos de detecção de colisão • Algum Rigidbody2D envolvido • Trigger (algum trigger envolvido) – OnTriggerEnter2D(Collider2D col) – OnTriggerStay2D(Collider2D col) – OnTriggerExit2D(Collider2D col) Enter • Collision (quando há efeito físico) – OnCollisionEnter2D(Collision2D col) – OnCollisionStay2D(Collision2D col) – OnCollisionExit2D(Collision2D col) • Mover diretamente o Transform pode atrapalhar a detecção de colisão! Stay Stay Exit Elementos de um jogo • • • • • • Visual (SpriteRenderer) Organização (Hierarquia de objetos) Estáticos (Collider) Detectores (Trigger) Móveis (Collider + Rigidbody) Detectores Móveis (Trigger + Rigidbody) Problema • Essa demonstração é apenas uma forma de se trabalhar no Unity. • Pode ficar muito complexa, e não se utiliza bem a orientação a componentes. • Orientação a Componentes foca na REUTILIZAÇÃO!!! • Então vamos usar SCRIPTS REUTILIZÁVEIS! Alguns Scripts... • Mover: – altera a velocidade de um Rigidbody2D • Creator: – cria cópias de um objeto • RandomPos: – posiciona aleatoriamente entre duas posições • ScriptActions: – métodos úteis de qualquer objeto • FollowTarget: – segue outro objeto Alguns Scripts... • TimerTrigger: – lança eventos de tempos em tempos • GenericTrigger: – lança eventos quando um evento MonoBehaviour ocorre (Start, Update, OnTriggerEnter2D, etc) • KeyboardTrigger: – lança eventos quando uma tecla é utilizada • AxisTrigger: – lança eventos com o valor do eixo Horizontal e Vertical do input Exemplo: FollowTarget public class FollowTarget : MonoBehaviour { public Transform target; void LateUpdate () { Vector3 pos = this.transform.position; pos.x = target.position.x; pos.y = target.position.y; this.transform.position = pos; } } Exemplo: Creator public class Creator : MonoBehaviour { public GameObject prefab; public bool useRotation; public void Create(){ if(useRotation){ Instantiate(prefab, this.transform.position, this.transform.rotation); }else{ Instantiate(prefab, this.transform.position, Quaternion.identity); } } } Primeiro Jogo: Space Shooter 123 Primeiro Jogo: Space Shooter • Requisitos: – Nave que se movimenta e atira pra cima – Inimigos se movem e atiram para baixo – Inimigos são criados no topo da tela – Se um tiro do Inimigo atingir a Nave, perdeu! – Se um tiro da Nave atingir o Inimigo, destrói o Inimigo e ganha ponto Primeiro Jogo: Space Shooter • Sprites: Primeiro Jogo: Space Shooter • Criem um novo projeto 2D • Ajustem o Layout para “Default” • Com o projeto aberto, abram esse arquivo: bit.ly/1cxQmj9 • Salve a cena vazia atual como “Nave” Vamos ao Unity... Segundo Jogo: Plataforma Segundo Jogo: Plataforma • Requisitos: – Personagem andando pulando – Animações – Plataformas fixas no cenário – Espinhos que tiram vida – Forma fácil de montar cenário! Segundo Jogo: Plataforma Vamos ao Unity... Links • Gerador de Som – www.bfxr.net/ • Gerador de Música – www.earslap.com/page/otomata.html • Sprites – kenney.nl/assets • Contato – about.me/raphaelmarques