Menu
CoddyTech

CharacterController.Move

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

CharacterController adalah komponen Unity untuk karakter yang berjalan: kapsul yang hanya bergerak saat skripmu memanggil controller.Move(motion). motion adalah jarak yang harus ditempuh pada frame ini, jadi nilainya adalah kecepatan dikalikan Time.deltaTime. Move menggeser kapsul di sepanjang dinding, bukan menembusnya, menaiki lereng dengan sudut hingga Slope Limit (45 derajat), dan melangkah ke tepian setinggi Step Offset (0.3 unit). Komponen ini bukan Rigidbody: tidak ada gaya, gravitasi, pantulan, atau apa pun yang mendorongnya. Kapsul bergerak persis ke tempat yang dituju Move, sesuai kebutuhan kontrol game yang presisi.

Gravitasi dan pencarian lantai perlu kamu tambahkan sendiri. isGrounded bernilai true saat Move terakhir menyentuh sesuatu di bawahnya, jadi gerakan tanpa komponen ke bawah tidak akan menemukan lantai. Move yang lebih pendek daripada Min Move Distance milik controller (0.001) tidak melakukan apa pun, jadi controller yang hanya bergerak ke samping akan melaporkan bahwa karakternya tidak menyentuh tanah begitu berhenti. Kurir ini berjalan menggunakan tombol panah dan menekan sedikit ke bawah pada setiap gerakan:

public class Courier : MonoBehaviour
{
    public float speed = 6f;
    CharacterController controller;

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

    void Update()
    {
        Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
        move.y = -2f;   // selalu tekan ke bawah agar lantai terdeteksi
        controller.Move(move * Time.deltaTime);
        if (!controller.isGrounded)
        {
            Debug.Log("Off the ground");
        }
    }
}

Kapsul menjaga jarak Skin Width (0.08) dari benda yang disentuhnya, jadi controller setinggi 2 unit di atas lantai pada y = 0 akan berada pada y = 1.08, bukan 1. Move memulai gerakan dari posisi tempat fisika terakhir kali mendeteksi controller, jadi posisi transform.position yang ditetapkan pada controller dapat dibatalkan oleh Move berikutnya. Untuk memindahkannya secara instan, tetapkan controller.enabled = false, pindahkan posisinya, lalu aktifkan kembali.

challenge icon

Tantangan

Sedang

Penjelajah berdiri di atas platform batu dengan dinding di belakang dan jurang di sebelah kiri. Tulis Explorer.cs pada Player, yang memiliki CharacterController. Inspector mengatur speed (4) dan fallSpeed (3), dan Start() sudah mencari controller dan Renderer penjelajah.

  • Gunakan tombol panah (atau WASD), yang dibaca dengan sumbu mentah, untuk menggerakkannya dengan controller.Move pada kecepatan speed unit per detik: ke kiri dan kanan sepanjang x, ke atas dan bawah sepanjang z. Dinding harus menghentikannya.
  • Setiap gerakan juga turun dengan kecepatan fallSpeed unit per detik, sehingga penjelajah tetap berada di platform dan jatuh dari tepinya.
  • Saat controller menyentuh tanah, penjelajah berwarna Color.green; saat tidak, Color.red.

Tekan Play, berjalanlah hingga menabrak dinding dan jatuh dari tepi, lalu tekan Check.

Coba sendiri

using UnityEngine;

public class Explorer : MonoBehaviour
{
    public float speed = 4f;
    public float fallSpeed = 3f;

    CharacterController controller;
    Renderer rend;

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

    void Update()
    {
        // Gerakkan penjelajah dengan controller.Move, lalu warnai berdasarkan isGrounded
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Membangun Game Sungguhan