از کنترل های ورودی بهینه شده با لمس با کنترل روی صفحه استفاده کنید

صفحه به روز شده :
تاریخ ایجاد صفحه :

محیط تایید

ویندوز
  • ویندوز 11
ویرایشگر یونیتی
  • دانلود: 2020.3.25f1
بسته سیستم ورودی
  • 1.2.0

پیشنیازهای این نکته

تنظیمات زیر از قبل به عنوان یک فرض برای توصیف این نکته ساخته شده است.

شما همچنین باید با نکات زیر اشنا باشید:

درباره کنترل روی صفحه نمایش برای لمس

من اغلب از صفحه کلید یا گیم پد برای بازی کردن استفاده می کنم. در دستگاه هایی که فقط می توانند با لمس کار کنند، مانند گوشی های هوشمند، شما بازی را با لمس انجام می دهید.

بسته سیستم ورودی Unity از کنترل روی صفحه برای شبیه سازی تعاملات لمسی استفاده می کند، به طوری که انها توسط یک کنترل کننده کنترل می شوند.

قبل از کنترل روی صفحه

این مقاله کمی طولانی است، اما این موضوع به طور مستقیم به کنترل روی صفحه نمایش مرتبط نیست. اگر بتوانید از بسته سیستم ورودی در مراحل دیگر برای بررسی ورودی مانند گیم پد استفاده کنید، خوب است.

در این نکته، ما یک نقشه عمل ایجاد خواهیم کرد. توضیح می دهد که چگونه برای شبیه سازی لمس یک گیم پد به عنوان اگر شما در حال تعامل با ان.

به هر حال، همچنین از روش استفاده از کلاس ها و Gamepad کلاس ها در Keyboard اسکریپت ها به جای نقشه های اکشن پشتیبانی می کند. من این بار ان را توضیح نمی دهم، اما اگر می خواهید ان را با ان کلاس ها امتحان کنید، می توانید کد توصیف شده در صفحه بعدی را اماده کنید.

ابتدا یک شیء متنی را روی Canvas قرار دهید تا ورودی های خود را نمایش دهید. بعدا، جسم لمسی را در پایین قرار می دهیم، بنابراین مقداری فضا را ترک کنید.

اول، یک نقشه عمل به شرح زیر ایجاد کنید: شما همان Action را ایجاد می کنید که هنگام توصیف نقشه عمل انجام دادید.

از انجا که توضیح نقشه عمل مهمترین چیز نیست، اتصال ساده است. لطفا برای جزئیات بیشتر در مورد نقشه های عمل به صفحه زیر مراجعه کنید.

این بار، کسب ورودی توسط اسکریپت به جای "ارسال پیام" یا "Invoke Unity Events" انجام می شود. این نیز به اسکریپت ها محدود نمی شود و حتی اگر از "ارسال پیام" و غیره استفاده کنید، به درستی کار می کند.

اطمینان حاصل کنید که کد را از نقشه عمل تولید کرده اید.

فیلمنامه به این شکل است: این تقریبا همان است که هنگام توضیح نقشه عمل است.

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، و کلید های صفحه کلید زمانی که شما برخی از شی بر روی صفحه نمایش را لمس می کنید. به هر حال، ان را می گوید لمس، اما ان را نیز با کلیک ماوس کار می کند.

ابتدا دکمه را روی صفحه نمایش قرار دهید. از انجا که شما فقط یک جزء را ضمیمه می کنید، با اشیاء غیر از دکمه ها کار می کند.

یک دکمه ورودی > روی صفحه را از جزء اضافه کنید.

دکمه Gamepad را از مسیر کنترل به سمت شرق تنظیم کنید. این باعث می شود ان را به نظر می رسد به عنوان اگر دکمه شرق در Gamepad فشرده شد زمانی که لمس.

اطمینان حاصل کنید که حمله به نظر می رسد زمانی که شما اجرای بازی و کلیک بر روی دکمه. اگر یک دستگاه قابل لمس است، می توانید تایید کنید که با لمس کار می کند.

روی صفحه نمایش استیک

روی صفحه نمایش استیک به شما اجازه می دهد اشیاء مانند چوب با لمس خود را حرکت می کند. هنگامی که یک چوب را حرکت می دهید، می توانید ان را شبیه سازی کنید، به طوری که یک چوب گیم پد را حرکت داده اید. علاوه بر لمس، می توان ان را با ماوس حرکت داد.

یک شیء دکمه ای را روی صفحه نمایش قرار می دهد که یک چوب لمسی خواهد بود. ما در اینجا از یک دکمه استفاده می کنیم، اما با اشیاء غیر از دکمه ها نیز کار می کند.

در زیر Add Component، Input > On-Screen Stick را انتخاب کنید.

از مسیر کنترل، Gamepad LeftStick تعریف شده در نقشه عمل را انتخاب کنید.

اجرای بازی و سعی کنید کشیدن دکمه چوب. دکمه ها در یک دایره حرکت می کنند، انگار که یک چوب را حرکت می دهد. البته، شما همچنین می توانید بررسی کنید که محتوای ورودی در هنگام اجرا واکشی شده است.

در این مورد، ما یک دکمه قرار داده ایم، اما همچنین می توان ان را مانند یک چوب مجازی با قرار دادن یک قاب دایره ای و یک شی چوب گرد به نظر رسید.

به هر حال، این محدوده متحرک را می توان در "محدوده حرکت" روی صفحه نمایش تغییر داد.