Funcionament amb el teclat (versió del paquet del sistema d'entrada)

Pàgina actualitzada :
Data de creació de la pàgina :

Entorn de verificació

Windows
  • Finestres 11
Editor d'unitat
  • 25.3.2020
Paquet del sistema d'entrada
  • 1.2.0

Requisits previs per a aquest consell

La configuració següent s'ha fet amb antelació com a premissa per a la descripció d'aquest consell.

Determineu el moment en què es prem una tecla específica

Quan premeu una tecla, intenteu moure l'objecte. Col·loqueu un objecte de text al llenç per confirmar el moviment. La mida i la posició poden ser adequades.

El maneig del teclat es realitza mitjançant scripts. KeyboardOneFrame En aquest cas, el creem com .

El codi té aquest aspecte:

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 Podeu obtenir la tecla actual del teclat, l'estat de la premsa, etc. de . keyboard.xxxxxxx.wasPressedThisFrame retorna només true el temps del moment en què es prem la tecla. En aquest codi, en el moment en què es prem la tecla del cursor, es realitza l'operació Mou sobre l'objecte transform Text . Com que només es processa en el moment de prémer, el moviment no continua encara que es premi la tecla.

Després EventSystem de desar l'script, adjunteu-lo a l'objecte KeyboardOneFrame i feu clic a Definiu l'objecte de text que es mourà a l'objecte Text.

Proveu d'executar el joc i comprovar si la marca @ es mou quan premeu la tecla del cursor. A més, assegureu-vos que mantenint premuda la tecla no es mogui el símbol @.

Quins tipus de claus es poden determinar?

Està escrit al lloc web oficial, així que consulteu allà.

Determineu el moment en què s'allibera una clau específica

No creem una mostra, però en el moment en què la prems ve determinada per la propietat, mentre que en el moment wasPressedThisFrame wasReleasedThisFrame en què la deixes anar es pot jutjar per .

Determinar en prémer una tecla específica

Això també ho determina el guió. Podeu afegir-lo al codi anterior, però aquesta vegada crearem un nou fitxer de script anomenat i l'escriurem KeyboardPress .

El guió té aquest aspecte:

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 es prem la barra espaiadora, l'objecte de text es gira. keyboard.xxxxxxxx.isPressed Devolucions per a tota true la durada de la clau.

Adjunteu l'script desat a l'objecte de text i configureu l'objecte EventSystem de text que voleu girar.

Assegureu-vos que el símbol @ giri tot el camí mentre el joc s'executa i manteniu premuda la barra espaiadora.

Obteniu totes les tecles premudes

Proveu de mostrar totes les tecles que premeu com a text. Heu col·locat un objecte de text per mostrar la tecla que esteu prement.

KeyboardAllKeys Creeu un script amb el nom .

El guió té aquest aspecte:

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 Permet obtenir informació sobre totes les claus. Podeu extreure només les que siguin certes d'aquestes isPressed tecles i recuperar només les tecles que esteu prement. Després d'això, la tecla que premeu es converteix en una cadena i es mostra com a text.

L'script EventSystem creat s'adjunta i estableix un objecte de text per mostrar la tecla de prémer.

Executeu el joc i verifiqueu que aparegui la tecla que esteu prement.

Per cert, fins i tot si premeu moltes tecles, és possible que no es mostrin totes les tecles, però no us preocupeu perquè és un problema físic a causa del cablejat del teclat.

Obtenir caràcters escrits

Fins ara, obteníeu el tipus de tecla que premeu, però també és possible obtenir els caràcters que realment heu escrit. Per exemple, si es prem la tecla "A", es pot obtenir la lletra "a" i, si es prem la tecla "Majúscules+A", es pot obtenir la lletra "A". Si l'IME està habilitat, és possible que també pugueu recuperar japonès.

No obstant això, aquests caràcters introduïts no es poden recuperar en propietats i s'adquiriran en forma d'esdeveniments.

A la mostra, es col·loca un objecte de text per mostrar els caràcters introduïts.

Creeu un script. KeyboardTextInput El nom és .

Introduïu l'script de la manera següent:

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 té un esdeveniment anomenat , que s'anomena cada vegada que s'introdueix text. OnEnable Aquí, el mètode es registra en el moment de iOnDisable es cancel·la en OnTextInput OnTextInput el moment de . Keyboard.current és un objecte únic que existeix des del moment en què s'executa el joc fins que s'acaba, així OnDisable que assegureu-vos de llançar-lo en el moment de . Si sempre pots vincular el registre i la cancel·lació de l'esdeveniment, pots configurar-lo en qualsevol altre moment.

OnTextInput En el mètode, el caràcter introduït s'estableix com a argument c , de manera que s'afegeix com a text.

Després EventSystem de desar l'script, adjunteu-lo i configureu un objecte de text per mostrar-lo.

Proveu d'executar el joc i prémer la tecla. Hauríeu de veure els personatges introduïts. Si la premeu al mateix temps que la tecla Majúscules, hauríeu de poder introduir majúscules i símbols. També podeu introduir japonès si l'IME està habilitat. D'altra banda, si premeu una tecla que no és caràcter com la tecla del cursor, no passarà res.