کی بورڈ کے ساتھ کام کرنا (ان پٹ سسٹم پیکیج ورژن)

جب صفحے کی تازہ کاری :
صفحہ تخلیق تاریخ :

تصدیق کا ماحول

Windows
  • ونڈوز 11
یونٹی ایڈیٹر
  • 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 اسکرپٹ کو ٹیکسٹ آبجیکٹ سے منسلک کریں اور ٹیکسٹ آبجیکٹ کو گھمانے کے لئے سیٹ کریں۔

اس بات کو یقینی بنائیں کہ جب کھیل چل رہا ہو اور اسپیس بار تھام رہا ہو تو @ علامت ہر طرف گھومتی ہے۔

تمام دبائی ہوئی چابیاں حاصل کریں

ان تمام چابیوں کو ظاہر کرنے کی کوشش کریں جو آپ متن کے طور پر دبا رہے ہیں۔ آپ جو کلید دبا رہے ہیں اسے ظاہر کرنے کے لئے آپ نے ٹیکسٹ آبجیکٹ رکھا ہے۔

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 کلید کو ظاہر کرنے کے لئے ٹیکسٹ آبجیکٹ سے منسلک اور سیٹ کرتا ہے۔

گیم چلائیں اور تصدیق کریں کہ آپ جو کلید دبا رہے ہیں وہ ظاہر ہوتی ہے۔

ویسے، اگر آپ بہت ساری چابیاں دبائیں تو بھی، تمام چابیاں ظاہر نہیں ہوسکتی ہیں، لیکن اس کے بارے میں فکر نہ کریں کیونکہ کی بورڈ وائرنگ کی وجہ سے یہ ایک جسمانی مسئلہ ہے.

ٹائپ کردہ حروف حاصل کریں

اب تک ، آپ کو اس قسم کی چابی ملتی تھی جسے آپ نے دبایا تھا ، لیکن ان کرداروں کو حاصل کرنا بھی ممکن ہے جو آپ نے اصل میں ٹائپ کیے تھے۔ مثال کے طور پر ، اگر "اے" کلید دبائی جاتی ہے تو ، حرف "اے" حاصل کیا جاسکتا ہے ، اور اگر "شفٹ + اے" کلید دبائی جاتی ہے تو ، حرف "اے" حاصل کیا جاسکتا ہے۔ اگر آئی ایم ای فعال ہے تو ، آپ جاپانی کو بھی بازیافت کرسکتے ہیں۔

تاہم ، ان داخل کردہ حروف کو خصوصیات میں بازیافت نہیں کیا جاسکتا ہے اور واقعات کی شکل میں حاصل کیا جائے گا۔

نمونے میں ، داخل کردہ حروف کو ظاہر کرنے کے لئے ایک ٹیکسٹ آبجیکٹ رکھا گیا ہے۔

اسکرپٹ بنائیں۔ 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 ، اسے منسلک کریں اور ڈسپلے کے لئے ٹیکسٹ آبجیکٹ سیٹ کریں۔

کھیل کو چلانے اور کلید دبانے کی کوشش کریں۔ آپ کو داخل کردہ کرداروں کو دیکھنا چاہئے۔ اگر آپ اسے شفٹ کلید کے ساتھ ہی دباتے ہیں تو ، آپ کو بڑے حروف اور علامتوں کو داخل کرنے کے قابل ہونا چاہئے۔ اگر آئی ایم ای فعال ہو تو آپ جاپانی بھی داخل ہوسکتے ہیں۔ دوسری طرف ، اگر آپ غیر حروف کی کلید جیسے کرسر کلید دبائیں تو ، کچھ بھی نہیں ہوگا۔