التشغيل باستخدام لوحة المفاتيح (إصدار حزمة نظام الإدخال)

تحديث الصفحة :
تاريخ إنشاء الصفحة :

بيئة التحقق

نوافذ
  • ويندوز ١١
محرر الوحدة
  • 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 توقيت لحظة الضغط على المفتاح. في هذه التعليمة البرمجية ، في اللحظة التي يتم فيها الضغط على مفتاح المؤشر ، يتم تنفيذ عملية النقل على كائن 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 النصي المحفوظ ب Text Object وقم بتعيين كائن النص المراد تدويره.

تأكد من أن الرمز @ يدور بالكامل أثناء تشغيل اللعبة مع الاستمرار على مفتاح المسافة.

الحصول على جميع المفاتيح المضغوطة

حاول عرض جميع المفاتيح التي تضغط عليها كنص. لقد قمت بوضع كائن نصي لعرض المفتاح الذي تضغط عليه.

KeyboardAllKeys إنشاء برنامج نصي بالاسم .

يبدو البرنامج النصي كما يلي:

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". إذا تم تمكين محرر أسلوب الإدخال، فقد تتمكن أيضا من استرداد اللغة اليابانية.

ومع ذلك ، لا يمكن استرداد هذه الأحرف المدخلة في الخصائص وسيتم الحصول عليها في شكل أحداث.

في النموذج، يتم وضع كائن نصي لعرض الأحرف المدخلة.

إنشاء برنامج نصي. 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;
  }
}

KeyboardonTextInput يحتوي الفصل على حدث يسمى ، والذي يتم استدعاؤه كلما تم إدخال نص. OnEnable هنا ، يتم تسجيل الطريقة في توقيت وإلغاءOnDisable في OnTextInput OnTextInput توقيت . Keyboard.current هو كائن فريد موجود من وقت تنفيذ اللعبة حتى إنهائها ، لذا OnDisable تأكد من تحريره في توقيت . إذا كان بإمكانك دائما إقران تسجيل الحدث وإلغائه، فيمكنك تعيينه في أي وقت آخر.

OnTextInput في الطريقة ، يتم تعيين الحرف الذي تم إدخاله كوسيطة c ، لذلك يتم إلحاقه كنص.

بعد EventSystem حفظ البرنامج النصي ، قم بإرفاقه وتعيين كائن نصي للعرض.

حاول تشغيل اللعبة والضغط على المفتاح. يجب أن ترى الأحرف التي تم إدخالها. إذا ضغطت عليه في نفس الوقت مع مفتاح Shift ، فيجب أن تكون قادرا على إدخال الأحرف الكبيرة والرموز. يمكنك أيضا إدخال اللغة اليابانية إذا تم تمكين محرر أسلوب الإدخال. من ناحية أخرى ، إذا ضغطت على مفتاح غير حرف مثل مفتاح المؤشر ، فلن يحدث شيء.