Utilitzar controls d'entrada tàctils optimitzats amb el control en pantalla

Pàgina actualitzada :
Data de creació de la pàgina :

Entorn de verificació

Windows
  • Finestres 11
Editor d'unitat
  • 25.3.2020
Paquet del sistema d'entrada
  • 1.2.0

Requisits previs per a aquest consell

La configuració següent s'ha fet amb antelació com a premissa per a la descripció d'aquest consell.

També hauríeu de conèixer els consells següents:

Sobre el control en pantalla per al tacte

Sovint faig servir un teclat o un gamepad per jugar. En dispositius que només es poden operar mitjançant el tacte, com ara telèfons intel·ligents, jugareu al joc tàctilment.

El paquet del sistema d'entrada d'Unity utilitza el control en pantalla per simular interaccions tàctils com si estiguessin controlades per un controlador.

Abans del control en pantalla

Aquest article és una mica llarg, però aquest tema no està directament relacionat amb el control en pantalla. Si podeu utilitzar el paquet del sistema d'entrada en altres passos per comprovar l'entrada, com ara un gamepad, està bé.

En aquest consell, crearem un mapa d'accions. Descriu com simular tocar un gamepad com si estiguessis interactuant amb ell.

Per cert, també admet el mètode d'utilitzar classes i Gamepad classes en scripts en Keyboard lloc de mapes d'acció. Aquesta vegada no ho explicaré, però si voleu provar-ho amb aquestes classes, podeu preparar el codi descrit a la pàgina següent.

Primer, col·loqueu un objecte de text al llenç per mostrar les vostres entrades. Posteriorment, col·locarem l'objecte tàctil a la part inferior, així deixarem una mica d'espai.

En primer lloc, creeu un mapa d'accions de la manera següent: Esteu creant la mateixa acció que quan vau descriure el mapa d'accions.

Com que l'explicació del mapa d'accions no és el principal, l'enquadernació és senzilla. Consulteu la pàgina següent per obtenir més informació sobre els mapes d'accions.

Aquesta vegada, l'adquisició d'entrada es realitza per script en lloc de "Envia missatges" o "Invoca esdeveniments d'unitat". Això tampoc es limita als scripts, i funciona correctament fins i tot si utilitzeu "Enviar missatges", etc.

Assegureu-vos que heu generat el codi a partir del mapa d'accions.

El guió té aquest aspecte: És gairebé el mateix que quan s'explica el mapa d'actuació.

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

El EventSystem guió s'adjunta a .

Executeu el joc per veure si funciona com un mapa d'acció.

Botó en pantalla

El botó en pantalla simula prémer els botons d'un gamepad, com ara A i B, i les tecles del teclat quan toqueu algun objecte de la pantalla. Per cert, diu tacte, però també funciona amb clics del ratolí.

Primer col·loqueu el botó a la pantalla. Com que només adjunteu un component, funciona amb objectes que no siguin botons.

Afegiu un botó d'entrada > en pantalla des del component.

Definiu el botó del gamepad a l'est des del camí de control. Això fa que sembli com si el botó Est del Gamepad es premés quan es tocava.

Assegureu-vos que Attack aparegui quan executeu el joc i feu clic al botó. Si es tracta d'un dispositiu tàctil, podeu confirmar que funciona amb tacte.

Pal a la pantalla

On-Screen Stick us permet moure objectes com pals amb el vostre tacte. Quan mous un pal, és possible simular-lo com si haguessis mogut un pal de gamepad. A més del tacte, també és possible moure'l amb el ratolí.

Col·loca un objecte de botó a la pantalla que serà un llapis tàctil. Aquí estem utilitzant un botó, però també funciona amb objectes que no siguin botons.

A Afegeix un component, seleccioneu Entrada > Visualització en pantalla.

Des del camí de control, seleccioneu el Gamepad LeftStick definit al mapa d'accions.

Executeu el joc i proveu d'arrossegar el botó Stick. Els botons es mouen en cercle, com si moguessin un pal. Per descomptat, també podeu comprovar que el contingut d'entrada s'obté mentre s'executa.

En aquest cas, hem col·locat un botó, però també és possible que sembli un pal virtual col·locant un marc circular i un objecte de pal rodó.

Per cert, aquest rang mòbil es pot canviar al "rang de moviment" del llapis a la pantalla.