Touch-optimierte Eingabesteuerung mit On-Screen-Steuerung verwenden

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

Verifizierungsumgebung

Fenster
  • Windows 11
Unity-Editor
  • 2020.3.25f1
Eingabesystem-Paket
  • 1.2.0

Voraussetzungen für diesen Tipp

Die folgenden Einstellungen wurden im Vorfeld als Prämisse für die Beschreibung dieses Tipps vorgenommen.

Sie sollten auch mit den folgenden Tipps vertraut sein:

Informationen zur Bildschirmsteuerung für die Toucheingabe

Ich benutze oft eine Tastatur oder ein Gamepad, um Spiele zu spielen. Auf Geräten, die nur per Touch bedient werden können, wie z. B. Smartphones, spielen Sie das Spiel per Touch.

Das Eingabesystempaket von Unity verwendet die On-Screen-Steuerung, um Touch-Interaktionen so zu simulieren, als ob sie von einem Controller gesteuert würden.

Vor der Bildschirmsteuerung

Dieser Artikel ist etwas langatmig, aber dieses Thema hat nicht direkt mit der Bildschirmsteuerung zu tun. Wenn Sie das Eingabesystempaket in anderen Schritten verwenden können, um die Eingabe zu überprüfen, z. B. ein Gamepad, ist das in Ordnung.

In diesem Tipp erstellen wir eine Aktionskarte. Beschreibt, wie Sie das Berühren eines Gamepads simulieren, als ob Sie mit ihm interagieren würden.

Übrigens unterstützt es auch die Methode, Klassen und Gamepad Klassen in Keyboard Skripten anstelle von Actionmaps zu verwenden. Ich werde es dieses Mal nicht erklären, aber wenn Sie es mit diesen Klassen versuchen möchten, können Sie stattdessen den auf der folgenden Seite beschriebenen Code vorbereiten.

Platzieren Sie zunächst ein Textobjekt auf dem Canvas-Bereich, um Ihre Eingaben anzuzeigen. Später platzieren wir das Touch-Objekt unten, lassen Sie also etwas Platz.

Erstellen Sie zunächst eine Aktionszuordnung wie folgt: Sie erstellen dieselbe Aktion wie beim Beschreiben der Aktionskarte.

Da die Erklärung der Action Map nicht die Hauptsache ist, ist die Bindung einfach. Auf der folgenden Seite finden Sie Details zu Aktionskarten.

Dieses Mal wird die Eingabeerfassung per Skript anstelle von "Nachrichten senden" oder "Unity-Ereignisse aufrufen" ausgeführt. Dies ist auch nicht auf Skripte beschränkt und funktioniert auch dann einwandfrei, wenn Sie "Nachrichten senden" usw. verwenden.

Stellen Sie sicher, dass Sie den Code aus der Aktionskarte generiert haben.

Das Skript sieht wie folgt aus: Es ist fast das gleiche wie bei der Erklärung der Aktionskarte.

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}";
  }
}

Das EventSystem Skript ist an angehängt.

Führen Sie das Spiel aus, um zu sehen, ob es als Aktionskarte funktioniert.

Schaltfläche auf dem Bildschirm

Die Bildschirmtaste simuliert das Drücken von Tasten auf einem Gamepad, z. B. A und B, und der Tasten auf der Tastatur, wenn Sie ein Objekt auf dem Bildschirm berühren. Es heißt übrigens Touch, aber es funktioniert auch mit Mausklicks.

Platzieren Sie zuerst die Schaltfläche auf dem Bildschirm. Da Sie nur eine Komponente anhängen, funktioniert sie mit anderen Objekten als Schaltflächen.

Fügen Sie der Komponente eine Eingabe- > Bildschirmschaltfläche hinzu.

Stellen Sie die Taste des Gamepads östlich vom Steuerungspfad ein. Dadurch sieht es so aus, als ob die Taste Ost auf dem Gamepad bei Berührung gedrückt wurde.

Stellen Sie sicher, dass Angriff angezeigt wird, wenn Sie das Spiel starten, und klicken Sie auf die Schaltfläche. Wenn es sich um ein berührbares Gerät handelt, können Sie bestätigen, dass es mit Berührung funktioniert.

Stick auf dem Bildschirm

Mit dem On-Screen-Stick können Sie Objekte wie Sticks mit Ihrer Berührung bewegen. Wenn Sie einen Stick bewegen, ist es möglich, dies so zu simulieren, als hätten Sie einen Gamepad-Stick bewegt. Neben der Berührung ist es auch möglich, es mit der Maus zu bewegen.

Platziert ein Schaltflächenobjekt auf dem Bildschirm, bei dem es sich um einen Touchstick handelt. Wir verwenden hier eine Schaltfläche, die jedoch auch mit anderen Objekten als Schaltflächen funktioniert.

Wählen Sie unter Komponente hinzufügen die Option Eingabe > Bildschirmstick aus.

Wählen Sie unter Control Path (Steuerungspfad) den Gamepad LeftStick aus, der in der Aktionskarte definiert ist.

Starten Sie das Spiel und versuchen Sie, die Stick-Taste zu ziehen. Die Tasten bewegen sich im Kreis, als würden sie einen Stick bewegen. Natürlich können Sie auch überprüfen, ob der Eingabeinhalt während der Ausführung abgerufen wird.

In diesem Fall haben wir eine Schaltfläche platziert, aber es ist auch möglich, sie wie einen virtuellen Stick aussehen zu lassen, indem Sie einen kreisförmigen Rahmen und ein rundes Stick-Objekt platzieren.

Dieser bewegliche Bereich kann übrigens im "Movement Range" des On-Screen Sticks verändert werden.