Используйте оптимизированные для сенсорного ввода элементы управления с экранным управлением

Страница обновлена :
Дата создания страницы :

Среда верификации

Виндоус
  • Windows 11
Редактор Unity
  • 2020.3.25f1
Входной системный пакет
  • 1.2.0

Предпосылки для этого совета

Следующие настройки были сделаны заранее в качестве предпосылки для описания этого совета.

Вы также должны быть знакомы со следующими советами:

О экранном управлении сенсорным экраном

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

Пакет системы ввода Unity использует On-Screen Control для имитации сенсорных взаимодействий, как если бы они управлялись контроллером.

Перед экранным управлением

Эта статья немного длинная, но эта тема не имеет прямого отношения к экранному управлению. Если вы можете использовать системный пакет ввода на других этапах проверки ввода, например геймпад, это нормально.

В этом совете мы создадим карту действий. Описывает, как имитировать прикосновение к геймпаду, как если бы вы взаимодействовали с ним.

Кстати, он также поддерживает метод использования классов и 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, и клавиш на клавиатуре при касании какого-либо объекта на экране. Кстати, на нем написано касание, но он также работает с щелчками мыши.

Сначала разместите кнопку на экране. Поскольку вы просто присоединяете компонент, он работает с объектами, отличными от кнопок.

Добавьте кнопку ввода > экрана из компонента.

Установите кнопку геймпада на восток от пути управления. Это создает впечатление, что кнопка East на геймпаде была нажата при прикосновении.

Убедитесь, что при запуске игры появляется Атака, и нажмите кнопку. Если это сенсорное устройство, вы можете убедиться, что оно работает с сенсорным экраном.

Экранный джойстик

Экранный джойстик позволяет перемещать объекты, такие как палочки, одним касанием. Когда вы перемещаете джойстик, его можно имитировать, как если бы вы перемещали джойстик геймпада. Помимо касания, его также можно перемещать с помощью мыши.

Помещает на экран кнопочный объект, который будет сенсорным джойстиком. Здесь мы используем кнопку, но она также работает с объектами, отличными от кнопок.

В разделе «Добавить компонент» выберите «Ввод» > «Экранный джойстик».

В разделе «Путь управления» выберите левый джойстик геймпада, определенный на карте действий.

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

В этом случае мы разместили кнопку, но также можно сделать ее похожей на виртуальную палочку, поместив круглую рамку и круглый объект-палку.

Кстати, этот подвижный диапазон можно изменить в «Диапазоне перемещения» экранного джойстика.