Darbs ar tastatūru (ievades sistēmas pakotnes versija)

Lapa atjaunota :
Lapas izveides datums :

Verifikācijas vide

Windows
  • Operētājsistēmā Windows 11
Vienotības redaktors
  • 2020.3.25f1
Ievades sistēmas pakete
  • 1.2.0

Priekšnoteikumi šim padomam

Tālāk norādītie iestatījumi ir veikti iepriekš kā priekšnoteikums šī padoma aprakstam.

Nosakiet brīdi, kad tiek nospiests konkrēts taustiņš

Nospiežot taustiņu, mēģiniet pārvietot objektu. Novietojiet teksta objektu audeklā, lai apstiprinātu pārvietošanu. Izmērs un novietojums var būt piemērots.

Tastatūras apstrāde tiek veikta ar skriptiem. KeyboardOneFrame Šajā gadījumā mēs to izveidojam kā .

Kods izskatās šādi:

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 Jūs varat iegūt pašreizējo tastatūras taustiņu, nospiešanas statusu utt., No . keyboard.xxxxxxx.wasPressedThisFrame Atgriež tikai true taustiņa nospiešanas brīža laiku. Šajā kodā brīdī, kad tiek nospiests kursora taustiņš, teksta objektam transform tiek veikta pārvietošanas operācija . Tā kā tas tiek apstrādāts tikai nospiešanas brīdī, kustība neturpinās pat tad, ja tiek nospiests taustiņš.

Pēc EventSystem skripta saglabāšanas pievienojiet objektam KeyboardOneFrame un noklikšķiniet uz Iestatiet teksta objektu, kas jāpārvieto uz teksta objektu.

Mēģiniet palaist spēli un pārbaudīt, vai @ atzīme pārvietojas, nospiežot kursora taustiņu. Pārliecinieties arī, ka, turot nospiestu taustiņu, simbols @ netiek pārvietots.

Kāda veida atslēgas var noteikt?

Tas ir rakstīts oficiālajā vietnē, tāpēc, lūdzu, pārbaudiet tur.

Nosakiet konkrētas atslēgas atbrīvošanas brīdi

Mēs neveidojam paraugu, bet brīdi, kad jūs to nospiežat, nosaka īpašums, bet brīdi, kad wasPressedThisFrame wasReleasedThisFrame to atbrīvojat, var spriest pēc .

Nosakiet, nospiežot konkrētu taustiņu

To nosaka arī skripts. Jūs varat to pievienot iepriekšējam kodam, bet šoreiz mēs izveidosim jaunu skripta failu, ko sauc un uzrakstīs .KeyboardPress

Skripts izskatās šādi:

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

Kamēr tiek nospiesta atstarpes taustiņa, teksta objekts tiek pagriezts. keyboard.xxxxxxxx.isPressed Atgriežas visā true atslēgas darbības laikā.

Pievienojiet saglabāto skriptu EventSystem teksta objektam un iestatiet pagriežamo teksta objektu.

Pārliecinieties, vai simbols @ griežas līdz galam, kamēr spēle darbojas un tur atstarpes taustiņu.

Iegūstiet visus nospiestos taustiņus

Mēģiniet parādīt visus taustiņus, kurus nospiežat, kā tekstu. Jūs esat ievietojis teksta objektu, lai parādītu taustiņu, kuru nospiežat.

KeyboardAllKeys Izveidojiet skriptu ar nosaukumu .

Skripts izskatās šādi:

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 ļauj iegūt informāciju par visiem taustiņiem. No isPressed šiem taustiņiem var izvilkt tikai tos, kas ir patiesi, un izgūt tikai tos taustiņus, kurus nospiežat. Pēc tam taustiņš, kuru nospiežat, tiek pārveidots par virkni un parādīts kā teksts.

Izveidotais EventSystem skripts pievieno un iestata teksta objektu, lai parādītu nospiešanas taustiņu.

Palaidiet spēli un pārbaudiet, vai parādās taustiņš, kuru nospiežat.

Starp citu, pat ja nospiežat daudz taustiņu, visi taustiņi var netikt parādīti, bet neuztraucieties par to, jo tā ir fiziska problēma tastatūras vadu dēļ.

Ierakstītu rakstzīmju iegūšana

Līdz šim jūs saņēmāt nospiestā taustiņa veidu, taču ir iespējams iegūt arī rakstzīmes, kuras faktiski ierakstījāt. Piemēram, ja tiek nospiests taustiņš "A", var iegūt burtu "a", un, nospiežot taustiņu "Shift+A", var iegūt burtu "A". Ja IME ir iespējots, iespējams, varēsit izgūt arī japāņu valodu.

Tomēr šīs ievadītās rakstzīmes nevar izgūt īpašumos, un tās tiks iegūtas notikumu veidā.

Paraugā tiek ievietots teksta objekts, lai parādītu ievadītās rakstzīmes.

Izveidojiet skriptu. KeyboardTextInput Nosaukums ir .

Ievadiet skriptu šādi:

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

KeyboardKlasei onTextInput ir notikums ar nosaukumu , kas tiek izsaukts ikreiz, kad tiek ievadīts teksts. OnEnable Šeit metode tiek reģistrēta laikā unOnDisable atcelta OnTextInput OnTextInput laikā, kad . Keyboard.current ir unikāls objekts, kas pastāv no brīža, kad spēle tiek izpildīta, līdz brīdim, kad tā tiek pārtraukta, tāpēc OnDisable noteikti atbrīvojiet to laikā. Ja jūs vienmēr varat savienot pārī pasākuma reģistrāciju un atcelšanu, varat to iestatīt jebkurā citā laikā.

OnTextInput Metodē ievadītā rakstzīme tiek iestatīta kā arguments c , tāpēc tā tiek pievienota kā teksts.

Pēc EventSystem skripta saglabāšanas pievienojiet to un iestatiet teksta objektu parādīšanai.

Mēģiniet palaist spēli un nospiest taustiņu. Jums vajadzētu redzēt ievadītās rakstzīmes. Ja nospiežat to vienlaikus ar taustiņu Shift, jums vajadzētu būt iespējai ievadīt lielos burtus un simbolus. Japāņu valodu var ievadīt arī tad, ja IME ir iespējots. No otras puses, ja nospiežat taustiņu, kas nav rakstzīmes, piemēram, kursora taustiņu, nekas nenotiks.