Utilizarea cu tastatura (versiunea pachetului sistemului de intrare)
Mediul de verificare
- Windows
-
- Ferestre 11
- Unity Editor
-
- 2020.3.25F1
- Pachet sistem de intrare
-
- 1.2.0
Cerințe preliminare pentru acest sfat
Următoarele setări au fost făcute în avans ca premisă pentru descrierea acestui sfat.
Determinați momentul în care este apăsată o anumită tastă
Când apăsați o tastă, încercați să mutați obiectul. Plasează un obiect text în Planșă pentru a confirma mutarea. Dimensiunea și poziția pot fi adecvate.
Manipularea tastaturii se face prin scripturi. KeyboardOneFrame
În acest caz, îl creăm ca .
Codul arată astfel:
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
Puteți obține tasta curentă a tastaturii, apăsați starea etc. de la .
keyboard.xxxxxxx.wasPressedThisFrame
Returnează numai true
sincronizarea momentului în care este apăsată tasta.
În acest cod, în momentul în care este apăsată tasta cursorului, operația Mutare este efectuată pe obiectul transform
Text .
Deoarece este procesată numai în momentul apăsatului, mișcarea nu continuă chiar dacă tasta este apăsată.
După EventSystem
salvarea scriptului, atașați-l la obiect KeyboardOneFrame
și faceți clic pe
Setați obiectul text de mutat la obiectul Text.
Încercați să rulați jocul și să verificați dacă marcajul @ se mișcă atunci când apăsați tasta cursorului. De asemenea, asigurați-vă că menținerea apăsată a tastei nu mișcă simbolul @.
Ce tipuri de chei pot fi determinate?
Este scris pe site-ul oficial, așa că vă rugăm să verificați acolo.
Determinați momentul în care este eliberată o anumită cheie
Nu creăm un eșantion, dar momentul în care îl apăsați este determinat de proprietate, în timp ce momentul wasPressedThisFrame
wasReleasedThisFrame
în care îl eliberați poate fi judecat prin .
Determinați în timp ce apăsați o anumită tastă
Acest lucru este determinat și de scenariu. Îl puteți adăuga la codul anterior, dar de data aceasta vom crea un nou fișier script numit și scrieți-l KeyboardPress
.
Scenariul arată astfel:
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);
}
}
}
În timp ce bara de spațiu este apăsată, obiectul text este rotit.
keyboard.xxxxxxxx.isPressed
returnează pentru întreaga true
durată a cheii.
Atașați scriptul EventSystem
salvat la obiectul text și setați obiectul text să fie rotit.
Asigurați-vă că simbolul @ se rotește până la capăt în timp ce jocul rulează și țineți apăsată bara de spațiu.
Obțineți toate tastele apăsate
Încercați să afișați toate tastele pe care le apăsați ca text. Ați plasat un obiect text pentru a afișa tasta pe care o apăsați.
KeyboardAllKeys
Creați un script cu numele .
Scenariul arată astfel:
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ă permite să obțineți informații despre toate cheile.
Puteți extrage numai cele adevărate din isPressed
acele taste și puteți prelua numai tastele pe care le apăsați.
După aceea, tasta pe care o apăsați este convertită într-un șir și afișată ca text.
Scriptul EventSystem
creat se atașează la și setează un obiect text pentru afișarea tastei de apăsare.
Rulați jocul și verificați dacă apare tasta pe care o apăsați.
Apropo, chiar dacă apăsați o mulțime de taste, este posibil ca toate tastele să nu fie afișate, dar nu vă faceți griji, deoarece este o problemă fizică din cauza cablării tastaturii.
Obținerea caracterelor tastate
Până acum, ați obținut tipul de tastă pe care l-ați apăsat, dar este, de asemenea, posibil să obțineți caracterele pe care le-ați tastat. De exemplu, dacă este apăsată tasta "A", se poate obține litera "a", iar dacă se apasă tasta "Shift + A", se poate obține litera "A". Dacă IME este activat, este posibil să reușiți să regăsiți limba japoneză.
Cu toate acestea, aceste caractere introduse nu pot fi recuperate în proprietăți și vor fi achiziționate sub formă de evenimente.
În eșantion, un obiect text este plasat pentru a afișa caracterele introduse.
Creați un script. KeyboardTextInput
Numele este .
Introduceți scriptul după cum urmează:
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
Clasa onTextInput
are un eveniment numit , care este apelat ori de câte ori este introdus textul.
OnEnable
Aici, metoda este înregistrată la momentul șiOnDisable
anulată la OnTextInput
OnTextInput
momentul .
Keyboard.current
este un obiect unic care există din momentul în care jocul este executat până când este terminat, deci OnDisable
asigurați-vă că îl eliberați la momentul .
Dacă puteți asocia oricând înregistrarea și anularea evenimentului, o puteți seta în orice alt moment.
OnTextInput
În metodă, caracterul introdus este setat ca argument c
, deci este adăugat ca text.
După EventSystem
salvarea scriptului, atașați-l și setați un obiect text pentru afișare.
Încercați să rulați jocul și să apăsați tasta. Ar trebui să vedeți caracterele introduse. Dacă îl apăsați în același timp cu tasta Shift, ar trebui să puteți introduce majuscule și simboluri. De asemenea, puteți introduce limba japoneză dacă IME este activat. Pe de altă parte, dacă apăsați o tastă fără caracter, cum ar fi tasta cursorului, nu se va întâmpla nimic.