Töötamine klaviatuuriga (sisendsüsteemi paketi versioon)
Kontrollimise keskkond
- Windows
-
- Windows 11
- Ühtsuse toimetaja
-
- 2020.3.25f1
- Sisendsüsteemi pakett
-
- 1.2.0
Selle näpunäite eeltingimused
Selle vihje kirjeldamise eelduseks on eelnevalt tehtud järgmised sätted.
Määrake hetk, mil konkreetset klahvi vajutatakse
Kui vajutate klahvi, proovige objekti teisaldada. Käigu kinnitamiseks asetage tekstiobjekt lõuendile. Suurus ja asend võivad olla sobivad.
Klaviatuuri käsitsemine toimub skriptide abil. KeyboardOneFrame
Sel juhul loome selle kui .
Kood näeb välja selline:
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
Praeguse klaviatuuriklahvi vajutamise oleku jne saate aadressilt .
keyboard.xxxxxxx.wasPressedThisFrame
tagastab ainult true
klahvi vajutamise aja.
Selles koodis, kui kursoriklahvi vajutatakse, tehakse tekstiobjektil transform
teisaldamistoiming .
Kuna seda töödeldakse ainult vajutamise hetkel, ei jätku liikumine isegi siis, kui klahvi vajutatakse.
Pärast EventSystem
skripti salvestamist manustage objektile KeyboardOneFrame
ja klõpsake nuppu
Seadke tekstiobjekt teisaldatavaks tekstiobjektiks.
Proovige mängu käivitada ja kontrollige, kas @-märk liigub, kui vajutate kursoriklahvi. Samuti veenduge, et klahvi all hoidmine ei liigutaks sümbolit @.
Milliseid võtmeid saab määrata?
See on kirjutatud ametlikul veebisaidil, nii et palun kontrollige seal.
Määrake konkreetse võtme vabastamise aeg
Me ei loo näidist, kuid hetke, mil te seda vajutate, määrab omadus, samas kui hetke wasPressedThisFrame
, mil wasReleasedThisFrame
te selle vabastate, saab hinnata .
Määrake konkreetse klahvi vajutamisel
Selle määrab ka skript. Saate selle eelmisele koodile lisada, kuid seekord loome uue skriptifaili nimega ja kirjutame selle KeyboardPress
.
Skript näeb välja selline:
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);
}
}
}
Tühikuklahvi vajutamise ajal pööratakse tekstiobjekti.
keyboard.xxxxxxxx.isPressed
tagastab kogu true
võtme kestuse.
Manustage EventSystem
salvestatud skript tekstiobjektile ja määrake pööratav tekstiobjekt.
Veenduge, et sümbol @ pöörleks mängu töötamise ja tühikuklahvi hoidmise ajal lõpuni.
Hankige kõik vajutatud klahvid
Proovige kuvada kõik klahvid, mida vajutate, tekstina. Olete vajutatava klahvi kuvamiseks paigutanud tekstiobjekti.
KeyboardAllKeys
Looge skript nimega .
Skript näeb välja selline:
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õimaldab teil saada teavet kõigi võtmete kohta.
Nendest klahvidest isPressed
saate välja võtta ainult need, mis on tõesed, ja tuua ainult need klahvid, mida vajutate.
Pärast seda teisendatakse vajutatav klahv stringiks ja kuvatakse tekstina.
Loodud EventSystem
skript kinnitub ja määrab tekstiobjekti vajutamisklahvi kuvamiseks.
Käivitage mäng ja kontrollige, kas ilmub klahv, mida vajutate.
Muide, isegi kui vajutate palju klahve, ei pruugi kõiki klahve kuvada, kuid ärge muretsege selle pärast, sest see on klaviatuuri juhtmestiku tõttu füüsiline probleem.
Tipitud märkide hankimine
Siiani on teil vajutatud klahvitüüp, kuid on võimalik saada ka tegelikult sisestatud märke. Näiteks kui vajutatakse klahvi "A", saab tähe "a" ja kui vajutatakse klahvi "Shift+A", saab tähe "A". Kui IME on lubatud, on võimalik, et saate ka jaapani keele alla laadida.
Kuid neid sisestatud märke ei saa atribuutidest alla laadida ja need omandatakse sündmuste kujul.
Proovis paigutatakse sisestatud märkide kuvamiseks tekstiobjekt.
Skripti loomine. KeyboardTextInput
Nimi on .
Sisestage skript järgmiselt:
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
Klassis onTextInput
on sündmus nimega , mida nimetatakse teksti sisestamisel.
OnEnable
Siin registreeritakse meetod ajastusel jaOnDisable
tühistatakse OnTextInput
OnTextInput
.
Keyboard.current
on ainulaadne objekt, mis eksisteerib alates mängu käivitamisest kuni selle lõpetamiseni, seega OnDisable
vabastage see kindlasti .
Kui saate alati sündmuse registreerimise ja tühistamise siduda, saate selle määrata igal muul ajal.
OnTextInput
Meetodis on sisestatud märk seatud argumendina c
, nii et see lisatakse tekstina.
Pärast EventSystem
skripti salvestamist lisage see ja määrake kuvamiseks tekstiobjekt.
Proovige mängu käivitada ja vajutada klahvi. Peaksite nägema sisestatud märke. Kui vajutate seda samal ajal tõstuklahviga Shift, peaksite saama sisestada suurtähti ja sümboleid. Võite sisestada ka jaapani keele, kui IME on lubatud. Teisest küljest, kui vajutate mittemärgilist klahvi, näiteks kursoriklahvi, ei juhtu midagi.