הפעלה עם המקלדת (גירסת חבילת מערכת קלט)
סביבת אימות
- חלונות
-
- חלונות 11
- עורך Unity
-
- 2020.3.25F1
- חבילת מערכת קלט
-
- 1.2.0
תנאים מוקדמים לטיפ זה
ההגדרות הבאות נקבעו מראש כהנחת יסוד לתיאור עצה זו.
קביעת המקשים על מקש מסוים
בעת הקשה על מקש, נסה להזיז את האובייקט. מקם אובייקט טקסט בבד הציור כדי לאשר את המהלך. הגודל והמיקום יכולים להיות מתאימים.
הטיפול במקלדת נעשה על ידי סקריפטים. KeyboardOneFrame
במקרה זה, אנו יוצרים אותו כ- .
הקוד נראה כך:
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
אתה יכול לקבל את מקשי המקלדת הנוכחיים, לחץ על סטטוס וכו 'מ .
keyboard.xxxxxxx.wasPressedThisFrame
true
החזרת העיתוי של רגע ההקשה על המקש בלבד.
בקוד זה, ברגע הקשה על מקש הסמן, הפעולה Move מתבצעת על אובייקט transform
הטקסט .
מכיוון שהוא מעובד רק ברגע הלחיצה, התנועה אינה נמשכת גם אם לוחצים על המקש.
לאחר EventSystem
שמירת הסקריפט, צרף לאובייקט KeyboardOneFrame
ולחץ על
הגדר את אובייקט הטקסט להעברה לאובייקט טקסט.
נסה להפעיל את המשחק ולבדוק אם הסימן @ זז בעת הקשה על מקש הסמן. כמו כן, ודא שהחזקת המקש לחוץ אינה מזיזה את הסמל @.
אילו סוגי מפתחות ניתן לקבוע?
זה כתוב באתר הרשמי, אז אנא בדוק שם.
קביעת הרגע שבו מפתח מסוים משתחרר
אנחנו לא יוצרים מדגם, אבל ברגע wasPressedThisFrame
שאתה לוחץ על זה נקבע על ידי הנכס, בעוד ברגע wasReleasedThisFrame
שאתה משחרר אותו ניתן לשפוט על ידי .
קביעה בעת הקשה על מקש ספציפי
זה נקבע גם על ידי התסריט. אתה יכול להוסיף אותו לקוד הקודם, אבל הפעם ניצור קובץ סקריפט חדש שנקרא ולכתוב אותו KeyboardPress
.
הסקריפט נראה כך:
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);
}
}
}
בעת לחיצה על מקש הרווח, אובייקט הטקסט מסובב.
keyboard.xxxxxxxx.isPressed
מחזירה עבור כל true
משך המפתח.
צרף את הסקריפט שנשמר לאובייקט טקסט והגדר את EventSystem
אובייקט הטקסט לסיבוב.
ודא שהסמל @ מסתובב עד הסוף בזמן שהמשחק פועל ומחזיק את מקש הרווח.
קבל את כל המקשים הלחוצים
נסה להציג את כל המקשים שאתה מקיש עליהם כטקסט. מיקמת אובייקט טקסט כדי להציג את המקש שאתה מקיש עליו.
KeyboardAllKeys
צור קובץ Script עם השם .
הסקריפט נראה כך:
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
מאפשר לך לקבל מידע על כל המפתחות.
באפשרותך לחלץ רק את אלה הנכונים ממקשים isPressed
אלה ולאחזר רק את המקשים שאתה לוחץ עליהם.
לאחר מכן, המקש שאתה לוחץ עליו מומר למחרוזת ומוצג כטקסט.
EventSystem
הסקריפט שנוצר מתחבר לאובייקט טקסט ומגדיר אותו להצגת מקש הקשה.
הפעל את המשחק וודא שהמקש שאתה לוחץ עליו מופיע.
אגב, גם אם אתה לוחץ על הרבה מקשים, כל המקשים לא יכול להיות מוצג, אבל לא לדאוג לגבי זה כי זה בעיה פיזית עקב חיווט המקלדת.
קבלת תווים מוקלדים
עד עכשיו, קיבלת את סוג המקש שלחצת עליו, אבל אפשר גם לקבל את התווים שהקלדת בפועל. לדוגמה, אם לוחצים על המקש "A", ניתן לקבל את האות "a", ואם לוחצים על המקש "Shift+A", ניתן לקבל את האות "A". אם עורך שיטות הקלט זמין, ייתכן שתוכל גם לאחזר יפנית.
עם זאת, תווים אלה שהוזנו לא ניתן לאחזר במאפיינים והם יירכשו בצורה של אירועים.
בדוגמה, אובייקט טקסט ממוקם להצגת התווים שהוזנו.
צור קובץ Script. KeyboardTextInput
השם הוא .
הזן את הסקריפט באופן הבא:
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
בכיתה onTextInput
יש אירוע שנקרא , אשר נקרא בכל פעם טקסט מוזן.
OnEnable
כאן, השיטה נרשמת בעיתוי של ומבוטלתOnDisable
בעיתוי OnTextInput
OnTextInput
של .
Keyboard.current
הוא אובייקט ייחודי שקיים מרגע הפעלת המשחק ועד לסיומו, לכן OnDisable
הקפד לשחרר אותו בעיתוי של .
אם תמיד תוכלו לשייך הרשמה לאירוע וביטולו, תוכלו להגדיר אותו בכל עת אחרת.
OnTextInput
בשיטה, התו שהוזן מוגדר כארגומנט c
, ולכן הוא מצורף כטקסט.
לאחר EventSystem
שמירת הסקריפט, צרף אותו לאובייקט טקסט והגדר אותו לתצוגה.
נסה להפעיל את המשחק וללחוץ על המקש. אתה אמור לראות את התווים שהוזנו. אם תקיש עליו במקביל למקש Shift, תוכל להזין אותיות רישיות וסימנים. באפשרותך גם להזין יפנית אם IME זמין. מצד שני, אם תקיש על מקש שאינו תו כגון מקש הסמן, לא יקרה דבר.