Utilizzare i controlli di input ottimizzati per il tocco con Controllo su schermo

Pagina aggiornata :
Data di creazione della pagina :

Ambiente di verifica

Finestre
  • Windows 11
Unity Editor
  • 2020.3.25F1
Pacchetto del sistema di input
  • 1.2.0

Prerequisiti per questo suggerimento

Le seguenti impostazioni sono state effettuate in anticipo come premessa per la descrizione di questo suggerimento.

Dovresti anche avere familiarità con i seguenti suggerimenti:

Informazioni sul controllo su schermo per il tocco

Uso spesso una tastiera o un gamepad per giocare. Sui dispositivi che possono essere gestiti solo tramite tocco, come gli smartphone, giocherai al tocco.

Il pacchetto del sistema di input di Unity utilizza il controllo su schermo per simulare le interazioni tattili come se fossero controllate da un controller.

Prima del controllo su schermo

Questo articolo è un po' lungo, ma questo argomento non è direttamente correlato al controllo su schermo. Se è possibile utilizzare il pacchetto di sistema di input in altri passaggi per controllare l'input, come un gamepad, va bene.

In questo suggerimento, creeremo una mappa d'azione. Viene descritto come simulare il tocco di un gamepad come se si stesse interagendo con esso.

A proposito, supporta anche il metodo di utilizzo di classi e Gamepad classi negli Keyboard script anziché nelle mappe delle azioni. Non lo spiegherò questa volta, ma se vuoi provarlo con quelle classi, puoi invece preparare il codice descritto nella pagina seguente.

Innanzitutto, posiziona un oggetto di testo sull'area di disegno per visualizzare gli input. Successivamente, posizioneremo l'oggetto touch in basso, quindi lascia un po 'di spazio.

Innanzitutto, creare una mappa delle azioni come segue: Stai creando la stessa azione che hai creato quando hai descritto la mappa delle azioni.

Poiché la spiegazione della mappa d'azione non è la cosa principale, l'associazione è semplice. Si prega di fare riferimento alla pagina seguente per i dettagli sulle mappe d'azione.

Questa volta, l'acquisizione dell'input viene eseguita tramite script anziché "Invia messaggi" o "Richiama eventi di unità". Anche questo non è limitato agli script e funziona correttamente anche se si utilizza "Invia messaggi" ecc.

Assicurati di aver generato il codice dalla mappa delle azioni.

Lo script è simile al seguente: È quasi lo stesso di quando si spiega la mappa d'azione.

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

Lo EventSystem script è allegato a .

Esegui il gioco per vedere se funziona come una mappa d'azione.

Pulsante sullo schermo

Il pulsante su schermo simula la pressione dei pulsanti su un gamepad, ad esempio A e B, e i tasti della tastiera quando si tocca un oggetto sullo schermo. A proposito, dice tocco, ma funziona anche con i clic del mouse.

Per prima cosa posiziona il pulsante sullo schermo. Poiché è sufficiente collegare un componente, funziona con oggetti diversi dai pulsanti.

Aggiungere un pulsante di input > su schermo dal componente.

Imposta il pulsante del gamepad verso est dal percorso di controllo. Questo fa sembrare che il pulsante Est sul Gamepad sia stato premuto quando viene toccato.

Assicurati che Attacco appaia quando esegui il gioco e fai clic sul pulsante. Se si tratta di un dispositivo toccabile, puoi verificare che funzioni con il tocco.

Stick sullo schermo

On-Screen Stick ti consente di spostare oggetti come bastoncini con il tuo tocco. Quando muovi una levetta è possibile simularla come se avessi spostato una levetta del gamepad. Oltre al tocco, è anche possibile spostarlo con il mouse.

Posiziona sullo schermo un oggetto pulsante che sarà un touch stick. Stiamo usando un pulsante qui, ma funziona anche con oggetti diversi dai pulsanti.

In Aggiungi componente, selezionare Input > Stick su schermo.

Da Control Path, selezionare il Gamepad LeftStick definito nella mappa delle azioni.

Esegui il gioco e prova a trascinare il pulsante Stick. I pulsanti si muovono in cerchio, come se muovessero un bastone. Naturalmente, puoi anche verificare che il contenuto di input venga recuperato mentre è in esecuzione.

In questo caso, abbiamo posizionato un pulsante, ma è anche possibile farlo sembrare un bastone virtuale posizionando una cornice circolare e un oggetto bastone rotondo.

A proposito, questa gamma mobile può essere modificata nella "Gamma di movimento" dello stick sullo schermo.