Používanie ovládacích prvkov vstupu optimalizovaných na dotyk s ovládaním na obrazovke

Stránka aktualizovaná :
Dátum vytvorenia strany :

Prostredie overovania

Windows
  • Windows 11
Editor jednoty
  • 2020.3.25f1
Vstupný systémový balík
  • 1.2.0

Predpoklady pre tento tip

Nasledujúce nastavenia boli vykonané vopred ako predpoklad pre popis tohto tipu.

Mali by ste byť tiež oboznámení s nasledujúcimi tipmi:

Informácie o ovládaní dotykom na obrazovke

Na hranie hier často používam klávesnicu alebo gamepad. Na zariadeniach, ktoré je možné ovládať iba dotykom, ako sú smartfóny, budete hru hrať dotykom.

Vstupný systémový balík Unity používa ovládanie na obrazovke na simuláciu dotykových interakcií, ako keby boli ovládané ovládačom.

Pred ovládaním na obrazovke

Tento článok je trochu zdĺhavý, ale táto téma priamo nesúvisí s ovládaním na obrazovke. Ak môžete použiť balík vstupného systému v iných krokoch na kontrolu vstupu, napríklad gamepad, je to v poriadku.

V tomto tipe vytvoríme akčnú mapu. Táto téma popisuje, ako simulovať dotyk gamepadu, akoby ste s ním interagovali.

Mimochodom, podporuje aj spôsob používania tried a Gamepad tried v Keyboard skriptoch namiesto akčných máp. Tentokrát to nebudem vysvetľovať, ale ak to chcete vyskúšať s týmito triedami, môžete namiesto toho pripraviť kód popísaný na nasledujúcej stránke.

Najprv umiestnite textový objekt na plátno, aby sa zobrazili vaše vstupy. Neskôr umiestnime dotykový objekt dole, takže nechajte nejaký priestor.

Najprv vytvorte mapu akcií takto: Vytvárate rovnakú akciu ako pri popise mapy akcií.

Keďže vysvetlenie akčného plánu nie je hlavnou vecou, väzba je jednoduchá. Podrobnosti o akčných mapách nájdete na nasledujúcej stránke.

Tentokrát sa získavanie vstupov vykonáva pomocou skriptu namiesto "Odoslať správy" alebo "Vyvolať udalosti jednoty". Toto tiež nie je obmedzené na skripty a funguje správne, aj keď používate "Odoslať správy" atď.

Uistite sa, že ste vygenerovali kód z mapy akcií.

Skript vyzerá takto: Je to takmer rovnaké ako pri vysvetľovaní akčnej mapy.

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}";
  }
}

Skript EventSystem je priložený k súboru .

Spustite hru a zistite, či funguje ako akčná mapa.

Tlačidlo na obrazovke

Tlačidlo na obrazovke simuluje stláčanie tlačidiel na gamepade, napríklad A a B, a klávesov na klávesnici, keď sa dotknete nejakého objektu na obrazovke. Mimochodom, hovorí dotyk, ale funguje aj s kliknutiami myšou.

Najprv umiestnite tlačidlo na obrazovku. Keďže práve pripojíte komponent, funguje s inými objektmi ako s tlačidlami.

Pridajte z komponentu tlačidlo Vstup > na obrazovke.

Nastavte tlačidlo gamepadu na východ z ovládacej cesty. Vďaka tomu to vyzerá, akoby bolo pri dotyku stlačené tlačidlo East na gamepade.

Uistite sa, že sa pri spustení hry zobrazí položka Útok a kliknite na tlačidlo. Ak ide o dotykové zariadenie, môžete potvrdiť, že funguje dotykom.

Ovládač na obrazovke

Funkcia On-Screen Stick umožňuje dotykom presúvať objekty, ako sú páčky. Keď pohnete páčkou, je možné ju simulovať, akoby ste pohli gamepadovou páčkou. Okrem dotyku je možné ho pohybovať aj myšou.

Umiestni na obrazovku objekt tlačidla, ktorý bude dotykovou páčkou. Používame tu tlačidlo, ale funguje aj s inými objektmi ako tlačidlami.

V časti Add Component (Pridať súčasť) vyberte položku Input > On-Screen Stick (Vstup Ovládač na obrazovke).

V ovládacej ceste vyberte gamepad LeftStick definovaný na mape akcií.

Spustite hru a skúste presunúť tlačidlo Stick. Tlačidlá sa pohybujú v kruhu, akoby pohybovali paličkou. Samozrejme, môžete tiež skontrolovať, či sa vstupný obsah načítal, keď je spustený.

V tomto prípade sme umiestnili tlačidlo, ale je tiež možné, aby to vyzeralo ako virtuálna palica, umiestnením kruhového rámu a okrúhleho objektu palice.

Mimochodom, tento pohyblivý rozsah je možné zmeniť v "Rozsah pohybu" palice na obrazovke.