Menu
CoddyTech

Distância entre objetos

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

Vector3.Distance(a, b) é a distância entre dois pontos, em unidades, medida em linha reta pelos três eixos. É o comprimento do passo entre eles, (a - b).magnitude, então a ordem de a e b não importa. De (0, 0, 0) até (3, 0, 4), a distância é 5.

Compare uma distância com um número e um script saberá quando algo está perto. Este campista só consegue aquecer as mãos a até 4 unidades da fogueira, cuja posição é definida pelo Inspector:

public Vector3 campfire = new Vector3(3, 0, 4);

void Update()
{
    float d = Vector3.Distance(transform.position, campfire);
    if (d < 4f && Input.GetKeyDown(KeyCode.Space))
    {
        Debug.Log("You warm your hands");
    }
}

A distância também conta a altura: um campista 5 unidades acima da fogueira está a 5 unidades dela, não a 0. Quando a altura não deve contar, compare dois pontos com o mesmo y.

challenge icon

Desafio

Fácil

Reduza a velocidade do personagem pela metade no pântano.

  1. Abaixo de float s = speed;, escreva if (Vector3.Distance(transform.position, swamp) < 3f).
  2. Dentro dele, defina s = speed / 2;. Deixe o campo speed e as linhas de movimento como estão.

Pressione “Jogar” e caminhe direto pelo pântano: o personagem desacelera nele. Depois, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

public class Walker : MonoBehaviour
{
    public float speed = 4f;
    public Vector3 swamp = new Vector3(0, 0.5f, 0);

    void Update()
    {
        float s = speed;
        // A até 3 unidades do pântano, mova-se à metade da velocidade.

        Vector3 direction = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
        transform.position += direction.normalized * s * Time.deltaTime;
    }
}

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

Pratique por conta própria: Playground de Unity