Klawiatura i mysz
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 44 z 56.
System wejścia przypisuje każdemu urządzeniu obiekt. Keyboard.current to klawiatura, a każdy jej klawisz jest kontrolką o nazwie: spaceKey, aKey, upArrowKey lub Keyboard.current[Key.Space] dla dowolnego klawisza określonego wartością Key. Mouse.current to mysz z kontrolkami leftButton, rightButton i position. Wartość isPressed kontrolki jest równa true w każdej klatce, w której przycisk jest wciśnięty, tak jak działało Input.GetKey. Ten okręt podwodny zanurza się i wynurza za pomocą strzałek oraz włącza reflektor, gdy przycisk myszy jest wciśnięty:
using UnityEngine;
using UnityEngine.InputSystem;
public class Submarine : MonoBehaviour
{
public float diveSpeed = 2f;
public Light searchlight;
void Update()
{
Keyboard keyboard = Keyboard.current;
if (keyboard == null) return; // brak podłączonej klawiatury
if (keyboard.downArrowKey.isPressed)
transform.position += Vector3.down * diveSpeed * Time.deltaTime;
if (keyboard.upArrowKey.isPressed)
transform.position += Vector3.up * diveSpeed * Time.deltaTime;
searchlight.enabled = Mouse.current != null && Mouse.current.leftButton.isPressed;
}
}current oznacza ostatnio używane urządzenie i ma wartość null, gdy nie ma żadnego: telefon lub konsola mogą nie mieć klawiatury, a sprawdzanie wartości null zapobiega błędom skryptu na takich urządzeniach. Klawiatura nie ma osi, więc strzałka w dół i S to dwa osobne klawisze: okręt podwodny, który powinien zanurzać się również po naciśnięciu S, sprawdza keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed. Mouse.current.position.ReadValue() zwraca pozycję wskaźnika jako wartość Vector2 w pikselach ekranu, liczoną od lewego dolnego rogu, tak jak Input.mousePosition.
Wyzwanie
ŚredniSteruj balonem na ogrzane powietrze za pomocą Input System. Jego skrypt zawiera drift (2), rise (3), sink (1), groundY (2) i flame — płomień palnika pod balonem.
- Gdy przytrzymujesz strzałkę w prawo lub D, balon dryfuje w prawo (wzdłuż +x) z prędkością
driftjednostek na sekundę; gdy przytrzymujesz strzałkę w lewo lub A, dryfuje w lewo. - Palnik jest włączony, gdy przytrzymujesz spację lub lewy przycisk myszy. Pokazuj
flametylko wtedy, gdy palnik jest włączony. - Gdy palnik jest włączony, balon wznosi się z prędkością
risejednostek na sekundę. Gdy jest wyłączony, balon opada z prędkościąsinkjednostek na sekundę, ale nigdy poniżejgroundY.
Użyj Keyboard.current i Mouse.current. Ten projekt jest skonfigurowany jak nowy projekt Unity 6 (Active Input Handling: Input System Package), więc klasa Input powoduje tutaj wyjątek InvalidOperationException. Naciśnij Play i polataj, a następnie naciśnij Check.
Spróbuj swoich sił
using UnityEngine;
using UnityEngine.InputSystem;
public class Balloon : MonoBehaviour
{
public float drift = 2f;
public float rise = 3f;
public float sink = 1f;
public float groundY = 2f;
public GameObject flame;
void Update()
{
// Poruszaj się za pomocą strzałek lub A i D, a palnik uruchamiaj klawiszem Space lub myszą
}
}
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