Utilizzo della tastiera (versione del pacchetto del sistema di input)
Ambiente di verifica
- Finestre
-
- Windows 11
- Unity Editor
-
- 2020.3.25F1
- Pacchetto del sistema di input
-
- 1.2.0
Prerequisiti per questo suggerimento
Le seguenti impostazioni sono state effettuate in anticipo come premessa per la descrizione di questo suggerimento.
Determinare il momento in cui viene premuto un tasto specifico
Quando si preme un tasto, provare a spostare l'oggetto. Posiziona un oggetto di testo nell'area di disegno per confermare lo spostamento. Le dimensioni e la posizione possono essere appropriate.
La gestione della tastiera viene eseguita tramite script. KeyboardOneFrame
In questo caso, lo creiamo come .
Il codice è simile al seguente:
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
È possibile ottenere lo stato corrente della pressione dei tasti della tastiera ecc. da .
keyboard.xxxxxxx.wasPressedThisFrame
Restituisce solo true
l'ora del momento in cui viene premuto il tasto.
In questo codice, nel momento in cui si preme il tasto cursore, viene eseguita l'operazione Move sull'oggetto transform
Text .
Poiché viene elaborato solo al momento della pressione, il movimento non continua anche se viene premuto il tasto.
Dopo EventSystem
aver salvato lo script, allegare all'oggetto KeyboardOneFrame
e fare clic su
Impostare l'oggetto di testo da spostare nell'oggetto Text.
Prova a eseguire il gioco e controlla se il simbolo @ si sposta quando premi il tasto cursore. Inoltre, assicurarsi che tenendo premuto il tasto non si sposti il simbolo @.
Quali tipi di chiavi possono essere determinati?
È scritto sul sito ufficiale, quindi controlla lì.
Determinare il momento in cui viene rilasciata una chiave specifica
Non creiamo un campione, ma nel momento in cui lo premi è determinato dalla proprietà, mentre il momento wasPressedThisFrame
wasReleasedThisFrame
in cui lo rilasci può essere giudicato da .
Determinare premendo un tasto specifico
Questo è determinato anche dallo script. Puoi aggiungerlo al codice precedente, ma questa volta creeremo un nuovo file di script chiamato e lo KeyboardPress
scriveremo .
Lo script è simile al seguente:
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);
}
}
}
Mentre la barra spaziatrice viene premuta, l'oggetto di testo viene ruotato.
keyboard.xxxxxxxx.isPressed
restituisce per l'intera true
durata della chiave.
Allegare lo EventSystem
script salvato a Text Object e impostare l'oggetto di testo da ruotare.
Assicurati che il simbolo @ ruoti completamente mentre il gioco è in esecuzione e tieni premuta la barra spaziatrice.
Ottieni tutti i tasti premuti
Prova a visualizzare tutti i tasti che stai premendo come testo. È stato inserito un oggetto di testo per visualizzare il tasto che si sta premendo.
KeyboardAllKeys
Creare uno script con il nome .
Lo script è simile al seguente:
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
consente di ottenere informazioni su tutte le chiavi.
È possibile estrarre solo quelli che sono veri da isPressed
quei tasti e recuperare solo i tasti che si stanno premendo.
Successivamente, il tasto che stai premendo viene convertito in una stringa e visualizzato come testo.
Lo EventSystem
script creato si allega e imposta un oggetto di testo per la visualizzazione del tasto di pressione.
Esegui il gioco e verifica che venga visualizzato il tasto che stai premendo.
A proposito, anche se premi molti tasti, tutti i tasti potrebbero non essere visualizzati, ma non preoccuparti perché è un problema fisico dovuto al cablaggio della tastiera.
Ottenere caratteri digitati
Fino ad ora, hai ottenuto il tipo di tasto che hai premuto, ma è anche possibile ottenere i caratteri che hai effettivamente digitato. Ad esempio, se si preme il tasto "A", è possibile ottenere la lettera "a" e se si preme il tasto "Maiusc + A", è possibile ottenere la lettera "A". Se l'IME è abilitato, è anche possibile recuperare il giapponese.
Tuttavia, questi caratteri immessi non possono essere recuperati nelle proprietà e verranno acquisiti sotto forma di eventi.
Nell'esempio viene inserito un oggetto di testo per visualizzare i caratteri immessi.
Creare uno script. KeyboardTextInput
Il nome è .
Immettere lo script come segue:
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
La onTextInput
classe dispone di un evento denominato , che viene chiamato ogni volta che viene immesso del testo.
OnEnable
Qui, il metodo viene registrato al momento di eOnDisable
annullato al OnTextInput
OnTextInput
momento di .
Keyboard.current
è un oggetto unico che esiste dal momento in cui il gioco viene eseguito fino a quando non viene terminato, quindi OnDisable
assicurati di rilasciarlo al momento di .
Se riesci sempre ad abbinare la registrazione e l'annullamento dell'evento, puoi impostarlo in qualsiasi altro momento.
OnTextInput
Nel metodo, il carattere immesso viene impostato come argomento c
, quindi viene aggiunto come testo.
Dopo EventSystem
aver salvato lo script, allegarlo e impostare un oggetto di testo per la visualizzazione.
Prova a eseguire il gioco e a premere il tasto. Dovresti vedere i caratteri inseriti. Se lo premi contemporaneamente al tasto Maiusc, dovresti essere in grado di inserire lettere maiuscole e simboli. È inoltre possibile immettere il giapponese se l'IME è abilitato. D'altra parte, se si preme un tasto non carattere come il tasto cursore, non accadrà nulla.