Funcionamiento con el teclado (versión del paquete del sistema de entrada)

Actualización de la página :
Fecha de creación de la página :

Entorno de verificación

Windows
  • Ventanas 11
Unity Editor
  • 2020.3.25f1
Paquete del sistema de entrada
  • 1.2.0

Requisitos previos para esta sugerencia

Los siguientes ajustes se han realizado de antemano como premisa para la descripción de este consejo.

Determinar el momento en que se presiona una tecla específica

Cuando presione una tecla, intente mover el objeto. Coloque un objeto de texto en el lienzo para confirmar el movimiento. El tamaño y la posición pueden ser apropiados.

El manejo del teclado se realiza mediante scripts. KeyboardOneFrame En este caso, lo creamos como .

El código se ve así:

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 Puede obtener el estado actual de pulsación de la tecla del teclado, etc. desde . keyboard.xxxxxxx.wasPressedThisFrame Devuelve sólo true el momento en que se pulsa la tecla. En este código, en el momento en que se presiona la tecla del cursor, se realiza la operación Mover en el objeto transform Text. Dado que se procesa solo en el momento de presionar, el movimiento no continúa incluso si se presiona la tecla.

Después de EventSystem guardar el script, adjúntelo al objeto KeyboardOneFrame y haga clic en Establezca el objeto de texto que se va a mover al objeto Text.

Intenta ejecutar el juego y comprueba si la marca @ se mueve cuando presionas la tecla del cursor. Además, asegúrese de que mantener presionada la tecla no mueva el símbolo @.

¿Qué tipos de claves se pueden determinar?

Está escrito en el sitio web oficial, así que por favor verifique allí.

Determinar el momento en que se libera una clave específica

No creamos una muestra, pero el momento en que la presiona está determinada por la propiedad, mientras que el momento wasPressedThisFrame wasReleasedThisFrame en que la libera puede ser juzgada por .

Determinar mientras se presiona una tecla específica

Esto también está determinado por el guión. Puede agregarlo al código anterior, pero esta vez crearemos un nuevo archivo de script llamado y lo KeyboardPress escribiremos .

El script tiene este aspecto:

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

Mientras se presiona la barra espaciadora, se gira el objeto de texto. keyboard.xxxxxxxx.isPressed Devuelve durante toda true la duración de la clave.

Adjunte el script guardado al objeto de texto y establezca el EventSystem objeto de texto que se va a rotar.

Asegúrate de que el símbolo @ gire completamente mientras el juego se ejecuta y mantiene presionada la barra espaciadora.

Obtener todas las teclas presionadas

Intente mostrar todas las teclas que está presionando como texto. Ha colocado un objeto de texto para mostrar la tecla que está presionando.

KeyboardAllKeys Cree un script con el nombre .

El script tiene este aspecto:

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 le permite obtener información sobre todas las claves. Puede extraer solo aquellos que son verdaderos de isPressed esas teclas y recuperar solo las teclas que está presionando. Después de eso, la tecla que está presionando se convierte en una cadena y se muestra como texto.

El EventSystem script creado adjunta y establece un objeto de texto para mostrar la tecla de presión.

Ejecuta el juego y comprueba que aparece la tecla que estás presionando.

Por cierto, incluso si presiona muchas teclas, es posible que no se muestren todas las teclas, pero no se preocupe porque es un problema físico debido al cableado del teclado.

Obtener caracteres escritos

Hasta ahora, obtenía el tipo de tecla que presionó, pero también es posible obtener los caracteres que realmente escribió. Por ejemplo, si se presiona la tecla "A", se puede obtener la letra "a", y si se presiona la tecla "Mayús + A", se puede obtener la letra "A". Si el IME está habilitado, es posible que también pueda recuperar japonés.

Sin embargo, estos caracteres introducidos no se pueden recuperar en las propiedades y se adquirirán en forma de eventos.

En el ejemplo, se coloca un objeto de texto para mostrar los caracteres introducidos.

Cree un script. KeyboardTextInput El nombre es .

Introduzca el script de la siguiente manera:

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 clase tiene un evento llamado , al que se llama siempre que se introduce texto. OnEnable Aquí, el método se registra en el momento de yOnDisable se cancela en OnTextInput OnTextInput el momento de . Keyboard.current es un objeto único que existe desde el momento en que se ejecuta el juego hasta que termina, así que OnDisable asegúrate de liberarlo en el momento de . Si siempre puede emparejar el registro y la cancelación del evento, puede configurarlo en cualquier otro momento.

OnTextInput En el método, el carácter introducido se establece como un argumento c , por lo que se anexa como texto.

Después de guardar el script, adjúntelo y establezca un objeto de EventSystem texto para su visualización.

Intenta ejecutar el juego y presiona la tecla. Debería ver los caracteres introducidos. Si lo presiona al mismo tiempo que la tecla Mayús, debería poder ingresar letras mayúsculas y símbolos. También puede escribir japonés si el IME está habilitado. Por otro lado, si presiona una tecla que no es de caracteres, como la tecla del cursor, no sucederá nada.