Używanie elementów sterujących wprowadzaniem zoptymalizowanych pod kątem dotyku dzięki funkcji sterowania ekranowego

Strona zaktualizowana :
Data utworzenia strony :

Środowisko weryfikacji

Windows
  • Okna 11
Edytor Unity
  • 2020.3.25f1
Pakiet systemu wejściowego
  • 1.2.0

Wymagania wstępne dotyczące tej porady

Poniższe ustawienia zostały wcześniej wprowadzone jako przesłanka do opisu tej wskazówki.

Powinieneś również zapoznać się z następującymi wskazówkami:

Informacje o funkcji sterowania dotykowego na ekranie

Często używam klawiatury lub gamepada do grania w gry. Na urządzeniach, które można obsługiwać tylko dotykiem, takich jak smartfony, będziesz grać w grę dotykiem.

Pakiet systemu wejściowego Unity wykorzystuje sterowanie ekranowe do symulacji interakcji dotykowych tak, jakby były kontrolowane przez kontroler.

Przed sterowaniem na ekranie

Ten artykuł jest nieco długi, ale ten temat nie jest bezpośrednio związany z kontrolką ekranową. Jeśli możesz użyć pakietu systemu wprowadzania w innych krokach, aby sprawdzić dane wejściowe, takie jak gamepad, to w porządku.

W tej wskazówce stworzymy mapę akcji. W tym artykule opisano, jak symulować dotykanie gamepada tak, jakby wchodził z nim w interakcję.

Nawiasem mówiąc, obsługuje również metodę używania klas i Gamepad klas w Keyboard skryptach zamiast map akcji. Tym razem nie będę tego wyjaśniał, ale jeśli chcesz wypróbować te klasy, możesz zamiast tego przygotować kod opisany na następnej stronie.

Najpierw umieść obiekt tekstowy na kanwie, aby wyświetlić dane wejściowe. Później umieścimy obiekt dotykowy na dole, więc zostaw trochę miejsca.

Najpierw utwórz mapę akcji w następujący sposób: Tworzysz tę samą akcję, co podczas opisywania mapy akcji.

Ponieważ wyjaśnienie mapy działania nie jest najważniejsze, wiązanie jest proste. Szczegółowe informacje na temat map akcji można znaleźć na poniższej stronie.

Tym razem akwizycja danych wejściowych odbywa się za pomocą skryptu zamiast "Send Messages" lub "Invoke Unity Events". Nie ogranicza się to również do skryptów i działa poprawnie, nawet jeśli używasz "Wyślij wiadomości" itp.

Upewnij się, że kod został wygenerowany z mapy działania.

Skrypt wygląda tak: To prawie tak samo, jak przy wyjaśnianiu mapy akcji.

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;

public class InputActionScript : MonoBehaviour
{
  /// <summary>情報を表示させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  /// <summary>アクションマップから自動生成されたクラス。</summary>
  private InputActionSample _actionMap;

  private void Awake()
  {
    // 各操作を行ったときに呼ばれるイベントを設定する
    _actionMap = new InputActionSample();
    _actionMap.Action2D.Move.performed += context => OnMove(context);
    _actionMap.Action2D.Attack.performed += context => OnAttack(context);
    _actionMap.Action2D.Move.canceled += context => OnMove(context);
    _actionMap.Action2D.Attack.canceled += context => OnAttack(context);
  }

  private void OnEnable()
  {
    // このオブジェクトが有効になったときにアクションマップを有効にする
    _actionMap.Enable();
  }

  private void OnDisable()
  {
    // このオブジェクトが無効になったときにアクションマップが余計な動作を起こさないように無効にする
    _actionMap.Disable();
  }

  /// <summary>
  /// Move 操作をした時に呼ばれるメソッドです。
  /// </summary>
  /// <param name="context">コールバックパラメータ。</param>
  public void OnMove(InputAction.CallbackContext context)
  {
    // Move の入力量を取得
    var vec = context.ReadValue<Vector2>();
    TextObject.text = $"Move:({vec.x:f2}, {vec.y:f2})\n{TextObject.text}";
  }

  /// <summary>
  /// Attack 操作をした時に呼ばれるメソッドです。
  /// </summary>
  /// <param name="context">コールバックパラメータ。</param>
  public void OnAttack(InputAction.CallbackContext context)
  {
    // Attack ボタンの状態を取得
    var value = context.ReadValueAsButton();
    TextObject.text = $"Attack:{value}\n{TextObject.text}";
  }
}

Skrypt EventSystem jest dołączony do .

Uruchom grę, aby sprawdzić, czy działa jako mapa akcji.

Przycisk ekranowy

Przycisk ekranowy symuluje naciskanie przycisków na gamepadzie, takich jak A i B, oraz na klawiaturze po dotknięciu jakiegoś obiektu na ekranie. Nawiasem mówiąc, mówi dotyk, ale działa również z kliknięciami myszy.

Najpierw umieść przycisk na ekranie. Ponieważ po prostu dołączasz komponent, działa on z obiektami innymi niż przyciski.

Dodaj przycisk wejścia > ekranie z komponentu.

Ustaw przycisk gamepada na wschód od ścieżki sterowania. To sprawia, że wygląda to tak, jakby przycisk East na gamepadzie został naciśnięty po dotknięciu.

Upewnij się, że atak pojawia się po uruchomieniu gry i kliknięciu przycisku. Jeśli jest to urządzenie dotykowe, możesz potwierdzić, że działa z dotykiem.

Drążek na ekranie

Funkcja drążek ekranowy umożliwia przesuwanie obiektów, takich jak drążki, za pomocą dotyku. Kiedy poruszasz drążkiem, możesz go symulować tak, jakbyś przesunął drążek gamepada. Oprócz dotyku możliwe jest również przesuwanie go za pomocą myszy.

Umieszcza na ekranie obiekt przycisku, który będzie drążkiem dotykowym. Używamy tutaj przycisku, ale działa on również z obiektami innymi niż przyciski.

W obszarze Dodaj komponent wybierz opcję Input > On-Screen Stick (Wprowadzanie drążek ekranowy).

W polu Control Path (Ścieżka sterowania) wybierz Gamepad LeftStick zdefiniowany na mapie akcji.

Uruchom grę i spróbuj przeciągnąć przycisk Kij. Przyciski poruszają się po okręgu, jakby poruszały drążkiem. Oczywiście możesz również sprawdzić, czy zawartość wejściowa jest pobierana podczas działania.

W tym przypadku umieściliśmy przycisk, ale możliwe jest również, aby wyglądał jak wirtualny kij, umieszczając okrągłą ramkę i okrągły przedmiot patyczka.

Nawiasem mówiąc, ten ruchomy zakres można zmienić w "Zakresie ruchu" drążka ekranowego.