Използване на оптимизирани за докосване контроли за въвеждане с екранно управление

Страницата се актуализира :
Дата на създаване на страница :

Среда за проверка

Уиндоус
  • Прозорци 11
Редактор на единство
  • 2020.3.25ф1
Пакет на входната система
  • 1.2.0

Предпоставки за този съвет

Следните настройки са направени предварително като предпоставка за описанието на този съвет.

Също така трябва да сте запознати със следните съвети:

За екранното управление за докосване

Често използвам клавиатура или геймпад, за да играя игри. На устройства, които могат да се управляват само чрез докосване, като смартфони, ще играете играта чрез докосване.

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

Преди контрола на екрана

Тази статия е малко дълга, но тази тема не е пряко свързана с управлението на екрана. Ако можете да използвате пакета на входната система в други стъпки, за да проверите входа, като например геймпад, това е добре.

В този съвет ще създадем карта на действието. Описва как да симулирате докосване на геймпад, сякаш взаимодействате с него.

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

Първо поставете бутона на екрана. Тъй като просто прикрепяте компонент, той работи с обекти, различни от бутоните.

Добавете бутон за въвеждане > екрана от компонента.

Задайте бутона на геймпада на изток от контролния път. Това го прави да изглежда така, сякаш Button East на геймпада е бил натиснат при докосване.

Уверете се, че Атака се появява, когато стартирате играта и кликнете върху бутона. Ако това е устройство с докосване, можете да потвърдите, че работи с докосване.

Екранна пръчка

On-Screen Stick ви позволява да премествате обекти като пръчки с докосване. Когато преместите пръчка, е възможно да я симулирате, сякаш сте преместили стик за геймпад. В допълнение към докосването, също е възможно да го преместите с мишката.

Поставя обект бутон на екрана, който ще бъде сензорна пръчка. Тук използваме бутон, но той работи и с обекти, различни от бутоните.

Под Добавяне на компонент изберете Въвеждане > екранна пръчка.

От Control Path изберете Gamepad LeftStick, дефиниран в картата на действието.

Стартирайте играта и опитайте да плъзнете бутона Стик. Бутоните се движат в кръг, сякаш движат пръчка. Разбира се, можете също да проверите дали входното съдържание се извлича, докато се изпълнява.

В този случай сме поставили бутон, но също така е възможно да го направим да изглежда като виртуална пръчка, като поставим кръгла рамка и кръгъл обект от пръчка.

Между другото, този подвижен диапазон може да бъде променен в "Обхват на движение" на екранната пръчка.