استخدام عناصر التحكم في الإدخال المحسنة باللمس مع التحكم على الشاشة

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

بيئة التحقق

نوافذ
  • ويندوز ١١
محرر الوحدة
  • 2020.3.25f1
حزمة نظام الإدخال
  • 1.2.0

المتطلبات الأساسية لهذه النصيحة

تم إجراء الإعدادات التالية مسبقا كمقدمة لوصف هذه النصيحة.

يجب أن تكون أيضا على دراية بالنصائح التالية:

حول التحكم على الشاشة للمس

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

تستخدم حزمة نظام الإدخال في Unity التحكم على الشاشة لمحاكاة تفاعلات اللمس كما لو تم التحكم فيها بواسطة وحدة تحكم.

قبل التحكم على الشاشة

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

في هذه النصيحة ، سنقوم بإنشاء خريطة عمل. يصف كيفية محاكاة لمس لوحة الألعاب كما لو كنت تتفاعل معها.

بالمناسبة ، يدعم أيضا طريقة استخدام الفئات والفئات Gamepad في Keyboard البرامج النصية بدلا من خرائط العمل. لن أشرح ذلك هذه المرة ، ولكن إذا كنت ترغب في تجربته مع هذه الفصول ، فيمكنك إعداد الكود الموضح في الصفحة التالية بدلا من ذلك.

أولا ، ضع كائن نصي على اللوحة القماشية لعرض مدخلاتك. في وقت لاحق ، سنضع كائن اللمس في الأسفل ، لذا اترك بعض المساحة.

أولا ، قم بإنشاء خريطة عمل على النحو التالي: أنت تقوم بإنشاء نفس الإجراء الذي قمت به عندما وصفت خريطة الإجراءات.

نظرا لأن شرح خريطة العمل ليس هو الشيء الرئيسي ، فإن الربط بسيط. يرجى الرجوع إلى الصفحة التالية للحصول على تفاصيل حول خرائط العمل.

هذه المرة ، يتم إجراء اكتساب المدخلات عن طريق البرنامج النصي بدلا من "إرسال الرسائل" أو "استدعاء أحداث الوحدة". لا يقتصر هذا أيضا على البرامج النصية ، وهو يعمل بشكل صحيح حتى إذا كنت تستخدم "إرسال الرسائل" وما إلى ذلك.

تأكد من إنشاء الرمز من خريطة الإجراءات.

يبدو البرنامج النصي كما يلي: هو نفسه تقريبا عند شرح خريطة العمل.

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

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

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

  private void Awake()
  {
    // 各操作を行ったときに呼ばれるイベントを設定する
    _actionMap = new InputActionSample();
    _actionMap.Action2D.Move.performed += context => OnMove(context);
    _actionMap.Action2D.Attack.performed += context => OnAttack(context);
    _actionMap.Action2D.Move.canceled += context => OnMove(context);
    _actionMap.Action2D.Attack.canceled += 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}";
  }
}

البرنامج EventSystem النصي مرفق ب .

قم بتشغيل اللعبة لمعرفة ما إذا كانت تعمل كخريطة عمل.

الزر على الشاشة

يحاكي الزر على الشاشة الضغط على الأزرار الموجودة على لوحة الألعاب ، مثل A و B ، والمفاتيح الموجودة على لوحة المفاتيح عند لمس كائن ما على الشاشة. بالمناسبة ، تقول اللمس ، لكنها تعمل أيضا مع نقرات الماوس.

ضع الزر أولا على الشاشة. نظرا لأنك تقوم فقط بإرفاق مكون ، فإنه يعمل مع كائنات أخرى غير الأزرار.

أضف زر إدخال > على الشاشة من المكون.

اضبط زر لوحة الألعاب شرقا من مسار التحكم. هذا يجعل الأمر يبدو كما لو تم الضغط على الزر الشرقي على لوحة الألعاب عند لمسه.

تأكد من ظهور الهجوم عند تشغيل اللعبة وانقر فوق الزر. إذا كان جهازا ملموسا ، فيمكنك التأكد من أنه يعمل باللمس.

عصا على الشاشة

تتيح لك العصا على الشاشة تحريك الأشياء مثل العصي بلمستك. عندما تحرك عصا ، من الممكن محاكاتها كما لو كنت قد حركت عصا لوحة الألعاب. بالإضافة إلى اللمس ، من الممكن أيضا تحريكه بالماوس.

يضع كائن زر على الشاشة سيكون عصا تعمل باللمس. نحن نستخدم زرا هنا ، ولكنه يعمل أيضا مع كائنات أخرى غير الأزرار.

ضمن إضافة مكون، حدد إدخال > عصا على الشاشة.

من مسار التحكم، حدد عصا LeftStick للوحة الألعاب المحددة في خريطة الإجراءات.

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

في هذه الحالة ، وضعنا زرا ، ولكن من الممكن أيضا جعله يبدو وكأنه عصا افتراضية عن طريق وضع إطار دائري وكائن عصا مستديرة.

بالمناسبة ، يمكن تغيير هذا النطاق المتحرك في "نطاق الحركة" للعصا التي تظهر على الشاشة.