הפעלה עם המקלדת (גירסת חבילת מערכת קלט)

עודכן דף :
תאריך יצירת דף :

סביבת אימות

חלונות
  • חלונות 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 זמין. מצד שני, אם תקיש על מקש שאינו תו כגון מקש הסמן, לא יקרה דבר.