Aula7 velocidade

10
Projetos RAD : Unity 3D Velocidade, aceleração e fricção Augusto Bülow

Transcript of Aula7 velocidade

Page 1: Aula7 velocidade

Projetos RAD : Unity 3DVelocidade, aceleração e fricção

Augusto Bülow

Page 2: Aula7 velocidade

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

Page 3: Aula7 velocidade

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)

Page 4: Aula7 velocidade

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));}

Page 5: Aula7 velocidade

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;

}}

Page 6: Aula7 velocidade

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

Page 7: Aula7 velocidade

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));

Page 8: Aula7 velocidade

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

Page 9: Aula7 velocidade

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);

Page 10: Aula7 velocidade

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