Darbs ar tastatūru (ievades sistēmas pakotnes versija)
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;
}
}
Keyboard
Klasei 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.