Menu
CoddyTech

Input Actions

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

Menguji tombol satu per satu mengikat skrip pada keyboard. Action menamai tindakan pemain, sedangkan proyek mencantumkan tombol keyboard, stik, dan tombol gamepad yang memicunya. Proyek Unity 6 baru dilengkapi dengan sekumpulan action tersebut (aset InputSystem_Actions, yang ditetapkan sebagai action untuk seluruh proyek). Map Player-nya memiliki Move (WASD, tombol panah, dan stik kiri gamepad), Look (mouse atau stik kanan), Attack (tombol kiri mouse dan Enter), Interact (E, ditekan terus), Crouch (C), Jump (Space dan tombol selatan gamepad), Previous dan Next (1 dan 2), serta Sprint (Left Shift). Semuanya aktif sejak awal, dan InputSystem.actions.FindAction("Jump") mengambil salah satunya berdasarkan nama. Derek capit dengan tampilan samping ini bergerak pada sumbu x dan y, lalu mencapit dengan Jump:

using UnityEngine;
using UnityEngine.InputSystem;

public class ClawCrane : MonoBehaviour
{
    public float speed = 3f;

    private InputAction moveAction;
    private InputAction jumpAction;

    void Start()
    {
        moveAction = InputSystem.actions.FindAction("Move");
        jumpAction = InputSystem.actions.FindAction("Jump");
    }

    void Update()
    {
        Vector2 input = moveAction.ReadValue<Vector2>();
        transform.position += new Vector3(input.x, input.y, 0f) * speed * Time.deltaTime;

        if (jumpAction.WasPressedThisFrame())
            Debug.Log("Grab!");
    }
}

Action ditemukan sekali, di Start, lalu disimpan dalam field InputAction. Move memberikan Vector2: x adalah kanan dan kiri, y adalah atas dan bawah pada tombol keyboard, dan nilainya dinormalisasi, sehingga W dan D yang ditekan bersamaan memberikan (0.71, 0.71), bukan (1, 1). Karena derek capit ini menggunakan tampilan samping, nilai y digunakan untuk ketinggian; game dengan tampilan dari atas akan menggunakannya untuk z. Action tombol memberikan respons seperti tombol keyboard: WasPressedThisFrame(), WasReleasedThisFrame(), dan IsPressed(). Ada dua kesalahan yang memicu error: nama yang salah eja membuat FindAction mengembalikan null (NullReferenceException saat pembacaan pertama), dan ReadValue<Vector3>() pada Move memicu InvalidOperationException begitu tombol ditekan, karena Move menggunakan Vector2.

challenge icon

Tantangan

Sedang

Surveyor memetakan hamparan salju dari atas, dan membawa flags (3) untuk ditanam sepanjang perjalanan. Script memiliki speed (4), flags, flagPrefab, dan sebuah list planted. Gunakan aksi proyek:

  • Move menggerakkan surveyor melintasi salju dengan kecepatan speed unit per detik: ke kanan dan kiri sepanjang sumbu x, ke atas dan bawah sepanjang sumbu z.
  • Setiap kali Jump ditekan, satu bendera ditanam: salinan flagPrefab pada koordinat x dan z surveyor, di y 0.75, lalu ditambahkan ke planted. Aksi ini menggunakan satu dari flags dan mencatat jumlah yang tersisa, seperti Flags left: 2. Jika tidak ada bendera tersisa, Jump tidak menanam apa pun.
  • Setiap kali Attack ditekan (klik kiri), bendera yang terakhir ditanam dicabut: bendera itu dihancurkan dan dihapus dari list, flags bertambah satu, dan baris yang sama dicatat.

Tekan Play, tanam tiga bendera dan cabut satu, lalu tekan Check.

Coba sendiri

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class Surveyor : MonoBehaviour
{
    public float speed = 4f;
    public int flags = 3;
    public GameObject flagPrefab;

    private List<GameObject> planted = new List<GameObject>();

    void Start()
    {
        // cari aksi Move, Jump, dan Attack
    }

    void Update()
    {
        // berjalan dengan Move, tancapkan bendera saat Jump, cabut satu bendera saat Attack
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Membangun Game Sungguhan