Menu
CoddyTech

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.

challenge icon

Wyzwanie

Średni

Steruj balonem na ogrzane powietrze za pomocą Keyboard.current i Mouse.current.

  1. Gdy rightArrowKey lub dKey jest isPressed, przesuwaj się wzdłuż osi +x z prędkością drift jednostek na sekundę; użyj leftArrowKey lub aKey, aby przesuwać się wzdłuż osi -x.
  2. bool burner ma wartość prawda, gdy spaceKey lub leftButton jest wciśnięty; wywołaj flame.SetActive(burner);.
  3. Gdy palnik jest włączony, wznoś się z prędkością rise; gdy jest wyłączony, opadaj z prędkością sink, nigdy poniżej groundY.

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

Poćwicz samodzielnie: Edytor online Unity