Menu
CoddyTech

Tiga Jalur

Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 27 dari 56.

Bab ini membuat game Endless Runner. Seorang pelari berlari di jalan dengan tiga lajur dan berpindah lajur untuk menghindari rintangan yang mendekatinya. Dalam pelajaran-pelajaran berikutnya, jalan akan semakin cepat, jarak akan ditampilkan di layar, tabrakan akan mengakhiri permainan dengan tombol untuk bermain lagi, dan permainan terbaik akan disimpan. Pelari tidak pernah bergerak maju: posisinya tetap di z = 0 dan rintangan bergerak ke arahnya, sehingga jalan tidak pernah habis. Game ini memiliki empat skrip, Runner, Spawner, Obstacle dan GameManager, dan tiga skrip terakhir masih kosong untuk saat ini.

Pelari yang bergerak di antara lajur tidak dikendalikan seperti mobil: posisinya selalu berada di salah satu dari beberapa tempat. Simpan tempatnya sebagai bilangan bulat, ubah angkanya saat tombol ditekan, lalu hitung posisinya berdasarkan angka tersebut. Platform pembersih jendela ini melayani lima lantai sebuah gedung, dengan jarak 3 unit:

[SerializeField] private float floorHeight = 3f;
[SerializeField] private float moveSpeed = 6f;
private int floor = 0;

void Update()
{
    if (Input.GetKeyDown(KeyCode.UpArrow)) floor++;
    if (Input.GetKeyDown(KeyCode.DownArrow)) floor--;
    floor = Mathf.Clamp(floor, 0, 4);

    Vector3 p = transform.position;
    p.y = Mathf.MoveTowards(p.y, floor * floorHeight, moveSpeed * Time.deltaTime);
    transform.position = p;
}

GetKeyDown membuat satu kali tekan berarti naik satu lantai, sedangkan GetKey akan menambah satu lantai pada setiap frame selama tombol ditahan. Mathf.Clamp menjaga angka tetap dalam rentang lantai gedung, sehingga menekan tombol atas saat berada di lantai teratas tidak melakukan apa pun, dan tekanan tombol bawah berikutnya langsung menuju lantai 3. Mathf.MoveTowards menggeser platform menuju lantainya dengan kecepatan moveSpeed unit per detik dan menghentikannya tepat di sana, alih-alih melompat ke sana dalam satu frame. Posisi tersebut disalin, diubah, lalu ditetapkan kembali, karena transform.position.y tidak dapat diatur sendiri.

challenge icon

Tantangan

Sedang

Mulai Endless Runner dengan runner. Inspector memberikan Runner nilai laneWidth sebesar 2.5 dan laneSpeed sebesar 15, dan lane bernilai -1 untuk jalur kiri, 0 untuk jalur tengah, dan 1 untuk jalur kanan. Di dalam Update() milik Runner:

  • Setiap kali tombol panah kiri atau kanan ditekan, lane berubah satu angka ke arah tersebut. Menahan tombol tetap hanya mengubahnya satu angka.
  • lane tidak pernah kurang dari -1 atau lebih dari 1.
  • Runner meluncur di sepanjang sumbu x menuju lane * laneWidth dengan kecepatan laneSpeed unit per detik, dan mempertahankan nilai y dan z.

Untuk saat ini, biarkan tiga script lainnya seperti semula. Tekan Play, klik game dan ganti jalur, lalu tekan Check.

Coba sendiri

using UnityEngine;

public class Runner : MonoBehaviour
{
    public float laneWidth = 2.5f;
    public float laneSpeed = 15f;
    private int lane = 0;   // -1 adalah lajur kiri, 0 lajur tengah, 1 lajur kanan

    void Update()
    {
        // Pindah lajur dengan tombol panah, lalu geser ke koordinat x lajur tersebut
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Membangun Game Sungguhan