Aula anima-modelos
Click here to load reader
-
Upload
marcos-batista -
Category
Education
-
view
114 -
download
0
description
Transcript of Aula anima-modelos
Projeto de jogos RAD:Animações – Parte 2Modelos 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: [email protected]
• 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 pularvar 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; }
}