Bedienen mit der Tastatur (Version des Eingabesystempakets)

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.

Bestimmen Sie den Moment, in dem eine bestimmte Taste gedrückt wird

Wenn Sie eine Taste drücken, versuchen Sie, das Objekt zu verschieben. Platzieren Sie ein Textobjekt im Canvas-Bereich, um die Bewegung zu bestätigen. Die Größe und Position kann angemessen sein.

Die Tastaturbedienung erfolgt über Skripte. KeyboardOneFrame In diesem Fall erstellen wir es als .

Der Code sieht wie folgt aus:

using UnityEngine;
using UnityEngine.UI;           // 追加
using UnityEngine.InputSystem;  // 追加

public class KeyboardOneFrame : MonoBehaviour
{
  /// <summary>移動させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  // 更新はフレームごとに1回呼び出されます
  void Update()
  {
    if (TextObject == null)
    {
      Debug.Log($"{nameof(TextObject)} が null です。");
      return;
    }

    // キーボードの情報を取得
    var keyboard = Keyboard.current;
    if (keyboard == null)
    {
      Debug.Log("キーボードがありません。");
      return;
    }

    var transform = TextObject.transform;

    // wasPressedThisFrame は押した瞬間のみ true となる
    // キーは「keyboard[Key.RightArrow]」のような指定の仕方もある
    if (keyboard.leftArrowKey.wasPressedThisFrame)
    {
      transform.Translate(-1, 0, 0);
    }
    if (keyboard.rightArrowKey.wasPressedThisFrame)
    {
      transform.Translate(1, 0, 0);
    }
    if (keyboard.upArrowKey.wasPressedThisFrame)
    {
      transform.Translate(0, 1, 0);
    }
    if (keyboard.downArrowKey.wasPressedThisFrame)
    {
      transform.Translate(0, -1, 0);
    }
  }
}

Keyboard.current Sie können den aktuellen Status des Tastendrucks usw. auf der Tastatur abrufen. keyboard.xxxxxxx.wasPressedThisFrame Gibt nur true den Zeitpunkt des Moments zurück, in dem die Taste gedrückt wird. In diesem Code wird in dem Moment, in dem die Cursortaste gedrückt wird, der Move-Vorgang für das Text-Objekt transform ausgeführt. Da es nur im Moment des Drückens verarbeitet wird, wird die Bewegung auch dann nicht fortgesetzt, wenn die Taste gedrückt wird.

Nachdem EventSystem Sie das Skript gespeichert haben, hängen Sie es an das Objekt KeyboardOneFrame an und klicken Sie auf Legen Sie das Textobjekt fest, das in das Textobjekt verschoben werden soll.

Versuchen Sie, das Spiel auszuführen und zu überprüfen, ob sich das @-Zeichen bewegt, wenn Sie die Cursortaste drücken. Stellen Sie außerdem sicher, dass das @-Symbol nicht verschoben wird, wenn Sie die Taste gedrückt halten.

Welche Arten von Schlüsseln können bestimmt werden?

Es steht auf der offiziellen Website, also schauen Sie bitte dort nach.

Bestimmen Sie den Zeitpunkt, zu dem eine bestimmte Taste losgelassen wird

Wir erstellen kein Muster, aber der Moment, in dem Sie es drücken, wird durch die Eigenschaft bestimmt, während der Moment wasPressedThisFrame wasReleasedThisFrame , in dem Sie es freigeben, durch beurteilt werden kann.

Bestimmen Sie beim Drücken einer bestimmten Taste

Dies wird auch durch das Skript bestimmt. Sie können es dem vorherigen Code hinzufügen, aber dieses Mal erstellen wir eine neue Skriptdatei namens und schreiben sie KeyboardPress .

Das Skript sieht wie folgt aus:

using UnityEngine;
using UnityEngine.UI;           // 追加
using UnityEngine.InputSystem;  // 追加

public class KeyboardPress : MonoBehaviour
{
  /// <summary>回転させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  // 更新はフレームごとに1回呼び出されます
  void Update()
  {
    if (TextObject == null)
    {
      Debug.Log($"{nameof(TextObject)} が null です。");
      return;
    }

    // キーボードの情報を取得
    var keyboard = Keyboard.current;
    if (keyboard == null)
    {
      Debug.Log("キーボードがありません。");
      return;
    }

    var transform = TextObject.transform;

    // isPressed は押している間はずっと true となる
    // キーは「Keyboard.current[Key.Space]」のような指定の仕方もある
    if (keyboard.spaceKey.isPressed)
    {
      transform.Rotate(0, 0, 1);
    }
  }
}

Während die Leertaste gedrückt wird, wird das Textobjekt gedreht. keyboard.xxxxxxxx.isPressed Gibt für die gesamte true Dauer des Schlüssels zurück.

Hängen Sie das gespeicherte Skript an das Textobjekt an und legen Sie fest, dass das EventSystem Textobjekt gedreht werden soll.

Stellen Sie sicher, dass sich das @-Symbol vollständig dreht, während das Spiel läuft, und halten Sie die Leertaste gedrückt.

Holen Sie sich alle gedrückten Tasten

Versuchen Sie, alle Tasten, die Sie drücken, als Text anzuzeigen. Sie haben ein Textobjekt platziert, um die Taste anzuzeigen, die Sie drücken.

KeyboardAllKeys Erstellen Sie ein Skript mit dem Namen .

Das Skript sieht wie folgt aus:

using System.Linq;
using UnityEngine;
using UnityEngine.InputSystem;  // 追加
using UnityEngine.UI;           // 追加

public class KeyboardAllKeys : MonoBehaviour
{
  /// <summary>移動させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  // 更新はフレームごとに1回呼び出されます
  void Update()
  {
    if (TextObject == null)
    {
      Debug.Log($"{nameof(TextObject)} が null です。");
      return;
    }

    // キーボードの情報を取得
    var keyboard = Keyboard.current;
    if (keyboard == null)
    {
      Debug.Log("キーボードがありません。");
      TextObject.text = "";
      return;
    }

    // allKeys からすべてのキーの情報を走査し isPressed で押しているキーのみを抽出する
    TextObject.text = string.Join(", ", keyboard.allKeys.Where(x => x.isPressed).Select(x => x.keyCode.ToString()));
  }
}

keyboard.allKeys ermöglicht es Ihnen, Informationen über alle Schlüssel zu erhalten. Sie können nur die Tasten extrahieren, die wahr isPressed sind, und nur die Tasten abrufen, die Sie drücken. Danach wird die Taste, die Sie drücken, in eine Zeichenfolge umgewandelt und als Text angezeigt.

Das EventSystem erstellte Skript wird an ein Textobjekt für die Anzeige der Drucktaste angehängt und festgelegt.

Starten Sie das Spiel und vergewissern Sie sich, dass die Taste, die Sie drücken, angezeigt wird.

Übrigens, selbst wenn Sie viele Tasten drücken, werden möglicherweise nicht alle Tasten angezeigt, aber machen Sie sich keine Sorgen, da es sich um ein physisches Problem aufgrund der Tastaturverkabelung handelt.

Abrufen von eingegebenen Zeichen

Bisher haben Sie die Art der Taste, die Sie gedrückt haben, aber es ist auch möglich, die Zeichen zu erhalten, die Sie tatsächlich eingegeben haben. Wenn z. B. die Taste "A" gedrückt wird, kann der Buchstabe "a" erhalten werden, und wenn die Taste "Umschalt+A" gedrückt wird, kann der Buchstabe "A" erhalten werden. Wenn der IME aktiviert ist, können Sie möglicherweise auch Japanisch abrufen.

Diese eingegebenen Zeichen können jedoch nicht in Eigenschaften abgerufen werden und werden in Form von Ereignissen abgerufen.

Im Beispiel wird ein Textobjekt platziert, um die eingegebenen Zeichen anzuzeigen.

Erstellen Sie ein Skript. KeyboardTextInput Der Name ist .

Geben Sie das Skript wie folgt ein:

using UnityEngine;
using UnityEngine.InputSystem;  // 追加
using UnityEngine.UI;           // 追加

public class KeyboardTextInput : MonoBehaviour
{
  /// <summary>移動させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  /// <summary>
  /// オブジェクトが有効になったときに呼ばれるイベント。
  /// </summary>
  public void OnEnable()
  {
    // 文字が入力されたときに呼ばれるイベントをセット
    Keyboard.current.onTextInput += OnTextInput;
  }

  /// <summary>
  /// オブジェクトが無効になったときに呼ばれるイベント。
  /// </summary>
  public void OnDisable()
  {
    // 文字が入力されたときに呼ばれるイベントを解除
    Keyboard.current.onTextInput -= OnTextInput;
  }

  /// <summary>
  /// 文字を入力するたびに呼ばれる。
  /// </summary>
  /// <param name="c">入力された文字。</param>
  public void OnTextInput(char c)
  {
    TextObject.text += c;
  }
}

KeyboardDie onTextInput Klasse verfügt über ein Ereignis namens , das immer dann aufgerufen wird, wenn Text eingegeben wird. OnEnable Hier wird die Methode zum Zeitpunkt von registriert undOnDisable zum OnTextInput OnTextInput Zeitpunkt von abgebrochen. Keyboard.current ist ein eindeutiges Objekt, das von dem Zeitpunkt an, an dem das Spiel ausgeführt wird, bis zu seinem Beenden existiert, also OnDisable stellen Sie sicher, dass Sie es zum Zeitpunkt von . Wenn Sie die Registrierung und Stornierung von Veranstaltungen jederzeit koppeln können, können Sie dies jederzeit zu einem anderen Zeitpunkt festlegen.

OnTextInput In der Methode wird das eingegebene Zeichen als Argument c festgelegt, sodass es als Text angehängt wird.

Nachdem EventSystem Sie das Skript gespeichert haben, hängen Sie es an ein Textobjekt für die Anzeige an, und legen Sie es fest.

Versuchen Sie, das Spiel auszuführen und die Taste zu drücken. Sie sollten die eingegebenen Zeichen sehen. Wenn Sie es gleichzeitig mit der Umschalttaste drücken, sollten Sie in der Lage sein, Großbuchstaben und Symbole einzugeben. Sie können auch Japanisch eingeben, wenn der IME aktiviert ist. Wenn Sie hingegen eine Nicht-Zeichen-Taste wie die Cursortaste drücken, passiert nichts.