Bruno C. de Paula Tópicos Especiais I: Engines Introdução ao 1º Semestre 2010 > PUCPR > Pós Jogos Resumo Vamos conhecer a engine Unity 3D Focaremos nas principais ferramentas e recursos que o Unity disponibiliza Nas próximas aulas nos preocuparemos com o scripting destes recursos Ou seja: hoje vamos trabalhar com restrições! 04/11/2015 O que é o Unity? Unity é um ambiente multiplataforma de desenvolvimento de jogos; Suporte a: Windows / MacOS / Web / Wii / iPhone. 3 Características do Unity Editor de Níveis Fortemente jogo; 04/11/2015 integrado com a execução do 4 Características do Unity Editor de Níveis Suporte a Drag & Drop e customização; 04/11/2015 5 Características do Unity Editor de Níveis Editor de terrenos e lightmaps; 04/11/2015 6 Características do Unity Gráficos Suporte a Direct3D 9 e OpenGL; 04/11/2015 7 Características do Unity Importação Importação de modelos, texturas, bones e animações de Maya, 3DS, Cheetah 3D, Blender, Wavefront obj... Heightmaps, Fontes, audio. 04/11/2015 8 04/11/2015 9 Características do Unity Shaders Efeitos de Glow, Blur, Noise, etc 04/11/2015 10 Características do Unity Física / PhysX Suporte a corpos rígidos; Junções; Ragdolls; Wheel Collider para jogos de carro; 04/11/2015 11 Características do Unity Scripting Linguagens de Scripting: JavaScript (muuuito rápido!); C# (Mono); Boo (similar a Python). 04/11/2015 12 04/11/2015 Vamos para a prática! 13 04/11/2015 Interface básica 14 04/11/2015 Interface básica Scene View (Cena): editor de níveis; Project View (Projeto): arquivos do projeto; Hierarchy View (Hierarquia): objetos que estão na cena e sua relação; Game View (Jogo): Visualização da aplicação sendo executada; Inspector View (Inspetor): Acesso aos componentes dos objetos; 15 04/11/2015 Navegação na Scene View Principais Atalhos: Q, W, E, R; ALT + mouse; Leitura altamente recomendada: http://unity3d.com/support/documentation /Manual/Learning%20the%20Interface.htm l http://docwiki.unity3d.com/uploads/Main/G UI%20Essentials.pdf 16 Assets Arquivos do Projeto; 04/11/2015 Game Objects Elementos de um jogo; Arquitetura baseada em composição; Objeto de jogo é especificado através da composição de várias funcionalidades (COMPONENTES); Todo game object já nasce com um componente transform; Cada GameObject é um repositório de componentes. 18 04/11/2015 Componente Transform Posicionamento (x, y, z) [W], rotação (ângulo) [E] e escala [R]; 19 04/11/2015 Local Space e World Space X, Y e Z são em relação ao elemento pai; 20 04/11/2015 Game Objects disponíveis 21 Tipos de Game Object Cube, Sphere, Capsule, Cylinder, Plane Cubo, esfera, cápsula, cilíndro e plano; Cada um está associado a um componente Mesh Filter com aspecto diferente; Colide com outros corpos por padrão; Tipos de Game Object Luzes Point light: Luz proveniente de um ponto; Luz com localização específica; Espalha a partir do ponto; Spotlight: Vem de um ponto; Localização específica; Gera cone de luz; Tipos de Game Object Luzes Directional Light: Vem de uma direção; Não tem localização específica; Luz paralela; Mais forte nas áreas quadradas; Mais fraco nas angulações; Sol; Tipos de Game Object Camera Capturam 04/11/2015 e mostram o mundo ao jogador; 25 Tipos de Game Object GUI Text e GUI Texture Texto e Imagens em 2D; Útil para criação da HUD; Tipos de Game Object Particle System Sistema de Partículas, formado por: Emissor, animador e renderizador; 04/11/2015 27 Tipos de Game Object Ragdoll Simulação no estilo “boneco de pano”; Útil para “representação de mortos”; Ver video: http://www.youtu be.com/watch?v= g0lTE4sCyKI * Componentes Podem ser associados a Game Objects; Definem: Comportamento; Aparência; Podem ser scripts; Vamos analisar alguns. Tipos de Componentes Mesh Cada modelo é formado por polígonos; Um conjunto de polígonos associados é uma mesh; Mesh Filter: pega uma malha dos Assets e passa ao renderizador; Mesh Renderer: Renderiza uma malha a partir de um material; Você pode gerar um mesh em programas como 3DMax, Blender, Maya, etc. O Unity trabalha com os formatos FBX, 3DS, OBJ...; Meshs podem ser animadas via script; Exemplo de Mesh (em destaque) Sites com modelos gratuitos O * site do Unity: Recursos Tutoriais: • Jogo de carro, Plataforma 3D, Plataforma 2D, FPS, Animação. Projetos Exemplo: • FPS, Customização de Personagens http://www.turbosquid.com/Search/3D- Models/free/fbx http://www.open3dproject.org/ Tipos de componentes Física Baseado no engine de física PhysX (Nvidia); Rigidbody: Objeto que age sobre o controle da física; Constant Force: força constante; Colliders: Geometrias básicas de colisão; Box, Sphere, Capsule, Mesh, Wheel (roda), Raycast; Joints: Junções; Restrições no grau de liberdade; Tipos de componentes Hinge Joint Simulação de dobradiça; Tipos de componentes Spring Joint Simulação de mola; Distância máxima de separação e retorno à posição original; Tipos de componentes Fixed Joint Conexão entre 2 corpos; Similar à hierarquia de transformação; Útil quando os corpos podem ser desconectados durante a simulação; * Scripts JavaScript, C# e Boo; Criação em Assets > Create; Scripts são associados a Game Objects como componentes; Alguns eventos importantes Update: executada uma vez por frame; FixedUpdate: chamada de tempos em tempos em um intervalo fixo (física); OnCollisionEnter: chamado quando ocorre a colisão; Referências a componentes transform: posicionamento, rotação e escala; rigidbody: corpo rígido; animation: controle dos ciclos de animação;. renderer: exibição do componente em cena; audio: fonte de audio; collider: geometria de colisão; 04/11/2015 A seguir, alguns fragmentos de códigos usando o Unity 40 Exemplo Faz um objeto girar var velocidade = 5.0; function Update () { print("Olá, Mundo"); transform.Rotate(0, velocidade*Time.deltaTime, 0); } Exemplo Move a posição a partir do teclado function Update () { transform.Translate(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); } Exemplo Olha para um alvo var alvo : Transform; function Update () { transform.LookAt(alvo); } Prefabs Prefabs são objetos reutilizáveis armazenados na Project View; Funcionam como modelos de objetos; Exemplo Cria um novo objeto – Instantiate var novoObjeto : Transform; function Update () { if(Input.GetButtonDown("Fire1")) { Instantiate(novoObjeto, transform.position, transform.rotation); } } Exemplo Carrega outro nível Application.LoadLevel("Nome nivel"); Exemplo Envia uma mensagem para um outro objeto // O outro objeto deve possuir uma função chamada // AplicarDano function OnCollisionEnter (collision : Collision) { collision.gameObject.SendMessage("AplicarDano"); } Exemplo Destruir o objeto atual function AplicarDano() { Destroy(gameObject); } 04/11/2015 * 48