Utilizzo della tastiera (versione del pacchetto del sistema di input)

Pagina aggiornata :
Data di creazione della pagina :

Ambiente di verifica

Finestre
  • Windows 11
Unity Editor
  • 2020.3.25F1
Pacchetto del sistema di input
  • 1.2.0

Prerequisiti per questo suggerimento

Le seguenti impostazioni sono state effettuate in anticipo come premessa per la descrizione di questo suggerimento.

Determinare il momento in cui viene premuto un tasto specifico

Quando si preme un tasto, provare a spostare l'oggetto. Posiziona un oggetto di testo nell'area di disegno per confermare lo spostamento. Le dimensioni e la posizione possono essere appropriate.

La gestione della tastiera viene eseguita tramite script. KeyboardOneFrame In questo caso, lo creiamo come .

Il codice è simile al seguente:

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 È possibile ottenere lo stato corrente della pressione dei tasti della tastiera ecc. da . keyboard.xxxxxxx.wasPressedThisFrame Restituisce solo true l'ora del momento in cui viene premuto il tasto. In questo codice, nel momento in cui si preme il tasto cursore, viene eseguita l'operazione Move sull'oggetto transform Text . Poiché viene elaborato solo al momento della pressione, il movimento non continua anche se viene premuto il tasto.

Dopo EventSystem aver salvato lo script, allegare all'oggetto KeyboardOneFrame e fare clic su Impostare l'oggetto di testo da spostare nell'oggetto Text.

Prova a eseguire il gioco e controlla se il simbolo @ si sposta quando premi il tasto cursore. Inoltre, assicurarsi che tenendo premuto il tasto non si sposti il simbolo @.

Quali tipi di chiavi possono essere determinati?

È scritto sul sito ufficiale, quindi controlla lì.

Determinare il momento in cui viene rilasciata una chiave specifica

Non creiamo un campione, ma nel momento in cui lo premi è determinato dalla proprietà, mentre il momento wasPressedThisFrame wasReleasedThisFrame in cui lo rilasci può essere giudicato da .

Determinare premendo un tasto specifico

Questo è determinato anche dallo script. Puoi aggiungerlo al codice precedente, ma questa volta creeremo un nuovo file di script chiamato e lo KeyboardPress scriveremo .

Lo script è simile al seguente:

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

Mentre la barra spaziatrice viene premuta, l'oggetto di testo viene ruotato. keyboard.xxxxxxxx.isPressed restituisce per l'intera true durata della chiave.

Allegare lo EventSystem script salvato a Text Object e impostare l'oggetto di testo da ruotare.

Assicurati che il simbolo @ ruoti completamente mentre il gioco è in esecuzione e tieni premuta la barra spaziatrice.

Ottieni tutti i tasti premuti

Prova a visualizzare tutti i tasti che stai premendo come testo. È stato inserito un oggetto di testo per visualizzare il tasto che si sta premendo.

KeyboardAllKeys Creare uno script con il nome .

Lo script è simile al seguente:

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 consente di ottenere informazioni su tutte le chiavi. È possibile estrarre solo quelli che sono veri da isPressed quei tasti e recuperare solo i tasti che si stanno premendo. Successivamente, il tasto che stai premendo viene convertito in una stringa e visualizzato come testo.

Lo EventSystem script creato si allega e imposta un oggetto di testo per la visualizzazione del tasto di pressione.

Esegui il gioco e verifica che venga visualizzato il tasto che stai premendo.

A proposito, anche se premi molti tasti, tutti i tasti potrebbero non essere visualizzati, ma non preoccuparti perché è un problema fisico dovuto al cablaggio della tastiera.

Ottenere caratteri digitati

Fino ad ora, hai ottenuto il tipo di tasto che hai premuto, ma è anche possibile ottenere i caratteri che hai effettivamente digitato. Ad esempio, se si preme il tasto "A", è possibile ottenere la lettera "a" e se si preme il tasto "Maiusc + A", è possibile ottenere la lettera "A". Se l'IME è abilitato, è anche possibile recuperare il giapponese.

Tuttavia, questi caratteri immessi non possono essere recuperati nelle proprietà e verranno acquisiti sotto forma di eventi.

Nell'esempio viene inserito un oggetto di testo per visualizzare i caratteri immessi.

Creare uno script. KeyboardTextInput Il nome è .

Immettere lo script come segue:

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 dispone di un evento denominato , che viene chiamato ogni volta che viene immesso del testo. OnEnable Qui, il metodo viene registrato al momento di eOnDisable annullato al OnTextInput OnTextInput momento di . Keyboard.current è un oggetto unico che esiste dal momento in cui il gioco viene eseguito fino a quando non viene terminato, quindi OnDisable assicurati di rilasciarlo al momento di . Se riesci sempre ad abbinare la registrazione e l'annullamento dell'evento, puoi impostarlo in qualsiasi altro momento.

OnTextInput Nel metodo, il carattere immesso viene impostato come argomento c , quindi viene aggiunto come testo.

Dopo EventSystem aver salvato lo script, allegarlo e impostare un oggetto di testo per la visualizzazione.

Prova a eseguire il gioco e a premere il tasto. Dovresti vedere i caratteri inseriti. Se lo premi contemporaneamente al tasto Maiusc, dovresti essere in grado di inserire lettere maiuscole e simboli. È inoltre possibile immettere il giapponese se l'IME è abilitato. D'altra parte, se si preme un tasto non carattere come il tasto cursore, non accadrà nulla.