Menu
CoddyTech

Nesneler Arasındaki Mesafe

Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 28 / 85.

Vector3.Distance(a, b), iki noktanın üç eksenin tamamı boyunca düz bir çizgi üzerinden ölçülen, birim cinsinden aralarındaki uzaklıktır. Bu, aralarındaki adımın uzunluğudur: (a - b).magnitude; bu nedenle a ve b'nin sırası önemli değildir. (0, 0, 0) noktasından (3, 0, 4) noktasına olan uzaklık 5'tir.

Bir uzaklığı bir sayıyla karşılaştırın; böylece bir betik bir şeyin ne zaman yakın olduğunu bilir. Bu kampçı ellerini yalnızca konumunu Inspector'ın belirlediği kamp ateşinin 4 birim yakınındayken ısıtabilir:

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

Uzaklık yüksekliği de hesaba katar: ateşin 5 birim üzerindeki bir kampçı, ateşten 0 değil, 5 birim uzaktadır. Yüksekliğin hesaba katılmaması gerektiğinde, y değerleri aynı olan iki noktayı karşılaştırın.

challenge icon

Görev

Kolay

Bataklıkta yürüyenin hızını yarıya düşür.

  1. float s = speed; satırının altına if (Vector3.Distance(transform.position, swamp) < 3f) yaz.
  2. Bu bloğun içinde s = speed / 2; olarak ayarla. speed alanını ve hareket satırlarını olduğu gibi bırak.

“Oyna” düğmesine bas ve bataklığın içinden sağa doğru yürü: yürüyen bataklıkta yavaşlar. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

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

    void Update()
    {
        float s = speed;
        // Bataklığa 3 birim mesafe içindeyken yarı hızda hareket et.

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

Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground