Menu
CoddyTech

Bir Noktaya Doğru Hareket Et

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

Vector3.MoveTowards(current, target, maxStep), target'a en fazla maxStep kadar yaklaşan bir nokta döndürür. Hedef bundan daha yakınsa doğrudan hedefin kendisini döndürür; bu nedenle hedefi asla aşmaz. Adım olarak speed * Time.deltaTime kullanıldığında nesne sabit hızla hareket eder ve tam hedefin üzerinde durur. Bu teleferik, saniyede 2 birim hızla istasyonuna süzülür:

public Vector3 station = new Vector3(6, 3, 0);
public float speed = 2f;

void Update()
{
    transform.position = Vector3.MoveTowards(transform.position, station, speed * Time.deltaTime);
}

Nesne istasyona ulaştığında, sonraki her çağrı yeniden station döndürür; böylece teleferik yerinde kalır ve transform.position == station ifadesi doğrudur. Tek bir sayı için Mathf.MoveTowards aynı şekilde çalışır.

Vector3.Lerp(a, b, t), a'dan b'ye giden yolun t oranındaki noktadır: t = 0.5 olduğunda tam ortadadır. Update() içinde Lerp(transform.position, station, 2f * Time.deltaTime) şeklinde yazıldığında, her karede kalan mesafenin bir kısmını kat eder: başlangıçta hızlı, sona yaklaştıkça giderek yavaş hareket eder ve sabit bir hızla varmak yerine hedefe doğru ağır ağır yaklaşır. Bir nesnenin sabit hızla hareket etmesi ve tam hedefte durması gerekiyorsa MoveTowards kullan; yumuşak bir yavaşlama için bu Lerp kalıbını kullan.

challenge icon

Görev

Orta

Boşluk tuşuna basıldığında drone'u iniş pistine uçur.

  1. bool flying; ve bool landed; alanlarını ekle. Input.GetKeyDown(KeyCode.Space) olduğunda flying = true; değerini ata.
  2. flying && !landed koşulu sağlandığı sürece Vector3.MoveTowards(transform.position, pad, speed * Time.deltaTime) ile hareket et.
  3. transform.position == pad olduğunda landed değerini ata ve Landed mesajını günlüğe yazdır.

“Oyna” düğmesine bas, ardından Boşluk tuşuna bas: drone piste iner. Ardından “Kontrol et”.

Kendin dene

using UnityEngine;

public class Drone : MonoBehaviour
{
    public Vector3 pad = new Vector3(0, 0.25f, 0);
    public float speed = 2f;

    void Update()
    {
        // Space'e basıldıktan sonra: speed hızıyla pad'e uç ve varışta Landed mesajını bir kez günlüğe kaydet
    }
}

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

Kendi başına pratik yap: Unity playground