Menu
CoddyTech

Velocidade diagonal

Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 27 de 85.

Mantenha pressionadas as setas para a direita e para cima ao mesmo tempo, e os eixos brutos fornecem a direção (1, 0, 1). Seu comprimento, .magnitude, é a raiz quadrada de 1 + 1, cerca de 1.41. Um caminhante que se move com esse vetor percorre 1.41 unidades na diagonal no mesmo tempo em que percorre 1 unidade em linha reta: 41% mais rápido.

.normalized fornece uma cópia de um vetor que aponta na mesma direção e tem exatamente 1 unidade de comprimento: (1, 0, 1) se torna aproximadamente (0.71, 0, 0.71), e (0, 0, 5) se torna (0, 0, 1). Multiplicado por uma velocidade, ele se move nessa velocidade em qualquer direção. Esta abelha voa em direção à flor a 2 unidades por segundo, esteja a flor longe ou perto; sem .normalized, ela voaria mais rápido quanto mais longe a flor estivesse:

public Vector3 flower = new Vector3(4, 1, 3);
public float speed = 2f;

void Update()
{
    Vector3 toFlower = flower - transform.position;
    transform.position += toFlower.normalized * speed * Time.deltaTime;
}

Vector3.zero.normalized permanece (0, 0, 0), pois zero não tem direção. v.normalized deixa v como estava; v.Normalize() altera o próprio v.

challenge icon

Desafio

Fácil

Faça o personagem se mover na diagonal na mesma velocidade.

  1. Em Update(), crie Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));.
  2. Adicione direction.normalized * speed * Time.deltaTime a transform.position.

Pressione “Jogar” e mantenha duas setas pressionadas: o personagem se move na diagonal sem ficar mais rápido do que em linha reta. Depois, clique em “Verificar”.

Experimente você mesmo

using UnityEngine;

public class Walker : MonoBehaviour
{
    public float speed = 4f;

    void Update()
    {
        // Setas ou WASD: mova-se ao longo de x e z na velocidade speed, mantendo a mesma velocidade nas diagonais.
    }
}

Todas as lições de Fundamentos de Scripting no Unity

Pratique por conta própria: Playground de Unity