Touch-optimierte Eingabesteuerung mit On-Screen-Steuerung verwenden
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.
- Bedienen mit der Tastatur (Version des Eingabesystempakets)
- Steuerung mit einem Gamepad (Input System Package Version)
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.