Використання елементів керування, оптимізованих для сенсорного вводу, із екранним керуванням

Сторінка оновлюється :
Дата створення сторінки :

Середовище перевірки

Вікна
  • вікна 11
Редактор єдності
  • 2020.3.25f1
Пакет системи введення
  • 1.2.0

Передумови для цієї поради

Наступні настройки були зроблені заздалегідь як передумова для опису цієї поради.

Також слід ознайомитися з наступними порадами:

Про екранне керування для сенсорного керування

Я часто використовую клавіатуру або геймпад для ігор. На пристроях, якими можна керувати лише дотиком, наприклад смартфонах, ви будете грати в гру дотиком.

Пакет системи введення Unity використовує екранне керування для імітації сенсорних взаємодій так, ніби ними керує контролер.

Перед екранним керуванням

Ця стаття трохи довга, але ця тема не пов'язана безпосередньо з екранним керуванням. Якщо ви можете використовувати пакет системи введення на інших кроках для перевірки введення, наприклад, геймпад, це нормально.

У цій підказці ми створимо карту дій. У цій статті описано, як імітувати дотик до геймпада так, ніби ви взаємодієте з ним.

До речі, він також підтримує метод використання класів і Gamepad класів в Keyboard скриптах замість карт дій. Цього разу я не поясню цього, але якщо ви хочете спробувати це з цими класами, ви можете замість цього підготувати код, описаний на наступній сторінці.

Спочатку помістіть текстовий об'єкт на полотно, щоб відобразити введені дані. Пізніше ми розмістимо сенсорний об'єкт внизу, тому залишимо трохи місця.

Спочатку створіть карту дій наступним чином: Ви створюєте ту саму дію, що й під час опису карти дій.

Оскільки пояснення карти дій не є головним, прив'язка проста. Будь ласка, зверніться до наступної сторінки для отримання детальної інформації про карти дій.

Цього разу отримання вхідних даних виконується скриптом замість "Send Messages" або "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, а також клавіш на клавіатурі, коли ви торкаєтеся певного об'єкта на екрані. До речі, там написано дотик, але працює і з клацаннями миші.

Спочатку розмістіть кнопку на екрані. Оскільки ви просто прикріплюєте компонент, він працює з іншими об'єктами, крім кнопок.

Додайте екранну кнопку вводу > компонента.

Встановіть кнопку геймпада на схід від Control Path. Це робить вигляд так, ніби кнопка East на геймпаді була натиснута при дотику.

Переконайтеся, що при запуску гри з'являється Attack і натисніть кнопку. Якщо це сенсорний пристрій, можна підтвердити, що він працює сенсорним екраном.

Екранна паличка

Екранна паличка дозволяє переміщати об'єкти, такі як палички, дотиком. Коли ви рухаєте палицю, можна імітувати її так, ніби ви перемістили палицю геймпада. Крім дотику, є також можливість переміщати його мишкою.

Розміщує на екрані кнопковий об'єкт, який буде сенсорною паличкою. Ми використовуємо тут кнопку, але вона також працює з іншими об'єктами, крім кнопок.

У розділі Add Component виберіть Input > On-Screen Stick.

У полі Control Path виберіть Gamepad LeftStick, визначений на карті дій.

Запустіть гру і спробуйте перетягнути кнопку Stick. Кнопки рухаються по колу, як би рухаючи палицею. Звичайно, ви також можете перевірити, чи завантажується вхідний вміст під час його роботи.

В даному випадку ми розмістили кнопку, але також можна зробити її схожою на віртуальну палицю, помістивши круглу рамку і круглий об'єкт-палицю.

До речі, цей рухомий діапазон можна змінити в «Діапазоні руху» On-Screen Stick.