Akcje wejścia
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 47 z 60.
Testowanie kolejno każdego klawisza wiąże skrypt z klawiaturą. Akcja określa, co robi gracz, a projekt zawiera listę klawiszy, drążków i przycisków, które ją uruchamiają. Nowy projekt Unity 6 jest wyposażony w ich zestaw (zasób InputSystem_Actions ustawiony jako akcje dla całego projektu), którego mapa Player zawiera Move (WASD, strzałki i lewy drążek gamepada), Look (mysz lub prawy drążek), Attack (lewy przycisk myszy i Enter), Interact (E, przytrzymanie), Crouch (C), Jump (spacja i dolny przycisk gamepada), Previous i Next (1 i 2) oraz Sprint (lewy Shift). Są włączone od początku, a InputSystem.actions.FindAction("Jump") pobiera jedną z nich po nazwie. Ta dźwigienka z chwytakiem, widziana z boku, porusza się wzdłuż osi x i y oraz chwyta po naciśnięciu 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!");
}
}Akcje są wyszukiwane raz, w Start, i przechowywane w polach typu InputAction. Move zwraca Vector2: x oznacza ruch w prawo i w lewo, y — w górę i w dół za pomocą klawiszy, a wartość jest normalizowana, więc jednoczesne naciśnięcie W i D daje (0.71, 0.71), a nie (1, 1). Dźwigienka jest widziana z boku, więc używa y jako wysokości; gra widziana z góry używałaby tej wartości dla osi z. Akcje przycisków działają podobnie jak klawisze: WasPressedThisFrame(), WasReleasedThisFrame() i IsPressed(). Dwa błędy powodują wyjątki: błędnie zapisana nazwa sprawia, że FindAction zwraca null (NullReferenceException przy pierwszym odczycie), a wywołanie ReadValue<Vector3>() dla Move powoduje InvalidOperationException, gdy tylko zostanie przytrzymany klawisz, ponieważ Move przechowuje wartość typu Vector2.
Wyzwanie
ŚredniPoruszaj geodetą i sadź flagi za pomocą akcji projektu.
- W
Start()ustawmoveAction,jumpActioniattackActionza pomocąInputSystem.actions.FindAction("Move"),"Jump"i"Attack". - W
Update()poruszaj się, mnożącmoveAction.ReadValue<Vector2>()przezspeed; jego składowa y odpowiada osi z. - Wywołaj
Plant(), gdyjumpAction.WasPressedThisFrame()zwróci prawdę, aPullUp()po naciśnięciu Attack.
Naciśnij „Graj”, posadź trzy flagi i kliknij, aby jedną wyciągnąć. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
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()
{
// znajdź akcje Move, Jump i Attack
}
void Update()
{
// poruszaj się za pomocą Move, wywołaj Plant() po naciśnięciu Jump, a PullUp() po naciśnięciu Attack
}
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);
}
}
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w banku3Menedżer gry
Jeden skrypt obsługuje gręSingletonStany gryInstrukcja switch dla stanuPowtórka: menedżer rund6Projekt: Niekończący się bieg
Trzy toryPrzeszkody przed tobą9Nowy system wejścia
Dwa systemy wejściaKlawiatura i myszWciśnięte w tej klatceAkcje wejściaPodsumowanie: zmiana systemu wejściaPoćwicz samodzielnie: Edytor online Unity