Klawiatura i mysz
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 45 z 60.
Input System przypisuje każdemu urządzeniu obiekt. Keyboard.current to klawiatura, a każdy jej klawisz jest elementem sterującym o nazwie: spaceKey, aKey, upArrowKey lub Keyboard.current[Key.Space], aby odwołać się do dowolnego klawisza za pomocą jego wartości Key. Mouse.current to mysz z elementami leftButton, rightButton i position. Wartość isPressed elementu sterującego wynosi true w każdej klatce, gdy przycisk jest wciśnięty — tak jak działało Input.GetKey. Ten okręt podwodny zanurza się i wynurza za pomocą klawiszy strzałek, a jego reflektor świeci, 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; // nie podłączono 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, a jego wartość to null, gdy nie ma żadnego: telefon lub konsola mogą nie mieć klawiatury, a sprawdzanie wartości null zapobiega wtedy błędom skryptu. Klawiatura nie ma osi, więc strzałka w dół i klawisz S to dwa osobne klawisze: okręt podwodny, który ma zanurzać się również po naciśnięciu klawisza S, sprawdza keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed. Mouse.current.position.ReadValue() zwraca położenie wskaźnika jako wartość Vector2 w pikselach ekranu, licząc od lewego dolnego rogu, podobnie jak Input.mousePosition.
Wyzwanie
ŚredniSteruj balonem na ogrzane powietrze za pomocą Keyboard.current i Mouse.current.
- Gdy
rightArrowKeylubdKeyjestisPressed, przesuwaj się wzdłuż osi +x z prędkościądriftjednostek na sekundę; użyjleftArrowKeylubaKey, aby przesuwać się wzdłuż osi -x. bool burnerma wartość prawda, gdyspaceKeylubleftButtonjest wciśnięty; wywołajflame.SetActive(burner);.- Gdy palnik jest włączony, wznoś się z prędkością
rise; gdy jest wyłączony, opadaj z prędkościąsink, nigdy poniżejgroundY.
Naciśnij „Graj” i leć: przytrzymaj spację lub przycisk myszy, aby się wznieść. Następnie naciśnij „Sprawdź”.
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()
{
// Steruj dryfowaniem za pomocą klawiszy strzałek lub A i D, a palnikiem za pomocą Space lub myszy
}
}
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