Utilizarea cu tastatura (versiunea pachetului sistemului de intrare)

Pagina actualizată :
Data creării paginii :

Mediul de verificare

Windows
  • Ferestre 11
Unity Editor
  • 2020.3.25F1
Pachet sistem de intrare
  • 1.2.0

Cerințe preliminare pentru acest sfat

Următoarele setări au fost făcute în avans ca premisă pentru descrierea acestui sfat.

Determinați momentul în care este apăsată o anumită tastă

Când apăsați o tastă, încercați să mutați obiectul. Plasează un obiect text în Planșă pentru a confirma mutarea. Dimensiunea și poziția pot fi adecvate.

Manipularea tastaturii se face prin scripturi. KeyboardOneFrame În acest caz, îl creăm ca .

Codul arată astfel:

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 Puteți obține tasta curentă a tastaturii, apăsați starea etc. de la . keyboard.xxxxxxx.wasPressedThisFrame Returnează numai true sincronizarea momentului în care este apăsată tasta. În acest cod, în momentul în care este apăsată tasta cursorului, operația Mutare este efectuată pe obiectul transform Text . Deoarece este procesată numai în momentul apăsatului, mișcarea nu continuă chiar dacă tasta este apăsată.

După EventSystem salvarea scriptului, atașați-l la obiect KeyboardOneFrame și faceți clic pe Setați obiectul text de mutat la obiectul Text.

Încercați să rulați jocul și să verificați dacă marcajul @ se mișcă atunci când apăsați tasta cursorului. De asemenea, asigurați-vă că menținerea apăsată a tastei nu mișcă simbolul @.

Ce tipuri de chei pot fi determinate?

Este scris pe site-ul oficial, așa că vă rugăm să verificați acolo.

Determinați momentul în care este eliberată o anumită cheie

Nu creăm un eșantion, dar momentul în care îl apăsați este determinat de proprietate, în timp ce momentul wasPressedThisFrame wasReleasedThisFrame în care îl eliberați poate fi judecat prin .

Determinați în timp ce apăsați o anumită tastă

Acest lucru este determinat și de scenariu. Îl puteți adăuga la codul anterior, dar de data aceasta vom crea un nou fișier script numit și scrieți-l KeyboardPress .

Scenariul arată astfel:

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

În timp ce bara de spațiu este apăsată, obiectul text este rotit. keyboard.xxxxxxxx.isPressed returnează pentru întreaga true durată a cheii.

Atașați scriptul EventSystem salvat la obiectul text și setați obiectul text să fie rotit.

Asigurați-vă că simbolul @ se rotește până la capăt în timp ce jocul rulează și țineți apăsată bara de spațiu.

Obțineți toate tastele apăsate

Încercați să afișați toate tastele pe care le apăsați ca text. Ați plasat un obiect text pentru a afișa tasta pe care o apăsați.

KeyboardAllKeys Creați un script cu numele .

Scenariul arată astfel:

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 Vă permite să obțineți informații despre toate cheile. Puteți extrage numai cele adevărate din isPressed acele taste și puteți prelua numai tastele pe care le apăsați. După aceea, tasta pe care o apăsați este convertită într-un șir și afișată ca text.

Scriptul EventSystem creat se atașează la și setează un obiect text pentru afișarea tastei de apăsare.

Rulați jocul și verificați dacă apare tasta pe care o apăsați.

Apropo, chiar dacă apăsați o mulțime de taste, este posibil ca toate tastele să nu fie afișate, dar nu vă faceți griji, deoarece este o problemă fizică din cauza cablării tastaturii.

Obținerea caracterelor tastate

Până acum, ați obținut tipul de tastă pe care l-ați apăsat, dar este, de asemenea, posibil să obțineți caracterele pe care le-ați tastat. De exemplu, dacă este apăsată tasta "A", se poate obține litera "a", iar dacă se apasă tasta "Shift + A", se poate obține litera "A". Dacă IME este activat, este posibil să reușiți să regăsiți limba japoneză.

Cu toate acestea, aceste caractere introduse nu pot fi recuperate în proprietăți și vor fi achiziționate sub formă de evenimente.

În eșantion, un obiect text este plasat pentru a afișa caracterele introduse.

Creați un script. KeyboardTextInput Numele este .

Introduceți scriptul după cum urmează:

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

KeyboardClasa onTextInput are un eveniment numit , care este apelat ori de câte ori este introdus textul. OnEnable Aici, metoda este înregistrată la momentul șiOnDisable anulată la OnTextInput OnTextInput momentul . Keyboard.current este un obiect unic care există din momentul în care jocul este executat până când este terminat, deci OnDisable asigurați-vă că îl eliberați la momentul . Dacă puteți asocia oricând înregistrarea și anularea evenimentului, o puteți seta în orice alt moment.

OnTextInput În metodă, caracterul introdus este setat ca argument c , deci este adăugat ca text.

După EventSystem salvarea scriptului, atașați-l și setați un obiect text pentru afișare.

Încercați să rulați jocul și să apăsați tasta. Ar trebui să vedeți caracterele introduse. Dacă îl apăsați în același timp cu tasta Shift, ar trebui să puteți introduce majuscule și simboluri. De asemenea, puteți introduce limba japoneză dacă IME este activat. Pe de altă parte, dacă apăsați o tastă fără caracter, cum ar fi tasta cursorului, nu se va întâmpla nimic.