Näppäimistön käyttäminen (syöttöjärjestelmäpaketin versio)

Sivu päivitetty :
Sivun luontipäivämäärä :

Varmennusympäristö

Windows
  • Windows 11
Unity-editori
  • 2020.3.25F1
Syöttöjärjestelmän paketti
  • 1.2.0

Tämän vinkin edellytykset

Seuraavat asetukset on tehty etukäteen tämän vinkin kuvauksen lähtökohtana.

Määritä hetki, jolloin tiettyä näppäintä painetaan

Kun painat näppäintä, yritä siirtää objektia. Aseta tekstiobjekti piirtoalustalle siirron vahvistamiseksi. Koko ja sijainti voivat olla sopivia.

Näppäimistön käsittely tapahtuu skriptien avulla. KeyboardOneFrame Tässä tapauksessa luomme sen muodossa .

Koodi näyttää tältä:

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 Saat nykyisen näppäimistön näppäinpainalluksen tilan jne. keyboard.xxxxxxx.wasPressedThisFrame Palauttaa vain true sen hetken ajoituksen, jolloin näppäintä painetaan. Tässä koodissa, kun kohdistinnäppäintä painetaan, Siirrä-toiminto suoritetaan tekstiobjektille transform . Koska sitä käsitellään vain puristushetkellä, liike ei jatku, vaikka näppäintä painettaisiin.

Kun olet EventSystem tallentanut komentosarjan, liitä objektiin KeyboardOneFrame ja napsauta Määritä siirrettävä tekstiobjekti Teksti-objektiin.

Yritä suorittaa peli ja tarkistaa, liikkuuko @-merkki, kun painat nuolinäppäintä. Varmista myös, että näppäimen pitäminen painettuna ei siirrä @-merkkiä.

Millaisia avaimia voidaan määrittää?

Se on kirjoitettu virallisilla verkkosivuilla, joten tarkista sieltä.

Määritä hetki, jolloin tietty avain vapautetaan

Emme luo näytettä, mutta hetki wasPressedThisFrame , jolloin painat sitä, määräytyy ominaisuuden mukaan, kun taas julkaisuhetki wasReleasedThisFrame voidaan arvioida .

Määritä samalla, kun painat tiettyä näppäintä

Tämä määräytyy myös käsikirjoituksen mukaan. Voit lisätä sen edelliseen koodiin, mutta tällä kertaa luomme uuden komentosarjatiedoston nimeltä ja kirjoita se KeyboardPress .

Skripti näyttää tältä:

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

Kun välilyöntiä painetaan, tekstiobjektia kierretään. keyboard.xxxxxxxx.isPressed palauttaa avaimen koko true voimassaoloajan.

Liitä EventSystem tallennettu komentosarja tekstiobjektiin ja määritä tekstiobjekti kierrettäväksi.

Varmista, että @-merkki pyörii kokonaan, kun peli on käynnissä ja pitää välilyöntiä painettuna.

Hanki kaikki painetut näppäimet

Yritä näyttää kaikki painamasi näppäimet tekstinä. Olet asettanut tekstiobjektin painamasi näppäimen näyttämiseksi.

KeyboardAllKeys Luo komentosarja, jonka nimi on .

Skripti näyttää tältä:

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 Voit saada tietoja kaikista avaimista. Voit poimia näistä näppäimistä vain ne, jotka ovat totta isPressed , ja hakea vain näppäimet, joita painat. Tämän jälkeen painamasi näppäin muunnetaan merkkijonoksi ja näytetään tekstinä.

Luotu EventSystem skripti liitetään tekstiobjektiin ja asettaa sen painonäppäimen näyttämistä varten.

Suorita peli ja varmista, että painamasi näppäin tulee näkyviin.

Muuten, vaikka painat paljon näppäimiä, kaikkia näppäimiä ei ehkä näytetä, mutta älä huoli siitä, koska se on fyysinen ongelma näppäimistön johdotuksen vuoksi.

Kirjoitettujen merkkien hakeminen

Tähän asti sinulla on painamasi näppäintyyppi, mutta on myös mahdollista saada kirjoittamasi merkit. Esimerkiksi, jos "A" -näppäintä painetaan, voidaan saada kirjain "a" ja jos "Shift + A" -näppäintä painetaan, kirjain "A" voidaan saada. Jos kirjoitustuki on käytössä, voit ehkä noutaa myös japaninkieliä.

Näitä syötettyjä merkkejä ei kuitenkaan voi noutaa ominaisuuksista, ja ne hankitaan tapahtumien muodossa.

Näytteessä on tekstiobjekti, joka näyttää syötetyt merkit.

Luo komentosarja. KeyboardTextInput Nimi on .

Kirjoita komentosarja seuraavasti:

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

KeyboardLuokalla onTextInput on tapahtuma nimeltä , jota kutsutaan aina, kun tekstiä syötetään. OnEnable Tässä menetelmä rekisteröidään jaOnDisable peruutetaan OnTextInput OnTextInput . Keyboard.current on yksilöllinen objekti, joka on olemassa pelin suoritushetkestä sen lopettamiseen, joten OnDisable muista vapauttaa se . Jos voit aina yhdistää tapahtumaan rekisteröitymisen ja peruutuksen, voit määrittää sen milloin tahansa.

OnTextInput Menetelmässä syötetty merkki asetetaan argumentiksi c , joten se liitetään tekstinä.

Kun olet EventSystem tallentanut komentosarjan, liitä se ja aseta tekstiobjekti näytettäväksi.

Yritä suorittaa peli ja painaa näppäintä. Sinun pitäisi nähdä syötetyt merkit. Jos painat sitä samanaikaisesti Shift-näppäimen kanssa, sinun pitäisi pystyä syöttämään isoja kirjaimia ja symboleja. Voit myös kirjoittaa japania, jos kirjoitustuki on käytössä. Toisaalta, jos painat ei-merkkistä näppäintä, kuten kohdistinnäppäintä, mitään ei tapahdu.