Projeto de jogos RAD: 
Animações – Parte 2 
Modelos Animados 
Augusto Bülow
Unity3D 
• Modelos Animados: 
• Produzidos em softwares de criação 3D 
• Animações: Mocap e outras técnicas 
• Formatos (programas) 
• Maya, Max, Blender, Cinema4D, Lightwave... 
• Formatos .FBX, .OBJ, .3DS, .DXF 
• FBX – bom formato (exportação / 
importação)
Unity3D 
• Formatos comuns, não necessitam 
software adicional 
• FBX, OBJ, 3DS... 
• Formatos específicos, necessitam 
programas adicionais no sistema 
• MAX, MAYA...
Unity3D 
• Animações exportadas junto ao modelo 
• Animações: Arquivo único 
• Split: define-se quadros para cada animação 
• Saber o plano de animações: definir quadros 
• Animações: Arquivos separados 
• EX: nomemodelo@nomeanima.FBX 
• Importa-se todos arquivos 
• Junção – uso - automático
Unity3D 
• Incluir modelo = Import New Asset 
• Arquivo principal modelo 
• Animações arquivos separados 
(nome@anima)
Unity3D 
• Modelo tem constituição variada 
• Número de meshes, partes, bones, etc 
• Depende do artista que o fez 
• Tamanho controlável na importação 
• Propriedades do modelo 
• FBX Importer 
• Scale Factor
Unity3D
Unity3D 
• Importando textura do modelo 
• Importar BMAP 
• Material criado automaticamente * 
• Re-atribuir BMAP para o material
Unity3D 
• Importar animações 
• Arquivos adicionais 
• Mesma Escala (fator)* 
• Animações disponíveis 
no modelo (cena) 
• Atribuição animas = 
automático (mesmo 
nome@anima) 
• Anima selecionável: 
testar
Unity3D 
• Animações disponíveis, como usar? 
• Criar: 
• Scripts ativando animações na hora certa 
• Criar regras para animações básicas 
• Com velocidade = andando 
• Sem velocidade = parado (idle) 
• Comandos – iniciam animações 
• Botão pulo = pular 
• Eventos 
• Atingido = anima / morre 
• Etc
Unity3D 
• Usando Modelo como player 
• Atribuir tipo de colisão 
• (Rigidbody ou CharacterController) 
• Criar códigos para movimento (script) 
• EX: Player com CharacterController 
• Inserir CharacterController no modelo 
• Criar script básico de controle do movimento
Unity3D 
• Código base – move (CharacterController) 
var forca_move : Vector3; 
var forca_rota : Vector3; 
var velocidade = 20.0; 
var gravidade = 0.5; 
function Update () { 
forca_move.x = Input.GetAxis("Horizontal") * Time.deltaTime * velocidade; 
forca_move.y -= gravidade * Time.deltaTime; 
forca_move.z = Input.GetAxis("Vertical") * Time.deltaTime * velocidade; 
forca_move = transform.TransformDirection(forca_move); 
pointer = GetComponent(CharacterController); 
pointer.Move(forca_move); 
forca_rota.y = Input.GetAxis("Mouse X") * 2; 
transform.Rotate(forca_rota); 
}
Unity3D 
• Animações, definir regras básicas 
• Movimento = velocidade = anima anda 
//ANIMACAO 
if (Mathf.Abs(forca_move.z) > 0) { 
//animation.CrossFade("walk"); 
animation.Play("walk"); 
} 
else { 
//animation.CrossFade("idle"); 
animation.Play("idle"); 
}
Unity3D 
• Animações por comandos específicos 
• Pulo = anima pular 
var no_chao : boolean; 
if (Input.GetKeyDown("space") && (no_chao)) { 
forca_move.y = forca_pulo; 
animation.CrossFade("jump"); 
} 
pointer.Move(forca_move); 
no_chao = pointer.isGrounded; // APÓS O MOVE
Unity3D 
• Necessário criar / aprimorar regras 
• Se pulando não entra na regra de animação por 
velocidade 
• Como fazer? Variáveis. EX: var pulando 
• Só acessa regra velocidade senão pulando 
• Algumas animações tem que ser protegidas, 
priorizadas 
• Alguns casos, travando inclusive controles 
adicionais do player
Unity3D 
if (Input.GetKeyDown("space") && (no_chao)) { 
forca_move.y = forca_pulo; 
animation.CrossFade("jump"); 
pulando = 1; 
} 
... 
if (no_chao && pulando == 1) { 
pulando = 0; 
}
Unity3D 
• Sincronizar momento da animação com ação 
• Atirar no momento certo da animação 
• Pular no momento certo da animação 
• Vários modos de fazê-lo 
• Evento vinculado na animação* 
• Checar tempo atual da animação e disparar código 
if ((animation["jump"].time >= 0.2 ) && (pulando == 1)) { 
forca_move.y = forca_pulo; 
pulando = 2; 
}
Unity3D 
• Segurando uma animação (pulo = no ar) 
• Possível usar animações separadas para os estágios: 
• pular, no ar, volta chão 
• Possível codificar para manter animação em um ponto: 
if (pulando == 2 && animation["jump"].time >= 0.6 ) 
animation["jump"].time = 0.6; 
if (no_chao && pulando >= 2) { 
if (animation["jump"].time < 0.9) { pulando = 3; } 
else { pulando = 0; } 
}

Aula anima-modelos

  • 1.
    Projeto de jogosRAD: Animações – Parte 2 Modelos Animados Augusto Bülow
  • 2.
    Unity3D • ModelosAnimados: • Produzidos em softwares de criação 3D • Animações: Mocap e outras técnicas • Formatos (programas) • Maya, Max, Blender, Cinema4D, Lightwave... • Formatos .FBX, .OBJ, .3DS, .DXF • FBX – bom formato (exportação / importação)
  • 3.
    Unity3D • Formatoscomuns, não necessitam software adicional • FBX, OBJ, 3DS... • Formatos específicos, necessitam programas adicionais no sistema • MAX, MAYA...
  • 4.
    Unity3D • Animaçõesexportadas junto ao modelo • Animações: Arquivo único • Split: define-se quadros para cada animação • Saber o plano de animações: definir quadros • Animações: Arquivos separados • EX: nomemodelo@nomeanima.FBX • Importa-se todos arquivos • Junção – uso - automático
  • 5.
    Unity3D • Incluirmodelo = Import New Asset • Arquivo principal modelo • Animações arquivos separados (nome@anima)
  • 6.
    Unity3D • Modelotem constituição variada • Número de meshes, partes, bones, etc • Depende do artista que o fez • Tamanho controlável na importação • Propriedades do modelo • FBX Importer • Scale Factor
  • 7.
  • 8.
    Unity3D • Importandotextura do modelo • Importar BMAP • Material criado automaticamente * • Re-atribuir BMAP para o material
  • 9.
    Unity3D • Importaranimações • Arquivos adicionais • Mesma Escala (fator)* • Animações disponíveis no modelo (cena) • Atribuição animas = automático (mesmo nome@anima) • Anima selecionável: testar
  • 10.
    Unity3D • Animaçõesdisponíveis, como usar? • Criar: • Scripts ativando animações na hora certa • Criar regras para animações básicas • Com velocidade = andando • Sem velocidade = parado (idle) • Comandos – iniciam animações • Botão pulo = pular • Eventos • Atingido = anima / morre • Etc
  • 11.
    Unity3D • UsandoModelo como player • Atribuir tipo de colisão • (Rigidbody ou CharacterController) • Criar códigos para movimento (script) • EX: Player com CharacterController • Inserir CharacterController no modelo • Criar script básico de controle do movimento
  • 12.
    Unity3D • Códigobase – move (CharacterController) var forca_move : Vector3; var forca_rota : Vector3; var velocidade = 20.0; var gravidade = 0.5; function Update () { forca_move.x = Input.GetAxis("Horizontal") * Time.deltaTime * velocidade; forca_move.y -= gravidade * Time.deltaTime; forca_move.z = Input.GetAxis("Vertical") * Time.deltaTime * velocidade; forca_move = transform.TransformDirection(forca_move); pointer = GetComponent(CharacterController); pointer.Move(forca_move); forca_rota.y = Input.GetAxis("Mouse X") * 2; transform.Rotate(forca_rota); }
  • 13.
    Unity3D • Animações,definir regras básicas • Movimento = velocidade = anima anda //ANIMACAO if (Mathf.Abs(forca_move.z) > 0) { //animation.CrossFade("walk"); animation.Play("walk"); } else { //animation.CrossFade("idle"); animation.Play("idle"); }
  • 14.
    Unity3D • Animaçõespor comandos específicos • Pulo = anima pular var no_chao : boolean; if (Input.GetKeyDown("space") && (no_chao)) { forca_move.y = forca_pulo; animation.CrossFade("jump"); } pointer.Move(forca_move); no_chao = pointer.isGrounded; // APÓS O MOVE
  • 15.
    Unity3D • Necessáriocriar / aprimorar regras • Se pulando não entra na regra de animação por velocidade • Como fazer? Variáveis. EX: var pulando • Só acessa regra velocidade senão pulando • Algumas animações tem que ser protegidas, priorizadas • Alguns casos, travando inclusive controles adicionais do player
  • 16.
    Unity3D if (Input.GetKeyDown("space")&& (no_chao)) { forca_move.y = forca_pulo; animation.CrossFade("jump"); pulando = 1; } ... if (no_chao && pulando == 1) { pulando = 0; }
  • 17.
    Unity3D • Sincronizarmomento da animação com ação • Atirar no momento certo da animação • Pular no momento certo da animação • Vários modos de fazê-lo • Evento vinculado na animação* • Checar tempo atual da animação e disparar código if ((animation["jump"].time >= 0.2 ) && (pulando == 1)) { forca_move.y = forca_pulo; pulando = 2; }
  • 18.
    Unity3D • Segurandouma animação (pulo = no ar) • Possível usar animações separadas para os estágios: • pular, no ar, volta chão • Possível codificar para manter animação em um ponto: if (pulando == 2 && animation["jump"].time >= 0.6 ) animation["jump"].time = 0.6; if (no_chao && pulando >= 2) { if (animation["jump"].time < 0.9) { pulando = 3; } else { pulando = 0; } }