Beroperasi dengan Keyboard (Versi Paket Sistem Input)
Lingkungan verifikasi
- Windows
-
- jendela 11
- Editor Kesatuan
-
- 25f1/3/2020
- Paket Sistem Input
-
- 1.2.0
Prasyarat untuk tip ini
Pengaturan berikut telah dibuat sebelumnya sebagai premis untuk deskripsi tip ini.
Tentukan saat tombol tertentu ditekan
Saat Anda menekan tombol, coba pindahkan objek. Tempatkan objek teks di Canvas untuk mengonfirmasi pemindahan. Ukuran dan posisinya bisa sesuai.
Penanganan keyboard dilakukan oleh skrip. KeyboardOneFrame
Dalam hal ini, kami membuatnya sebagai file .
Kodenya terlihat seperti ini:
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
Anda bisa mendapatkan tombol keyboard saat ini, status tekan, dll. dari .
keyboard.xxxxxxx.wasPressedThisFrame
Hanya true
mengembalikan waktu saat tombol ditekan.
Dalam kode ini, saat tombol kursor ditekan, operasi Move dilakukan pada objek transform
Text .
Karena diproses hanya pada saat menekan, gerakan tidak berlanjut bahkan jika tombol ditekan.
Setelah EventSystem
menyimpan skrip, lampirkan ke objek KeyboardOneFrame
dan klik
Atur objek teks yang akan dipindahkan ke objek Teks.
Coba jalankan game dan periksa apakah tanda @ bergerak saat Anda menekan tombol kursor. Juga, pastikan bahwa menahan tombol tidak memindahkan simbol @.
Jenis kunci apa yang dapat ditentukan?
Itu tertulis di situs web resmi, jadi silakan periksa di sana.
Menentukan saat kunci tertentu dirilis
Kami tidak membuat sampel, tetapi saat Anda menekannya ditentukan oleh properti, sedangkan saat wasPressedThisFrame
wasReleasedThisFrame
Anda melepaskannya dapat dinilai oleh .
Menentukan sambil menekan tombol tertentu
Ini juga ditentukan oleh naskah. Anda dapat menambahkannya ke kode sebelumnya, tetapi kali ini kita akan membuat file skrip baru bernama dan menulisnya KeyboardPress
.
Skripnya terlihat seperti ini:
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);
}
}
}
Saat bilah spasi ditekan, objek teks diputar.
keyboard.xxxxxxxx.isPressed
kembali untuk seluruh true
durasi kunci.
Lampirkan skrip yang EventSystem
disimpan ke Objek Teks dan atur objek teks yang akan diputar.
Pastikan simbol @ berputar sepenuhnya saat game berjalan dan tahan bilah spasi.
Dapatkan semua tombol yang ditekan
Cobalah untuk menampilkan semua tombol yang Anda tekan sebagai teks. Anda telah menempatkan objek teks untuk menampilkan tombol yang Anda tekan.
KeyboardAllKeys
Buat skrip dengan nama .
Skripnya terlihat seperti ini:
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
memungkinkan Anda mendapatkan informasi tentang semua kunci.
Anda hanya dapat mengekstrak yang benar dari isPressed
tombol tersebut dan hanya mengambil tombol yang Anda tekan.
Setelah itu, tombol yang Anda tekan diubah menjadi string dan ditampilkan sebagai teks.
Skrip EventSystem
yang dibuat menempel dan mengatur objek teks untuk menampilkan tombol penekan.
Jalankan game dan verifikasi bahwa tombol yang Anda tekan muncul.
Omong-omong, meskipun Anda menekan banyak tombol, semua tombol mungkin tidak ditampilkan, tetapi jangan khawatir karena ini adalah masalah fisik karena kabel keyboard.
Mendapatkan karakter yang diketik
Sampai sekarang, Anda mendapatkan jenis tombol yang Anda tekan, tetapi juga mungkin untuk mendapatkan karakter yang benar-benar Anda ketik. Misalnya, jika tombol "A" ditekan, huruf "a" dapat diperoleh, dan jika tombol "Shift + A" ditekan, huruf "A" dapat diperoleh. Jika IME diaktifkan, Anda mungkin juga dapat mengambil bahasa Jepang.
Namun, karakter yang dimasukkan ini tidak dapat diambil di properti dan akan diperoleh dalam bentuk peristiwa.
Dalam sampel, objek teks ditempatkan untuk menampilkan karakter yang dimasukkan.
Buat skrip. KeyboardTextInput
Namanya .
Masukkan skrip sebagai berikut:
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
Kelas onTextInput
memiliki acara yang disebut , yang dipanggil setiap kali teks dimasukkan.
OnEnable
Di sini, metode terdaftar pada waktu danOnDisable
dibatalkan pada OnTextInput
OnTextInput
waktu .
Keyboard.current
adalah objek unik yang ada sejak game dijalankan hingga dihentikan, jadi OnDisable
pastikan untuk melepaskannya pada waktu .
Jika Anda selalu dapat memasangkan pendaftaran dan pembatalan acara, Anda dapat mengaturnya di lain waktu.
OnTextInput
Dalam metode ini, karakter yang dimasukkan ditetapkan sebagai argumen c
, sehingga ditambahkan sebagai teks.
Setelah EventSystem
menyimpan skrip, lampirkan ke dan atur objek teks untuk ditampilkan.
Coba jalankan game dan tekan tombol. Anda akan melihat karakter yang dimasukkan. Jika Anda menekannya bersamaan dengan tombol Shift, Anda seharusnya dapat memasukkan huruf kapital dan simbol. Anda juga dapat memasukkan bahasa Jepang jika IME diaktifkan. Di sisi lain, jika Anda menekan tombol non-karakter seperti tombol kursor, tidak akan terjadi apa-apa.