Menu
CoddyTech

Bergerak Menuju Titik

Termasuk bagian Dasar-Dasar Scripting Unity dalam perjalanan Unity di Coddy. Pelajaran 35 dari 85.

Vector3.MoveTowards(current, target, maxStep) mengembalikan titik yang jaraknya hingga maxStep lebih dekat ke target. Jika target lebih dekat dari jarak itu, fungsi ini mengembalikan target itu sendiri, sehingga tidak pernah melewatinya. Dengan speed * Time.deltaTime sebagai langkah, sebuah objek bergerak dengan kecepatan tetap dan berhenti tepat di target. Kereta gantung ini meluncur ke stasiunnya dengan kecepatan 2 unit per detik:

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

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

Setelah tiba, setiap pemanggilan berikutnya mengembalikan station lagi, sehingga kereta tetap diam, dan transform.position == station bernilai true. Untuk satu angka, Mathf.MoveTowards bekerja dengan cara yang sama.

Vector3.Lerp(a, b, t) adalah titik yang berada sejauh pecahan t dari a menuju b: saat t = 0.5, titiknya berada di tengah. Jika ditulis sebagai Lerp(transform.position, station, 2f * Time.deltaTime) di dalam Update(), fungsi ini menempuh sebagian dari jarak yang tersisa pada setiap frame: awalnya cepat, lalu semakin lambat saat mendekati akhir, merayap mendekat alih-alih tiba dengan kecepatan tetap. Gunakan MoveTowards saat objek harus bergerak dengan kecepatan tetap dan berhenti tepat di tujuan; gunakan pola Lerp tersebut untuk perlambatan yang halus.

challenge icon

Tantangan

Sedang

Terbangkan drone ke landasan pendaratannya saat Space ditekan.

  1. Tambahkan field bool flying; dan bool landed;. Saat Input.GetKeyDown(KeyCode.Space), atur flying = true;.
  2. Selama flying && !landed, gerakkan drone dengan Vector3.MoveTowards(transform.position, pad, speed * Time.deltaTime).
  3. Saat transform.position == pad, atur landed dan catat Landed.

Tekan Main, lalu Space: drone mendarat di landasan. Lalu tekan Periksa.

Coba sendiri

using UnityEngine;

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

    void Update()
    {
        // Setelah Space ditekan: terbang ke pad dengan kecepatan speed, lalu catat Landed sekali saat tiba
    }
}

Semua pelajaran di Dasar-Dasar Scripting Unity

Latihan sendiri: Playground Unity