Use controles de entrada otimizados para toque com o Controle na tela

Página atualizada :
Data de criação de página :

Ambiente de verificação

Windows
  • Janelas 11
Unity Editor
  • 25.3.2020F1
Pacote do sistema de entrada
  • 1.2.0

Pré-requisitos para esta dica

As configurações a seguir foram feitas com antecedência como premissa para a descrição desta dica.

Você também deve estar familiarizado com as seguintes dicas:

Sobre o controle na tela para toque

Eu costumo usar um teclado ou gamepad para jogar. Em dispositivos que só podem ser operados por toque, como smartphones, você jogará o jogo por toque.

O pacote do sistema de entrada do Unity usa o Controle na Tela para simular interações por toque como se fossem controladas por um controlador.

Antes do controle na tela

Este artigo é um pouco longo, mas este tópico não está diretamente relacionado ao controle na tela. Se você puder usar o pacote do sistema de entrada em outras etapas para verificar a entrada, como um gamepad, tudo bem.

Nesta dica, vamos criar um mapa de ação. Descreve como simular tocar em um gamepad como se você estivesse interagindo com ele.

A propósito, ele também suporta o método de usar classes e Gamepad classes em scripts em Keyboard vez de mapas de ação. Não vou explicar desta vez, mas se você quiser experimentá-lo com essas classes, você pode preparar o código descrito na página a seguir.

Primeiro, coloque um objeto de texto no Canvas para exibir suas entradas. Mais tarde, colocaremos o objeto de toque na parte inferior, então deixe algum espaço.

Primeiro, crie um mapa de ação da seguinte maneira: Você está criando a mesma Ação que criou quando descreveu o mapa de ação.

Como a explicação do mapa de ação não é o principal, a vinculação é simples. Consulte a página a seguir para obter detalhes sobre mapas de ação.

Desta vez, a aquisição de entrada é realizada por script em vez de "Send Messages" ou "Invoke Unity Events". Isso também não se limita a scripts, e funciona corretamente, mesmo se você usar "Enviar mensagens" etc.

Verifique se você gerou o código a partir do mapa de ações.

O script tem a seguinte aparência: É quase o mesmo que quando se explica o mapa de ação.

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

O EventSystem script está anexado ao .

Execute o jogo para ver se ele funciona como um mapa de ação.

Botão na tela

O Botão na tela simula pressionar botões em um gamepad, como A e B, e as teclas do teclado quando você toca em algum objeto na tela. Aliás, diz toque, mas também funciona com cliques do mouse.

Primeiro coloque o botão na tela. Como você apenas anexa um componente, ele funciona com objetos que não sejam botões.

Adicione um botão de entrada > na tela do componente.

Defina o botão do Gamepad Leste a partir do Caminho de Controle. Isso faz parecer que o botão Leste no Gamepad foi pressionado quando tocado.

Certifique-se de que Ataque aparece quando você executa o jogo e clique no botão. Se for um dispositivo sensível ao toque, você pode confirmar que ele funciona com toque.

Vara na tela

O On-Screen Stick permite mover objetos como bastões com o seu toque. Quando você move um stick, é possível simulá-lo como se você tivesse movido um stick. Além do toque, também é possível movê-lo com o mouse.

Coloca um objeto de botão na tela que será um stick de toque. Estamos usando um botão aqui, mas ele também funciona com outros objetos que não botões.

Em Adicionar componente, selecione Entrada > stick na tela.

Em Caminho de Controle, selecione o Gamepad LeftStick definido no mapa de ação.

Execute o jogo e tente arrastar o botão Stick. Os botões se movem em círculo, como se estivessem movendo um bastão. Claro, você também pode verificar se o conteúdo de entrada é buscado enquanto ele está em execução.

Neste caso, colocamos um botão, mas também é possível fazê-lo parecer um bastão virtual colocando uma moldura circular e um objeto de vara redonda.

A propósito, essa faixa móvel pode ser alterada na "Faixa de Movimento" do Stick.