Utilisation du clavier (version du package du système d’entrée)

Page mise à jour :
Date de création de la page :

Environnement de vérification

Windows
  • Fenêtres 11
Éditeur Unity
  • 2020.3.25f1
Package système d’entrée
  • 1.2.0

Conditions préalables à cette astuce

Les paramètres suivants ont été définis à l’avance comme prémisse pour la description de cette astuce.

Déterminer le moment où une touche spécifique est enfoncée

Lorsque vous appuyez sur une touche, essayez de déplacer l’objet. Placez un objet texte dans le canevas pour confirmer le déplacement. La taille et la position peuvent être appropriées.

La manipulation du clavier est effectuée par scripts. KeyboardOneFrame Dans ce cas, nous le créons sous la forme .

Le code ressemble à ceci :

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 Vous pouvez obtenir l’état actuel de la pression sur les touches du clavier, etc. à partir de . keyboard.xxxxxxx.wasPressedThisFrame Renvoie uniquement true le moment où la touche est enfoncée. Dans ce code, dès que vous appuyez sur la touche du curseur, l’opération Déplacer est exécutée sur l’objet transform Text. Comme il n’est traité qu’au moment de la pression, le mouvement ne se poursuit pas même si la touche est enfoncée.

Après EventSystem avoir enregistré le script, attachez-le à l’objet KeyboardOneFrame et cliquez sur Définissez l’objet texte à déplacer vers l’objet Text.

Essayez d’exécuter le jeu et de vérifier si la marque @ se déplace lorsque vous appuyez sur la touche du curseur. Assurez-vous également que le fait de maintenir la touche enfoncée ne déplace pas le symbole @.

Quels types de clés peuvent être déterminés?

Il est écrit sur le site officiel, alors s’il vous plaît vérifier ici.

Déterminer le moment où une clé spécifique est libérée

Nous ne créons pas d’échantillon, mais le moment où vous appuyez dessus est déterminé par la propriété, tandis que le moment où wasPressedThisFrame wasReleasedThisFrame vous le relâchez peut être jugé par .

Déterminer en appuyant sur une touche spécifique

Ceci est également déterminé par le script. Vous pouvez l’ajouter au code précédent, mais cette fois, nous allons créer un nouveau fichier de script appelé et l’écrire KeyboardPress .

Le script ressemble à ceci :

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

Lorsque vous appuyez sur la barre d’espace, l’objet texte est pivoté. keyboard.xxxxxxxx.isPressed Renvoie pour toute true la durée de la clé.

Attachez le script enregistré à l’objet EventSystem texte et définissez l’objet texte à pivoter.

Assurez-vous que le symbole @ tourne complètement pendant que le jeu est en cours d’exécution et maintenez la barre d’espace.

Obtenir toutes les touches pressées

Essayez d’afficher toutes les touches sur lesquelles vous appuyez sous forme de texte. Vous avez placé un objet texte pour afficher la touche sur laquelle vous appuyez.

KeyboardAllKeys Créez un script portant le nom .

Le script ressemble à ceci :

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 vous permet d’obtenir des informations sur toutes les clés. Vous pouvez extraire uniquement celles qui sont vraies de isPressed ces touches et récupérer uniquement les touches sur lesquelles vous appuyez. Après cela, la touche sur laquelle vous appuyez est convertie en chaîne et affichée sous forme de texte.

Le EventSystem script créé s’attache à un objet texte et le définit pour afficher la touche d’appui.

Lancez le jeu et vérifiez que la touche sur laquelle vous appuyez apparaît.

Soit dit en passant, même si vous appuyez sur beaucoup de touches, toutes les touches peuvent ne pas être affichées, mais ne vous inquiétez pas car il s’agit d’un problème physique dû au câblage du clavier.

Obtenir des caractères tapés

Jusqu’à présent, vous aviez le type de touche sur lequel vous appuyiez, mais il est également possible d’obtenir les caractères que vous avez réellement tapés. Par exemple, si la touche « A » est enfoncée, la lettre « a » peut être obtenue, et si la touche « Maj + A » est enfoncée, la lettre « A » peut être obtenue. Si l’éditeur IME est activé, vous pourrez peut-être également récupérer le japonais.

Toutefois, ces caractères saisis ne peuvent pas être récupérés dans les propriétés et seront acquis sous forme d’événements.

Dans l’exemple, un objet texte est placé pour afficher les caractères saisis.

Créez un script. KeyboardTextInput Le nom est .

Entrez le script comme suit :

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

KeyboardLa onTextInput classe a un événement appelé , qui est appelé chaque fois que du texte est entré. OnEnable Ici, la méthode est enregistrée à la synchronisation de etOnDisable annulée à OnTextInput OnTextInput la synchronisation de . Keyboard.current est un objet unique qui existe à partir du moment où le jeu est exécuté jusqu’à ce qu’il soit terminé, alors OnDisable assurez-vous de le libérer au moment de . Si vous pouvez toujours jumeler l’inscription et l’annulation d’événements, vous pouvez le définir à tout autre moment.

OnTextInput Dans la méthode, le caractère entré est défini comme un argument c , il est donc ajouté en tant que texte.

Après EventSystem avoir enregistré le script, attachez-le à et définissez un objet texte à afficher.

Essayez d’exécuter le jeu et d’appuyer sur la touche. Vous devriez voir les caractères saisis. Si vous appuyez dessus en même temps que la touche Maj, vous devriez pouvoir entrer des lettres majuscules et des symboles. Vous pouvez également entrer le japonais si l’éditeur IME est activé. D’autre part, si vous appuyez sur une touche sans caractère telle que la touche curseur, rien ne se passera.