Menu
CoddyTech

Lintasan

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

Bab ini membangun game platformer 3D. Kamu berlari dan melompat melintasi platform yang melayang, menaiki platform yang meluncur, menyentuh checkpoint agar saat terjatuh kamu tidak kembali ke awal, mengumpulkan permata yang jumlahnya ditampilkan di layar, melewati garis finis menuju level berikutnya, lalu mencoba mengalahkan waktu terbaikmu. Game ini terdiri dari lima skrip yang sudah ada di proyek sejak awal: Player, MovingPlatform, Checkpoint, Gem dan FinishLine. Empat skrip terakhir masih kosong, dan setiap pelajaran akan mengisi satu skrip. Player menggunakan CharacterController yang dikendalikan oleh action Input System, dan kamera menjadi child-nya, sehingga kamera mengikuti tanpa skrip.

CharacterController bergerak dengan dua cara. Move(motion) menggerakkannya sejauh jarak tertentu tanpa menambahkan apa pun, jadi gravitasi, lompatan, dan Time.deltaTime harus ditangani oleh skrip, seperti di bab Character Controller. SimpleMove(speed) menerima kecepatan dalam satuan per detik, mengalikannya sendiri dengan waktu frame, dan menambahkan gravitasi; cara ini mengabaikan nilai y yang kamu berikan, jadi karakter yang digerakkan dengannya akan jatuh dari tepi, tetapi tidak bisa melompat. Anjing gembala dalam game menggiring domba yang dilihat dari atas ini tidak perlu melompat, jadi SimpleMove dan action Move menjadi seluruh isi skripnya:

using UnityEngine;
using UnityEngine.InputSystem;

public class Sheepdog : MonoBehaviour
{
    [SerializeField] private float speed = 6f;
    private CharacterController controller;
    private InputAction moveAction;

    void Start()
    {
        controller = GetComponent<CharacterController>();
        moveAction = InputSystem.actions.FindAction("Move");
    }

    void Update()
    {
        Vector2 input = moveAction.ReadValue<Vector2>();
        controller.SimpleMove(new Vector3(input.x, 0f, input.y) * speed);
    }
}

Player dalam game platformer harus bisa melompat, jadi player menyimpan kecepatan vertikalnya sendiri dan bergerak dengan Move, serta membaca action Move dan Jump alih-alih class Input. Unity menyarankan satu pemanggilan Move atau SimpleMove per frame: gerakan berjalan dan jatuh dilakukan dalam pemanggilan yang sama, lalu isGrounded menggambarkan keseluruhan gerakan tersebut.

challenge icon

Tantangan

Sedang

Mulai permainan platformer dengan player. Skrip Player memiliki speed (5), jumpHeight (1.5) dan gravity (-9.81), controller dan velocity untuk jatuh. Temukan aksi Move dan Jump sekali saja, di Start, lalu di Update:

  • Move menggerakkan player dengan kecepatan speed unit per detik: ke kanan dan kiri sepanjang x, maju dan mundur sepanjang z.
  • Gravitasi menambahkan gravity * Time.deltaTime ke velocity.y setiap frame. Saat controller menyentuh tanah dan velocity.y kurang dari 0, atur velocity.y ke -2 terlebih dahulu agar tetap menekan player ke tanah.
  • Setiap kali Jump ditekan saat player menyentuh tanah, atur velocity.y ke Mathf.Sqrt(jumpHeight * -2f * gravity): lompatan setinggi jumpHeight unit. Menahan Jump hanya membuat player melompat sekali, dan player tidak bisa melompat di udara.
  • Panggil controller.Move sekali, dengan gerakan berjalan dan velocity digabungkan, lalu dikalikan dengan Time.deltaTime.

Tekan Play dan lompatlah ke platform pertama, lalu tekan Check.

Coba sendiri

using UnityEngine;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
    [SerializeField] private float speed = 5f;
    [SerializeField] private float jumpHeight = 1.5f;
    [SerializeField] private float gravity = -9.81f;

    private CharacterController controller;
    private Vector3 velocity;

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

    void Update()
    {
        // bergerak dengan aksi Move, melompat dengan aksi Jump, jatuh karena gravitasi
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Membangun Game Sungguhan