Menu
CoddyTech

Berpindah Jalur dengan Mulus

Pelajaran 2 dari 20 dalam kursus Game Unity: Sky Lanes di Coddy.

Runner melompat dari jalur ke jalur dalam satu frame. Ini berfungsi, tetapi terlihat seperti berpindah secara ajaib. Perpindahan jalur seharusnya memerlukan waktu agar mata bisa mengikutinya.

Mathf.MoveTowards(current, target, maxStep) menggerakkan angka menuju target paling jauh sebesar maxStep, dan tidak pernah melewatinya. Jika dipanggil setiap frame dengan langkah sebesar kecepatan dikali Time.deltaTime, angka itu bergerak dengan kecepatan tersebut dalam satuan per detik, berapa pun frame rate-nya:

float x = Mathf.MoveTowards(transform.position.x, targetX, laneSpeed * Time.deltaTime);

Dengan laneSpeed bernilai 16, perpindahan jalur sejauh 2.5 satuan memerlukan waktu sekitar 0.16 detik: cepat, tetapi kamu bisa melihatnya.

challenge icon

Tantangan

Mudah
  1. Tambahkan public float laneSpeed = 16f; di bawah laneWidth.
  2. Ganti float x = targetX; dengan baris Mathf.MoveTowards di atas.
  3. Tekan tombol “Main” dan berpindahlah antarjalur.

Coba sendiri

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;

    public int lane;

    private CharacterController controller;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) lane = Mathf.Max(-1, lane - 1);
        if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) lane = Mathf.Min(1, lane + 1);

        float targetX = lane * laneWidth;
        float x = targetX;
        Vector3 move = new Vector3(x - transform.position.x, 0f, 0f);
        controller.Move(move);
    }
}

Semua pelajaran di Game Unity: Sky Lanes

Latihan sendiri: Playground Unity