Input Actions
Termasuk bagian Membangun Game Sungguhan dalam perjalanan Unity di Coddy. Pelajaran 47 dari 60.
Menguji tombol satu per satu membuat skrip terikat pada keyboard. Sebuah aksi menamai tindakan pemain, sementara proyek mencantumkan tombol, stik, dan tombol gamepad yang memicunya. Proyek Unity 6 baru sudah dilengkapi sekumpulan aksi (aset InputSystem_Actions, yang ditetapkan sebagai aksi untuk seluruh proyek), dengan peta Player yang memiliki Move (WASD, tombol panah, dan stik kiri gamepad), Look (mouse atau stik kanan), Attack (tombol kiri mouse dan Enter), Interact (E, ditahan), 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. Mesin capit tampak samping ini bergerak pada sumbu x dan y, lalu mencapit saat tombol Jump ditekan:
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!");
}
}Aksi diambil sekali, di Start, lalu disimpan dalam field InputAction. Move memberikan Vector2: x berarti kanan dan kiri, y berarti atas dan bawah pada tombol, dan nilainya dinormalisasi, sehingga menekan W dan D bersamaan menghasilkan (0.71, 0.71), bukan (1, 1). Karena ini tampak samping, mesin capit menggunakan y untuk ketinggian; game yang dilihat dari atas akan menggunakan z. Aksi tombol merespons seperti tombol keyboard: WasPressedThisFrame(), WasReleasedThisFrame(), dan IsPressed(). Dua kesalahan akan menyebabkan error: nama yang salah eja membuat FindAction mengembalikan null (NullReferenceException saat pembacaan pertama), dan ReadValue<Vector3>() pada Move menyebabkan InvalidOperationException begitu sebuah tombol ditekan, karena Move menyimpan Vector2.
Tantangan
SedangJalankan surveyor dan tanam bendera dengan action proyek.
- Di
Start(), aturmoveAction,jumpAction, danattackActiondenganInputSystem.actions.FindAction("Move"),"Jump", dan"Attack". - Di
Update(), berjalanlah dengan mengalikanmoveAction.ReadValue<Vector2>()denganspeed, dengan komponen y-nya pada sumbu z. - Panggil
Plant()saatjumpAction.WasPressedThisFrame(), dan panggilPullUp()saat tombol Attack ditekan.
Tekan tombol “Main”, tanam tiga bendera, lalu klik untuk mencabut satu bendera. Setelah itu, tekan tombol “Periksa”.
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 InputAction moveAction;
private InputAction jumpAction;
private InputAction attackAction;
private List<GameObject> planted = new List<GameObject>();
void Start()
{
// cari aksi Move, Jump, dan Attack
}
void Update()
{
// berjalan dengan Move, panggil Plant() saat Jump ditekan, dan PullUp() saat Attack ditekan
}
void Plant()
{
if (flags == 0) return;
Vector3 spot = new Vector3(transform.position.x, 0.75f, transform.position.z);
planted.Add(Instantiate(flagPrefab, spot, Quaternion.identity));
flags--;
Debug.Log("Flags left: " + flags);
}
void PullUp()
{
if (planted.Count == 0) return;
GameObject last = planted[planted.Count - 1];
planted.RemoveAt(planted.Count - 1);
Destroy(last);
flags++;
Debug.Log("Flags left: " + flags);
}
}
Semua pelajaran di Membangun Game Sungguhan
2Tombol dan Layar
Tombol dan onClickLambdaMenghubungkan di InspectorPanel Aktif dan NonaktifBilah KesehatanRangkuman: Toko Upgrade5Menyimpan dengan PlayerPrefs
Simpan AngkaMuat dengan Nilai DefaultSkor TertinggiSimpan PengaturanUlasan: Koin di Bank3Pengelola Game
Satu Skrip Menjalankan GameSingletonStatus GamePercabangan Berdasarkan StatusUlasan: Pengelola Ronde6Proyek: Game Lari Tanpa Akhir
Tiga JalurRintangan di Depan9Sistem Input Baru
Dua Sistem InputKeyboard dan MouseDitekan pada Frame IniInput ActionsRangkuman: Pergantian InputLatihan sendiri: Playground Unity