Použití ovládacích prvků pro zadávání optimalizovaných pro dotykové ovládání s ovládáním na obrazovce

Stránky aktualizovány :
Datum vytvoření stránky :

Ověřovací prostředí

Windows
  • Systém Windows 11
Editor jednoty
  • 2020.3.25f1
Vstupní systémový balíček
  • 1.2.0

Předpoklady pro tento tip

Následující nastavení byla provedena předem jako předpoklad pro popis tohoto tipu.

Měli byste se také seznámit s následujícími tipy:

Informace o dotykovém ovládání na obrazovce

Často používám klávesnici nebo gamepad k hraní her. Na zařízeních, která lze ovládat pouze dotykem, jako jsou smartphony, budete hrát hru dotykem.

Vstupní systémový balíček Unity používá ovládání na obrazovce k simulaci dotykových interakcí, jako by byly řízeny ovladačem.

Před ovládáním na obrazovce

Tento článek je trochu zdlouhavý, ale toto téma přímo nesouvisí s ovládáním na obrazovce. Pokud můžete použít vstupní systémový balíček v jiných krocích ke kontrole vstupu, jako je gamepad, je to v pořádku.

V tomto tipu vytvoříme akční mapu. Popisuje, jak simulovat dotyk gamepadu, jako byste s ním interagovali.

Mimochodem, podporuje také metodu použití tříd a Gamepad tříd ve Keyboard skriptech namísto map akcí. Tentokrát to nebudu vysvětlovat, ale pokud to chcete vyzkoušet s těmito třídami, můžete místo toho připravit kód popsaný na následující stránce.

Nejprve umístěte textový objekt na plátno, aby se zobrazily vaše vstupy. Později umístíme dotykový předmět dole, takže nechte nějaký prostor.

Nejprve vytvořte mapu akcí následujícím způsobem: Vytváříte stejnou akci, jako když jste popisovali mapu akcí.

Vzhledem k tomu, že vysvětlení akční mapy není hlavní věc, vazba je jednoduchá. Podrobnosti o akčních mapách najdete na následující stránce.

Tentokrát se získávání vstupu provádí skriptem namísto "Odeslat zprávy" nebo "Vyvolat události Unity". To také není omezeno na skripty a funguje správně, i když používáte "Odeslat zprávy" atd.

Ujistěte se, že jste vygenerovali kód z mapy akcí.

Skript vypadá takto: Je to téměř stejné jako při vysvětlování akční 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 připojen k rozhraní .

Spusťte hru a zjistěte, zda funguje jako akční mapa.

Tlačítko na obrazovce

Tlačítko na obrazovce simuluje stisknutí tlačítek na gamepadu, například A a B, a kláves na klávesnici, když se dotknete nějakého objektu na obrazovce. Mimochodem, říká dotyk, ale také pracuje s klikáním myší.

Nejprve umístěte tlačítko na obrazovku. Vzhledem k tomu, že komponentu pouze připojíte, funguje s jinými objekty než s tlačítky.

Přidejte tlačítko Vstup > obrazovce z komponenty.

Nastavte tlačítko gamepadu na východ od Control Path. Díky tomu to vypadá, jako by bylo stisknuto tlačítko Button East na gamepadu při dotyku.

Ujistěte se, že se při spuštění hry zobrazí možnost Attack a klikněte na tlačítko. Pokud se jedná o dotykové zařízení, můžete potvrdit, že funguje s dotykem.

Páčka na obrazovce

Funkce On-Screen Stick umožňuje pohybovat objekty jako tyčinkami dotykem. Když pohnete páčkou, je možné ji simulovat, jako byste pohnuli gamepadovou páčkou. Kromě dotyku je také možné jej pohybovat myší.

Umístí na obrazovku objekt tlačítka, který bude dotykovou páčkou. Používáme zde tlačítko, ale funguje i s jinými objekty než tlačítky.

V části Přidat komponentu vyberte možnost Vstup > Karta na obrazovce.

V části Control Path (Kontrolní cesta) vyberte Gamepad LeftStick definovaný v mapě akcí.

Spusťte hru a zkuste přetáhnout tlačítko Stick. Tlačítka se pohybují v kruhu, jako by pohybovala hůlkou. Samozřejmě můžete také zkontrolovat, zda je vstupní obsah načten za běhu.

V tomto případě jsme umístili tlačítko, ale je také možné, aby vypadalo jako virtuální hůl umístěním kruhového rámu a objektu s kulatou hůlkou.

Mimochodem, tento pohyblivý rozsah lze změnit v "Rozsah pohybu" karty na obrazovce.