Projetos RAD : Unity 3D 
Velocidade, 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 atual 
if (Input.GetKey("w") || Input.GetKey(KeyCode.UpArrow)) 
{ velocidade_atual += aceleracao * Time.deltaTime; 
} 
//limita velocidade maxima 
if (velocidade_atual > velocidade_maxima) { 
velocidade_atual = velocidade_maxima; 
} 
//Mover sempre com a velocidade 
var 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 repouso 
if (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

Aula7 velocidade

  • 1.
    Projetos RAD :Unity 3D Velocidade, aceleração e fricção Augusto Bülow
  • 2.
    Unity • Códigobá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
  • 3.
    Unity • Variáveisbá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)
  • 4.
    Unity function Update() { //Input - acelera velocidade atual if (Input.GetKey("w") || Input.GetKey(KeyCode.UpArrow)) { velocidade_atual += aceleracao * Time.deltaTime; } //limita velocidade maxima if (velocidade_atual > velocidade_maxima) { velocidade_atual = velocidade_maxima; } //Mover sempre com a velocidade var controller = GetComponent(CharacterController); controller.Move(Vector3(0, 0, velocidade_atual)); }
  • 5.
    Unity • Necessidadede 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 repouso if (velocidade_atual > 0) { velocidade_atual -= friccao * Time.deltaTime; //maximo - levar a repouso - evita move contrario if (velocidade_atual < 0) { velocidade_atual = 0; } }
  • 6.
    Unity • Mudançabá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
  • 7.
    Unity • Inserindocontrole 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));
  • 8.
    Unity • Necessidadede transformar a forca de movimento (velocidade) em relação a orientação atual • transform.TransformDirection() • Necessário Vector3 – para transformação – para resultado
  • 9.
    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);
  • 10.
    Unity • Controlandovelocidade 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