Unity-ben kettő teljesen különböző mód van a felhasználói inputok kezelésére. Egy régebb óta létező fapadosabb, de egyszerűbb verzió és egy újabb, ami jóval összetetteb, de jóval többre is képes, a New Input System.
Ezen kurzuson nem lesz időnk az újabb rendszert átvenni, ezt nem is javasolnám teljesen kezdő programozóknak. Eleinte bőven elég lesz nekünk a régi, amit sokkal könnyebb megérteni.
Ezt tárgyaljuk ebben a leckében.
Gombok lenyomásának lekérdezése
Előszöris le tudjuk kérni, hogy melyik gombot mikor nyomják le a billentyűzeten egéren vagy gamepad-en a következő módon.
GetkeyDown
Az Input.GetKeyDown() lekérdezéssel mindig a lenyomás utáni első Update-ben lesz egyedül true a válasz. Tehát e módon pillanatszerű eseményeket tudunk lekezelni. Például, hogy mikor ugorjunk vagy mikor lőjünk.
GetKey
Ezzel szemben sok esetben arra vagyunk kíváncsiak, hogy mikor van lenyomva egy gomb. Ezt az Input.GetKey() függvény adja vissza.
Ez kellene ahhoz például, hogy a mozgást irányát lekérdezzük.
GetKeyUp
Ugyanígy az is lekérdezhető, mikor engedünk fel egy gombot. Erre való az Input.GetKeyUp() parancs.
A [SerializeField]-hez hasonlóan ez is pillanatszerű: Csak a felengedés utáni első Update-ben lesz igaz az eredménye.
void Update()
{
// Billentyűzet gombjainak lekérdezése:
bool jump = Input.GetKeyUp(KeyCode.Space); // Space gombot most engedjük-e fel?
bool shoot = Input.GetKeyUp(KeyCode.Mouse0);// Bal egérgombot most engedjük-e fel?
}[SerializeField] KeyCode
KeyCode-ot [SerializeField] osztályváltozóban is meg lehet adni. Ezáltal a game-dizájner számára beállíthatóvá tesszük, hogy melyik gombra történjen például az ugrás.
[SerializeField] KeyCode jump;
void Update()
{
bool doJump = Input.GetKeyDown(jump);
...Tengelyek lekérdezése
A mozgáshoz szükségünk lesz egy 2D vektorra ami megmondja melyik irányba haladunk.
A külöböző iránygombok (WASD vagy kurzur gombok) lekérdezésével ezt a vektort össze tudjuk állítani.
Írjunk tehát egy függvényt, ami visszaad egy vektort aszerint, hogy milyen billentyűket nyomunk:
Ennek az alternatívája, hogy manuálisan létrehozunk tengelyeket vagy Axis-okat a Felső menüsáv / Edit / Project Settings / Input Manager alatt.
Ha elnavigálunk ide, láthatjuk, hogy párat már a Unity létre is hozott alapértelmezetten. Pl.: Horizontal, Vertical.
A tengelyek mindig egy számot adnak meg -1 és 1 közt.
Ebben az esetben a lekérdezés kódja jóval egyszerűbb.
float x = Input.GetAxis("Horizontal"); // A vízszintes irányban elmozdulás mértéke
float y = Input.GetAxis("Vertical"); // A függőleges irányban elmozdulás mértéke
return new Vector2(x, y); // A mozgás vektor összeállításaA Unity Axis-okat kicsikét unintuitiv módon arra is használhatjuk, hogy gomblenyomásokat kérdezzünk le. Ebben az eseben Input.GetButton() Input.GetButtonDown() és Input.GetButtonUp() lekérdezéseket tudjuk használni és paraméterben az axis nevét kell megadnunk.
Input lekérdezésének ideje
Inputot általában Update vagy LateUpdate metódusban kérdezünk le. A későbbiekben azonban tanulni fogunk egyéb ciklikusan ismétlődő MonoBechaviour üzenetmetódusokat. Ebben az esetben oda kell figyelni, mikor mit kérdezünk le, mert felelőtlen használat esetén hibás működés léphet fel.
Erről bővebben itt olvashatsz: A FixedUpdate és a gyorsuló mozgás - Inputkezelés és FixedUpdate