Aula7 velocidade
-
Upload
marcos-batista -
Category
Education
-
view
347 -
download
0
Transcript of Aula7 velocidade
Projetos RAD : Unity 3DVelocidade, aceleração e fricção
Augusto Bülow
Unity
• Código básico de movimento (atual)– Pressiona tecla = move
• Movimentos avançados– Velocidade com maior controle– Aceleração– Fricção– Mantém velocidade ( + transformações)
= Criar variáveis para controle destes aspectos
Unity
• Variáveis básicas:var aceleracao = 0.5;var friccao = 0.2;var velocidade_maxima = 3.0;var velocidade_atual = 0.0;
• Utilizar Float (declarar valor com vírgula)– Habilitar transformações leves / decimais
• Estamos criando física (manualmente)– RigidBody = esquema automático– Pode ser incorporado física manual (junto)
Unity
function Update () {//Input - acelera velocidade atualif (Input.GetKey("w") || Input.GetKey(KeyCode.UpArrow))
{ velocidade_atual += aceleracao * Time.deltaTime;}
//limita velocidade maximaif (velocidade_atual > velocidade_maxima) {
velocidade_atual = velocidade_maxima;}
//Mover sempre com a velocidadevar controller = GetComponent(CharacterController);controller.Move(Vector3(0, 0, velocidade_atual));}
Unity
• Necessidade de Fricção (manual)– Fricção = atrito, diminui a velocidade do corpo
• Fricção = leva a inércia– Restrição a velocidade 0 ( repouso)– Evitar entrar em velocidade inversa
//friccao manual - leva a repousoif (velocidade_atual > 0) {
velocidade_atual -= friccao * Time.deltaTime;//maximo - levar a repouso - evita move contrario if (velocidade_atual < 0) {velocidade_atual = 0;
}}
Unity
• Mudança básica de fricção, aceleração transformamos o movimento do player em um caminhão de toneladas, ou em um carro de fórmula 1
• Atenção: aceleração sempre maior que fricção: – Senão não há movimento
• Testar valores exemplo:– Aceleração 1.5 e Fricção 0.1
Unity
• Inserindo controle básico de rotação pelo mouse
• transform.Rotate(Vector3);
var rotacao = 0.0;
var forca_rotacao = 2;...
//Inserindo rotacao basica com mouse
rotacao = Input.GetAxis("Mouse X") * forca_rotacao; transform.Rotate(Vector3(0, rotacao, 0));
Unity
• Necessidade de transformar a forca de movimento (velocidade) em relação a orientação atual
• transform.TransformDirection()• Necessário Vector3
– para transformação– para resultado
Unity
var velocidade_vetor : Vector3;
....//uso de vetor - transforma em vetor
velocidade_vetor =
transform.TransformDirection(Vector3(0, 0, velocidade_atual));
//Move sempre com a velocidade
var controller = GetComponent(CharacterController);
//controller.Move(Vector3(0, 0, velocidade_atual));
controller.Move(velocidade_vetor);
Unity
• Controlando velocidade pode-se, por exemplo, transformá-la no momento de uma colisão
• Exemplos:– Colidiu = perde parte da velocidade– Colidiu = inverte a velocidade
• Fazer testes básicos colisão / velocidade
• Trabalhando a Física manualmente– física realística = RigidBody