Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni

Steruj 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ą drift jednostek 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 flame tylko wtedy, gdy palnik jest włączony.
  • Gdy palnik jest włączony, balon wznosi się z prędkością rise jednostek na sekundę. Gdy jest wyłączony, balon opada z prędkością sink jednostek na sekundę, ale nigdy poniżej groundY.

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ą
    }
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier