Akcje wejścia
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 46 z 56.
Testowanie klawiszy pojedynczo uzależnia skrypt od klawiatury. Akcja określa zamiast tego, co robi gracz, a projekt zawiera listę klawiszy, drążków i przycisków, które ją wywołują. Nowy projekt Unity 6 zawiera zestaw takich akcji (zasób InputSystem_Actions, ustawiony jako akcje obowiązujące w całym projekcie), których mapa Player obejmuje Move (WASD, klawisze strzałek i lewy drążek pada), Look (mysz lub prawy drążek), Attack (lewy przycisk myszy i Enter), Interact (E, przytrzymany), Crouch (C), Jump (spacja i dolny przycisk pada), Previous i Next (1 i 2) oraz Sprint (lewy Shift). Są włączone od początku, a InputSystem.actions.FindAction("Jump") pobiera akcję po nazwie. Ta boczna chwytarka 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ą pobierane raz, w Start, i przechowywane w polach typu InputAction. Move zwraca Vector2: x oznacza prawo i lewo, y — górę i dół na klawiszach, a wektor jest znormalizowany, więc naciśnięcie W i D razem daje (0.71, 0.71), a nie (1, 1). To widok z boku, więc chwytarka używa y jako wysokości; w grze widzianej z góry używałaby go jako z. Akcje przycisków działają jak klawisze: WasPressedThisFrame(), WasReleasedThisFrame() i IsPressed(). Dwa błędy powodują wyjątki: błędnie wpisana nazwa sprawia, że FindAction zwraca null (NullReferenceException przy pierwszym odczycie), a wywołanie ReadValue<Vector3>() dla Move powoduje InvalidOperationException, gdy tylko zostanie naciśnięty klawisz, ponieważ Move przechowuje Vector2.
Wyzwanie
ŚredniGeodeta sporządza mapę pola śnieżnego widzianego z góry i niesie flags (3), aby po drodze wbijać flagi. Skrypt ma speed (4), flags, flagPrefab oraz listę planted. Użyj akcji projektu:
- Move porusza geodetą po śniegu z prędkością
speedjednostek na sekundę: w prawo i w lewo wzdłuż osi x, w górę i w dół wzdłuż osi z. - Każde naciśnięcie Jump wbija flagę: kopię
flagPrefabw miejscu o współrzędnych x i z geodety oraz y równym 0.75, dodaną do listyplanted. Zużywa jedną zflagsi wyświetla w logu liczbę pozostałych flag, na przykładFlags left: 2. Jeśli nie zostały żadne flagi, Jump niczego nie wbija. - Każde naciśnięcie Attack (lewy przycisk myszy) wyciąga ostatnio wbityą flagę: zostaje ona zniszczona i usunięta z listy,
flagszwiększa się o jeden, a ta sama linia zostaje wyświetlona w logu.
Naciśnij Play, wbij trzy flagi i wyciągnij jedną, a następnie naciśnij Check.
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 List<GameObject> planted = new List<GameObject>();
void Start()
{
// znajdź akcje Move, Jump i Attack
}
void Update()
{
// poruszaj się za pomocą Move, postaw flagę po naciśnięciu Jump, wyciągnij jedną po naciśnięciu Attack
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz4Sceny i poziomy
Wczytaj scenęUruchom poziom ponownieNastępny poziomZachowaj między scenamiPodsumowanie: wybór poziomu10Projekt: platformówka 3D
TrasaRuchome platformy2Przyciski 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ścia