کھیل کے طرز عمل کو بٹن تفویض کرنے کے لئے ایکشن نقشے استعمال کریں

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

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

Windows
  • ونڈوز 11
یونٹی ایڈیٹر
  • 2020.3.25f1
ان پٹ سسٹم پیکیج
  • 1.2.0

اس ٹوٹکے کے لئے ضروری شرائط

مندرجہ ذیل ترتیبات اس ٹپ کی وضاحت کے لئے بنیاد کے طور پر پیشگی بنائی گئی ہیں۔

ایکشن نقشوں کے بارے میں

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

ایکشن نقشہ بنانا

یہاں ، میں ایک ایکشن نقشہ بنانا چاہتا ہوں اور متن میں صارف کی ان پٹ معلومات کو ظاہر کرنا چاہتا ہوں۔ ایکشن میپس کا استعمال کرتے ہوئے صارف کی ان پٹ حاصل کرنے کے کئی طریقے ہیں۔

ان پٹ ایکشن بنانے کے لئے پروجیکٹ میں کسی بھی فولڈر پر دائیں کلک کریں۔ بنائے جانے والے فولڈر کا مقام من مانی ہے ، لیکن براہ کرم اپنے پروجیکٹ کے مطابق اس کا انتظام کریں۔ فائل کا نام بھی من مانی ہے ، لیکن یہاں InputActionSample یہ ہے۔

جب آپ تخلیق کردہ فائل پر ڈبل کلک کرتے ہیں تو ، درج ذیل ونڈو ظاہر ہوگی۔

سب سے پہلے ، ایکشن نقشہ بنانے کے لئے ایکشن نقشے میں + بٹن پر کلک کریں۔ تخلیق یونٹ کے طور پر ، اگر آپریشن کا مواد منظر پر منحصر ہے تو ، اسے اس یونٹ میں بیان کیا جائے گا۔ مثال کے طور پر ، سائیڈ سکرولنگ ایکشن گیم کی صورت میں ، آپریشن کے مندرجات کارروائی کے دوران اور مینو میں تبدیل ہوجاتے ہیں ، لہذا آپ ہر ایک کے لئے ایک ایکشن نقشہ بنائیں گے۔

یہاں ، مثال کے طور پر ، ہم سائیڈ سکرولنگ ایکشن کی وضاحت کرتے ہیں اور اسے "سائیڈ سکرول ایکشن میپ" کا نام دیتے ہیں۔

اگلا ، کارروائیاں بنائیں۔ چونکہ یہ ایک نمونہ ہے ، لہذا میں ان میں سے زیادہ نہیں بناؤں گا ، لیکن یہاں ہم نقل و حرکت کے لئے "حرکت" اور حملے کے لئے "حملہ" بنائیں گے۔ چونکہ ایک پہلے ہی بنایا جا چکا ہے ، براہ کرم نام تبدیل کریں یا نیا بنائیں ، اوپری دائیں کونے میں + بٹن پر کلک کریں اور اسے داخل کریں۔

سب سے پہلے ، Move ترتیب کو تشکیل دیں۔ کنٹرولر فرض کرتا ہے کہ آپ چھڑی ، ڈی پیڈ ، اور کی بورڈ کرسر کلید استعمال کرتے ہیں۔ سائیڈ سکرولنگ ایکشن کی صورت میں ، ایسے معاملات ہیں جہاں صرف بائیں اور دائیں کا استعمال کیا جاتا ہے ، لیکن یہاں ہم فرض کرتے ہیں کہ آپ اوپری کلید کے ساتھ چھلانگ لگانے اور نیچے کی چابی کے ساتھ جھکنے پر غور کرتے ہوئے چار سمتوں کا استعمال کرتے ہیں۔

جب آپ موو کو منتخب کرتے ہیں تو ، دائیں طرف ایکشن ٹائپ کا انتخاب ہوتا ہے ، لہذا اسے "ویلیو" پر سیٹ کریں۔

آپ کو نیچے کنٹرول کی قسم نظر آئے گی ، لہذا ویکٹر 2 منتخب کریں۔ اس کی وجہ یہ ہے کہ اوپر اور نیچے Y کو تفویض کیا گیا ہے ، اور بائیں اور دائیں ایکس کو تفویض کیے گئے ہیں۔

پھر وہ کلید منتخب کریں جو آپ اس ایونٹ کو تفویض کرنا چاہتے ہیں۔ درمیان میں نو بائنڈنگ منتخب کریں اور دائیں طرف راستہ منتخب کریں۔ یہاں ہم گیم پیڈ لیفٹ اسٹک کا انتخاب کرتے ہیں۔

یہ گیم پیڈ کے لیفٹ اسٹک کو حرکت سے جوڑتا ہے۔

دوسرے کنٹرولرز کو بھی باندھنے کے لئے ، + بٹن سے حرکت کے دائیں طرف "بانڈنگ شامل کریں" منتخب کریں۔

اب جب نو بائنڈنگ شامل کی گئی ہے تو ، ہم گیم پیڈ کے لئے ایک ڈی پیڈ تفویض کرتے ہیں۔

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

اسٹک اور ڈی پیڈ وہ بٹن ہیں جو اوپر ، نیچے ، بائیں اور دائیں کو فرض کرتے ہیں ، لہذا انہیں اس کے ساتھ شامل کیا جاسکتا ہے ، لیکن کی بورڈ کے معاملے میں ، وہ سب سنگل چابیاں ہیں ، لہذا اوپر ، نیچے ، بائیں اور دائیں کی کوئی تعریف نہیں ہے۔ کی بورڈ کو اوپر ، نیچے ، بائیں ، یا دائیں سیٹ کرنے کے لئے ، + بٹن سے نیچے بائیں دائیں کمپوزٹ شامل کریں کو منتخب کریں۔

اس کے بعد ایک 2 ڈی ویکٹر شامل کیا جائے گا اور آپ اسے ہر اپ ڈاؤن بائیں دائیں کو تفویض کرسکتے ہیں ، جیسا کہ نیچے دی گئی تصویر میں دکھایا گیا ہے۔

مثال کے طور پر ، اگر آپ اپ استعمال کرتے ہیں تو ، اپنے کی بورڈ پر "اپ ایرو" سیٹ کریں۔ ویسے ، اگر آپ کو کلید تلاش کرنے میں پریشانی ہو تو ، آپ "سنیں" بٹن پر کلک کرتے ہوئے ہدف کی کلید دبا کر اسے آسانی سے منتخب کرسکتے ہیں۔

اپ اب اپ ایرو کے لئے سیٹ کیا گیا ہے۔

اسی طرح ، نیچے ، بائیں ، اور دائیں سیٹ کریں اور آپ کا کام مکمل ہو گیا ہے۔

یقینا ، نہ صرف کرسر چابیاں بلکہ ڈبلیو اے ایس ڈی بھی سیٹ کیا جاسکتا ہے۔

اگلا، حملے کی تشکیل کریں۔ حملہ تفویض کرنا آسان ہے کیونکہ یہ ایک ہی بٹن ہے۔ سب سے پہلے ، حملہ منتخب کریں اور اس بات کو یقینی بنائیں کہ ایکشن ٹائپ ایک بٹن ہے۔

اس کے بعد کوئی بانڈنگ نہیں منتخب کریں اور وہ بٹن منتخب کریں جسے آپ راستے سے تفویض کرنا چاہتے ہیں۔

اگر آپ مزید شامل کرنا چاہتے ہیں تو ، + بٹن سے "بانڈنگ شامل کریں" منتخب کریں۔

جتنی آپ کی ضرورت ہو شامل کریں. چونکہ اسے ایک بٹن کے طور پر سمجھا جاتا ہے ، لہذا کی بورڈ کو گیم کنٹرولر کی طرح ہی سیٹ کیا جاسکتا ہے۔

جب تمام ترتیبات مکمل ہوجائیں تو ، محفوظ کرنے کے لئے "اثاثہ محفوظ کریں" پر کلک کریں۔ آپ اس کھڑکی کو بند کر سکتے ہیں.

آخر میں ، پروجیکٹ کی ان پٹ ایکشن فائل (اس معاملے میں ، ان پٹ ایکشن سیمپل فائل جو آپ نے پہلے بنائی تھی) کے ساتھ ، انسپکٹر میں "سی # کلاس پیدا کریں" چیک کریں۔ پیرامیٹر شامل کیا جائے گا ، لیکن "لاگو کریں" بٹن پر کلک کریں۔

یہ اسی نام کے ساتھ ایک اسکرپٹ فائل تیار کرے گا۔ اس میں ایسی کلاسیں شامل ہیں جو پروگراموں سے ایکشن نقشے استعمال کرنے کے لئے مفید ہیں۔

ان پٹ معلومات کیسے حاصل کریں

ایکشن نقشے کی بنیاد پر ان پٹ حاصل کرنے کے کئی طریقے ہیں۔ یہ ٹوٹکا تین نمونوں کی وضاحت کرتا ہے ، لیکن اصل میں گیم بناتے وقت ان میں سے کسی ایک پر توجہ مرکوز کرنا بہتر ہے۔ اگر آپ انہیں الگ سے استعمال کرتے ہیں تو ، اس کا انتظام کرنا مشکل ہوگا۔

اس کے علاوہ ، اگر آپ ایک ہی منظر میں متعدد ان پٹ وصول کرنے کے طریقوں کا استعمال کرتے ہیں تو ، پروسیسنگ اندرونی طور پر متصادم ہوسکتی ہے اور صحیح طریقے سے کام نہیں کرتی ہے۔

پیغامات بھیجنے میں ان پٹ معلومات حاصل کریں

یہاں پہلا طریقہ یہ ہے کہ "پیغامات بھیجیں" میں ان پٹ معلومات کیسے حاصل کریں۔

اس بار ، میں متن میں درج کردہ معلومات کو ظاہر کرنا چاہتا ہوں ، لہذا میں ٹیکسٹ آبجیکٹ رکھوں گا۔

اس کے علاوہ ، چونکہ یہ ٹپ متعدد ان پٹ معلومات حاصل کرنے کی کوشش کرے گا ، لہذا ہم جزو کو الگ سے سیٹ کرنے کے لئے ایک خالی آبجیکٹ بنائیں گے۔ نام کچھ بھی ہو سکتا ہے.

اگلا ، خالی آبجیکٹ میں پلیئر ان پٹ جزو شامل کریں۔ پلیئر ان پٹ ایکشن نقشوں اور اسکرپٹس کو مربوط کرنے کے لئے ایک اہم جزو ہے۔

"اجزاء شامل کریں" میں ، "ان پٹ" زمرے میں "پلیئر ان پٹ" ہے ، لہذا اسے شامل کریں۔

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

تصدیق کریں کہ ڈیفالٹ نقشہ وہی ہے جو آپ نے ایکشن نقشے میں بنایا ہے۔

تصدیق کریں کہ طرز عمل "پیغامات بھیجیں" ہے۔

اگلا ، ایک اسکرپٹ بنائیں۔ فائل کا نام کچھ بھی ہوسکتا ہے ، لیکن یہ یہاں InputSendMessage ہے۔

اسکرپٹ اس طرح نظر آتا ہے:

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;

public class InputSendMessage : MonoBehaviour
{
  /// <summary>情報を表示させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  /// <summary>
  /// Move アクションが実行されたときに呼ばれる。
  /// </summary>
  /// <param name="inputValue">入力量。</param>
  public void OnMove(InputValue inputValue)
  {
    var vec = inputValue.Get<Vector2>();
    TextObject.text = $"Move:({vec.x:f2}, {vec.y:f2})\n{TextObject.text}";
  }

  /// <summary>
  /// Attack アクションが実行されたときに呼ばれる。
  /// </summary>
  public void OnAttack(InputValue inputValue)
  {
    TextObject.text = $"Attack:{inputValue.isPressed}\n{TextObject.text}";
  }
}
  • آبجیکٹ میں ایک پلیئر ان پٹ منسلک ہے جو پیغامات بھیجنے کو سیٹ کرتا ہے۔
  • مونو بیہیور سے وراثت

اگر شرائط پوری ہوتی ہیں تو ، اگر آپ "OnXXXXXXXX" نامی طریقہ کار کی وضاحت کرتے ہیں ، ہدف کے طریقہ کار کو اس وقت کہا جائے گا جب مخصوص ایکشن آپریشن انجام دیا جائے گا۔ "XXXXXXXX" ایکشن نقشے میں بنائے گئے اعمال کا نام ہے۔ یہاں ، ہم نے "حرکت" اور "حملہ" ایکشن بنائے ہیں ، لہذا طریقہ کار کے نام بالترتیب "آن مو" اور "آن اٹیک" ہیں۔

OnMove آپ اس کی دلیل InputValue سے رقم درج کروا سکتے ہیں۔ چونکہ کنٹرول ٹائپ کو "ویکٹر 2" پر سیٹ کیا گیا ہے ، لہذا ان پٹ ویلیو InputValue.Get<Vector2> میں وصول کیا جائے گا۔

OnAttackInputValue.isPressed آپ یہ بھی حاصل کرسکتے ہیں کہ آیا آپ دباؤ ڈال رہے ہیں یا نہیں۔

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

کھیل چلائیں اور ایک نظر ڈالیں. اس بار ، میں نے گیم پیڈ اور کی بورڈ کی تعریف شامل کی ہے ، لہذا اس سے کوئی فرق نہیں پڑتا کہ آپ کون سا کام کرتے ہیں۔

جیسا کہ آپ دیکھ سکتے ہیں کہ جب آپ اسے منتقل کرتے ہیں تو ، آپ دیکھ سکتے ہیں کہ طریقہ صرف اس وقت کہا جاتا ہے جب پچھلی حالت سے قدر میں تبدیلی ہوتی ہے۔ مثال کے طور پر ، چھڑی کو بائیں طرف منتقل کرتے وقت ، اسے اکیلے ذہن سے کہا جاتا ہے ، لیکن بائیں طرف نہیں (- OnMove 1،0)۔ OnMove حملے کا بٹن بھی صرف اسی لمحے جواب دیتا ہے جب اسے دبایا جاتا ہے ، اور اگر اسے دبایا اور پکڑا جاتا ہے تو ، طریقہ کار نہیں کہا جاتا ہے۔

لہذا ، مجھے لگتا ہے کہ مثالی استعمال گیم پروسیسنگ انجام دینے کے لئے نہیں ہے جب آنXXXXXXXX کو بلایا جاتا ہے ، بلکہ صرف ان پٹ مواد رکھنے اور گیم کی اپ ڈیٹ پروسیسنگ میں ان اقدار کا استعمال کرنے کے لئے ہے۔

ویسے، موجودہ حالت میں، جب بٹن جاری ہوتا ہے تو اسے نہیں کہا جاتا ہے، لہذا یہ تعین کرنا ممکن نہیں ہے کہ بٹن کب OnAttack جاری ہوتا ہے. اس کا جواب دینے کے لئے ، حملہ ایکشن منتخب کریں جو ایکشن میپ کی ترتیبات میں بٹن کی وضاحت کرتا ہے اور "تعاملات" سے "دبائیں" شامل کریں۔ اس کے بعد ، اضافی پریس کے ٹریگر برتاؤ کو "پریس اینڈ ریلیز" پر سیٹ کریں اور اسے محفوظ کریں۔

جب عملدرآمد کیا جاتا ہے تو ، آپ دیکھ سکتے ہیں کہ بٹن جاری ہونے پر بھی OnAttack اسے بلایا جاتا ہے۔ isPressed false چونکہ یہ بن جاتا ہے ، لہذا اس بات کا تعین کرنا بھی ممکن ہے کہ آیا یہ ریلیز کا وقت ہے یا نہیں۔

ویسے، براہ مہربانی اس تعامل کو حذف کریں کیونکہ یہ مستقبل میں استعمال نہیں کیا جائے گا.

یونیوٹ یونٹی ایونٹس کے ساتھ ان پٹ حاصل کریں

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

سب سے پہلے ، ٹیکسٹ آبجیکٹ رکھیں تاکہ ان پٹ کی معلومات ظاہر کی جاسکے۔

اتحاد کے واقعات کو طلب کریں ایک خالی شے پیدا کرتے ہیں جو متعلقہ کارروائیاں انجام دیتا ہے۔

خالی آبجیکٹ میں ان پٹ > پلیئر ان پٹ شامل کریں۔

ایکشن میپ فائل کو جو آپ نے ایکشن کے لئے بنایا ہے (اس صورت میں ، ان پٹ ایکشن سیمپل) اور اپنے بنائے ہوئے ایکشن میپ (اس صورت میں ، سائیڈ سکرول ایکشن میپ) کو پہلے سے طے شدہ نقشے پر سیٹ کریں۔ اتحاد کے واقعات کو دعوت دینے کے لئے طرز عمل مقرر کریں۔

اسکرپٹ بنائیں۔ نام من مانی ہے، لیکن اس معاملے InputInvokeUnityEvents میں یہ ہے.

اسکرپٹ اس طرح نظر آتا ہے:

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;

public class InputInvokeUnityEvents : MonoBehaviour
{
  /// <summary>情報を表示させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  /// <summary>
  /// Move 操作を行ったときに呼ばれる。
  /// </summary>
  /// <param name="context">コールバック内容。</param>
  public void OnMove(InputAction.CallbackContext context)
  {
    var vec = context.ReadValue<Vector2>();
    TextObject.text = $"Move:({vec.x:f2}, {vec.y:f2})\n{TextObject.text}";
  }

  /// <summary>
  /// Move 操作を行ったときに呼ばれる。
  /// </summary>
  /// <param name="context">コールバック内容。</param>
  public void OnAttack(InputAction.CallbackContext context)
  {
    var value = context.ReadValueAsButton();
    TextObject.text = $"Attack:{value}\n{TextObject.text}";
  }
}

جب صارف اس کے ساتھ بات چیت کرتا ہے تو طریقہ کار کا نام OnMoveOnAttack کہا جاتا ہے ، جیسا کہ پیغامات بھیجنے کے معاملے میں ہوتا ہے۔ اتحاد کے واقعات کو ابھارنے میں ، آپ اس طریقہ کار کا نام اپنی مرضی کے مطابق ترتیب دے سکتے ہیں۔

جب ہر ایک کو بلایا جاتا ہے تو ، اسے دلیل InputAction.CallbackContext کے طور پر منظور کیا جاتا ہے ، لہذا آپ وہاں سے ان پٹ اسٹیٹس حاصل کرسکتے ہیں۔ اگر آپ عمل میں "قدر" مقرر کرتے ہیں تو ، آپ اسے طریقہ کار میں وصول کرسکتے ہیں ، اور اگر آپ ReadValue "بٹن" سیٹ کرتے ReadValueAsButton ہیں تو ، آپ اسے طریقہ کار میں حاصل کرسکتے ہیں۔

اسکرپٹ کو محفوظ کرنے کے بعد ، پلیئر ان پٹ کو اس آبجیکٹ سے منسلک کریں جسے آپ ترتیب دے رہے ہیں اور ڈسپلے ٹیکسٹ آبجیکٹ سیٹ کریں۔

اگلا ، پلیئر ان پٹ میں "ایونٹ" اور "ایکشن میپ کا نام (سائیڈ سکرول ایکشن میپ)" کو وسیع کریں اور آپ کو اپنے بنائے ہوئے اقدامات "منتقل کریں" اور "حملہ" دیکھنا چاہئے۔

سب سے پہلے ، اسے شامل کرنے کے لئے موو پر + بٹن پر کلک کریں۔

نچلے بائیں کونے میں آبجیکٹ آپ کی اپنی آبجیکٹ ہے ، اور فنکشن اس طریقہ کار پر سیٹ کیا گیا ہے جو آپ نے ابھی بنایا OnMove ہے۔

حملے کے واقعہ کو بھی ترتیب دیں۔

یہ دیکھنے کے لئے کھیل چلائیں کہ یہ کس طرح کام کرتا ہے.

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

ان پٹ معلومات حاصل کرنے کے لئے خود کار طریقے سے تیار کردہ اسکرپٹ کا استعمال کریں

تیسرا سیکشن بیان کرتا ہے کہ ایکشن میپ فائل سے تیار کردہ اسکرپٹ کا استعمال کرتے ہوئے ان پٹ معلومات کیسے حاصل کی جائیں۔

چونکہ حصول کے دیگر عمل کے ساتھ تنازعات کا امکان ہے ، لہذا براہ کرم حصول کے دیگر عمل کو غیر فعال کریں۔

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

اس کے علاوہ ، ان پٹ معلومات کو بازیافت کرنے کے لئے ایک خالی آبجیکٹ بنائیں۔ یہ مضمون خود کار طریقے سے تیار کردہ اسکرپٹ استعمال کرتا ہے ، لہذا آپ کو پلیئر ان پٹ شامل کرنے کی ضرورت نہیں ہے۔

ایکشن نقشے سے خود بخود پیدا ہونے والا اسکرپٹ صرف ایک لائبریری ہے ، لہذا ایک علیحدہ کنٹرول اسکرپٹ بنائیں۔ نام من مانی ہے، لیکن اس معاملے InputScript میں یہ ہے.

اسکرپٹ اس طرح نظر آتا ہے:

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;

public class InputScript : MonoBehaviour
{
  /// <summary>情報を表示させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  /// <summary>アクションマップから自動生成されたクラス。</summary>
  private InputActionSample _actionMap;

  private void Awake()
  {
    // 各操作を行ったときに呼ばれるイベントを設定する
    _actionMap = new InputActionSample();
    _actionMap.SideScrollActionMap.Move.performed += context => OnMove(context);
    _actionMap.SideScrollActionMap.Attack.performed += context => OnAttack(context);
  }

  private void OnEnable()
  {
    // このオブジェクトが有効になったときにアクションマップを有効にする
    _actionMap.Enable();
  }

  private void OnDisable()
  {
    // このオブジェクトが無効になったときにアクションマップが余計な動作を起こさないように無効にする
    _actionMap.Disable();
  }

  /// <summary>
  /// Move 操作をした時に呼ばれるメソッドです。
  /// </summary>
  /// <param name="context">コールバックパラメータ。</param>
  public void OnMove(InputAction.CallbackContext context)
  {
    // Move の入力量を取得
    var vec = context.ReadValue<Vector2>();
    TextObject.text = $"Move:({vec.x:f2}, {vec.y:f2})\n{TextObject.text}";
  }

  /// <summary>
  /// Attack 操作をした時に呼ばれるメソッドです。
  /// </summary>
  /// <param name="context">コールバックパラメータ。</param>
  public void OnAttack(InputAction.CallbackContext context)
  {
    // Attack ボタンの状態を取得
    var value = context.ReadValueAsButton();
    TextObject.text = $"Attack:{value}\n{TextObject.text}";
  }
}

فیلڈ میں ایکشن نقشے سے خود کار طریقے سے تیار کردہ کلاس InputActionSample کی وضاحت کریں۔ یہ کلاس ایکشن میپ میں مرتب کردہ ہر عمل کی وضاحت کرتی ہے ، اور آپ ان واقعات کو ترتیب دے سکتے ہیں جنہیں ان اعمال کو انجام دینے پر کہا جاتا ہے۔

Awake طریقہ کار میں ، InputActionSample ایک مثال بنائی جاتی ہے اور عمل کے وقت بلائے جانے والے واقعہ کو سیٹ کیا جاتا ہے۔ جب OnMoveآپ ان کارروائیوں کو انجام دیتے ہیں OnAttack تو ، طریقہ کار اب کہا جاتا ہے۔

تاہم ، چونکہ ہم صرف واقعہ کو یہاں سیٹ کرتے ہیں ، لہذا جب ایکشن نقشہ کو فعال کرنے کے لئے کہا جاتا ہے تو Enable ہمیں OnEnable طریقہ کار کو کال کرنے کی ضرورت ہوتی ہے۔

نیز ، چونکہ صارف کے ان پٹ طرز عمل کو عالمی آپریشن کے طور پر سمجھا جاتا ہے ، اس آبجیکٹ کے غیر قانونی ہونے کے بعد ایکشن میپ کو اضافی کام کرنے سے روکنے OnDisable کے لئے ، ہم اسے غیر فعال کرنے کے طریقہ کار میں Disable طریقہ کہتے ہیں۔

اسکرپٹ کو محفوظ کرنے کے بعد ، اسے اپنے تخلیق کردہ خالی آبجیکٹ سے منسلک کریں اور ڈسپلے کے لئے ٹیکسٹ آبجیکٹ سیٹ کریں۔

یہ دیکھنے کے لئے کھیل چلائیں کہ یہ کس طرح کام کرتا ہے.

جیسا کہ آپ دیکھ سکتے ہیں ، جب موو آپریشن بن جاتا ہے تو OnMove طریقہ کار نہیں کہا جاتا ہے (0، 0). مجھے یقین نہیں ہے کہ ایسا کیوں ہے ، لیکن ایسا لگتا ہے کہ انجام دیا جانے والا واقعہ اصل میں کی اسٹروک کو فعال کرنے والے کو لے جاتا ہے۔

ویسے ، اگر آپ نے حملے کے لئے ایکشن میپ میں تعاملات کو سیٹ نہیں کیا ہے تو ، جب آپ بٹن جاری کرتے ہیں تو OnAttack اسے نہیں بلایا جائے گا۔

اس سے نمٹنے کے لئے canceled ، آپ کو ایک ایونٹ ترتیب دینے کی ضرورت ہے. اگر آپ (0، 0) پر خصوصی پروسیسنگ نہیں کرنا چاہتے ہیں تو، آپ طریقہ کار کو اس طرح کال کرسکتے ہیں جیسے یہ ہے OnMove . حملے کے بارے میں بھی ایسا ہی ہے۔

private void Awake()
{
  // 各操作を行ったときに呼ばれるイベントを設定する
  _actionMap = new InputActionSample();
  _actionMap.SideScrollActionMap.Move.performed += context => OnMove(context);
  _actionMap.SideScrollActionMap.Attack.performed += context => OnAttack(context);
  _actionMap.SideScrollActionMap.Move.canceled += context => OnMove(context);       // 追加
  _actionMap.SideScrollActionMap.Attack.canceled += context => OnAttack(context);   // 追加
}

چلائیں اور تصدیق کریں کہ حرکت: (0، 0) یا حملہ: غلط ظاہر ہوتا ہے۔