Menu
CoddyTech

Bergerak ke Arah Pandanganmu

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

Saat kamera melihat pemain dari suatu sudut, tombol panah seharusnya menggerakkan pemain sesuai tampilan layar: tombol atas membuat pemain berjalan menjauh dari kamera, tombol kanan membuat pemain berjalan ke arah kanan kamera. Sumbu dunia hanya menghasilkan gerakan seperti itu saat kamera melihat sepanjang +z. Jadi, susun gerakan dari arah kamera sendiri, cam.forward dan cam.right.

Arah tersebut perlu dibersihkan terlebih dahulu. Kamera yang melihat ke bawah ke arah pemain memiliki forward yang mengarah ke tanah, jadi atur y-nya ke 0 agar hanya bagian yang sejajar dengan tanah yang tersisa. Arah yang tersisa lebih pendek dari 1, sekitar 0.87 untuk kamera yang dimiringkan ke bawah 30 derajat, sehingga pemain akan berjalan lebih lambat. Jadi, normalkan arah tersebut. Pengendali gerak ini mengikuti kamera utama, yang melihat ke arah sudut level:

Transform cam = Camera.main.transform;

Vector3 forward = cam.forward;
forward.y = 0f;
forward.Normalize();
Vector3 right = cam.right;
right.y = 0f;
right.Normalize();

Vector3 move = forward * Input.GetAxisRaw("Vertical") + right * Input.GetAxisRaw("Horizontal");
if (move.magnitude > 1f) move.Normalize();   // gerakan diagonal tidak lebih cepat
controller.Move(move * speed * Time.deltaTime);

Camera.main adalah kamera yang diberi tag MainCamera. Kedua arah dibaca setiap frame, sehingga kontrol tetap tepat saat kamera berputar. Menekan tombol atas dan kanan secara bersamaan menjumlahkan dua vektor satuan yang saling tegak lurus, sehingga panjangnya sekitar 1.41. Karena itu, gerakan dinormalkan saat panjangnya lebih dari 1.

challenge icon

Tantangan

Sedang

Kamera perlahan mengitari pemain (CameraRig.cs, siap), sehingga sumbu dunia terus berputar di layar. Buat tombol panah menggerakkan pemain relatif terhadap kamera di Mover.cs, tempat gravitasi sudah ditulis. Inspector mengatur speed (4) dan cam, Transform kamera.

  • Tombol atas menggerakkan pemain menjauhi kamera di sepanjang permukaan tanah, tombol bawah mendekat ke kamera, dan tombol kanan serta kiri ke arah kanan dan kiri kamera: sejauh speed unit per detik ke setiap arah, termasuk diagonal, meskipun kamera menghadap ke bawah ke arah pemain.
  • Saat berjalan, pemain berputar menghadap ke arah geraknya. Saat berhenti, pemain tetap menghadap ke arah tersebut.

Tekan Play, berjalanlah sambil kamera berputar, lalu tekan Periksa.

Coba sendiri

using UnityEngine;

public class Mover : MonoBehaviour
{
    public float speed = 4f;
    public float gravity = -15f;
    public Transform cam;

    CharacterController controller;
    float verticalSpeed;

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

    void Update()
    {
        if (controller.isGrounded && verticalSpeed < 0f)
        {
            verticalSpeed = -2f;
        }
        verticalSpeed += gravity * Time.deltaTime;

        // Bergerak mengikuti sumbu dunia: buat karakter bergerak relatif terhadap cam dan menghadap ke arah geraknya
        Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
        move.y = verticalSpeed;
        controller.Move(move * Time.deltaTime);
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Membangun Game Sungguhan