Näppäimistön käyttäminen (syöttöjärjestelmäpaketin versio)
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;
}
}
Keyboard
Luokalla 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.