Gebruik voor aanraking geoptimaliseerde invoerbesturingselementen met On-Screen Control

Pagina bijgewerkt :
Aanmaakdatum van pagina :

Verificatieomgeving

Ramen
  • Voor Windows 11
Unity Editor
  • 2020.3.25f1
Input systeem pakket
  • 1.2.0

Vereisten voor deze tip

De volgende instellingen zijn vooraf gemaakt als uitgangspunt voor de beschrijving van deze tip.

U moet ook bekend zijn met de volgende tips:

Over On-Screen Control voor touch

Ik gebruik vaak een toetsenbord of gamepad om games te spelen. Op apparaten die alleen via aanraking te bedienen zijn, zoals smartphones, speel je het spel op de tast.

Het invoersysteempakket van Unity maakt gebruik van On-Screen Control om aanraakinteracties te simuleren alsof ze door een controller worden bestuurd.

Voordat u het scherm bedient

Dit artikel is een beetje lang, maar dit onderwerp is niet direct gerelateerd aan On-Screen Control. Als u het invoersysteempakket in andere stappen kunt gebruiken om de invoer te controleren, zoals een gamepad, is dat prima.

In deze tip maken we een actiekaart. Hierin wordt beschreven hoe u het aanraken van een gamepad simuleert alsof u ermee werkt.

Overigens ondersteunt het ook de methode om klassen en Gamepad klassen in scripts te gebruiken in Keyboard plaats van actiekaarten. Ik zal het deze keer niet uitleggen, maar als je het met die klassen wilt proberen, kun je in plaats daarvan de code voorbereiden die op de volgende pagina wordt beschreven.

Plaats eerst een tekstobject op het canvas om uw invoer weer te geven. Later zullen we het aanraakobject onderaan plaatsen, dus laat wat ruimte over.

Maak eerst als volgt een actiekaart: U maakt dezelfde actie als toen u de actiekaart beschreef.

Omdat de uitleg van de actiekaart niet het belangrijkste is, is de binding eenvoudig. Raadpleeg de volgende pagina voor meer informatie over actiekaarten.

Deze keer wordt de invoeracquisitie uitgevoerd met een script in plaats van "Berichten verzenden" of "Eenheidsgebeurtenissen aanroepen". Dit is ook niet beperkt tot scripts en het werkt naar behoren, zelfs als u "Berichten verzenden" enz. Gebruikt.

Zorg ervoor dat u de code van de actiekaart hebt gegenereerd.

Het script ziet er als volgt uit: Het is bijna hetzelfde als bij het uitleggen van de actiekaart.

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

Het EventSystem script is gekoppeld aan .

Voer het spel uit om te zien of het werkt als een actiekaart.

Knop op het scherm

De schermknop simuleert het indrukken van knoppen op een gamepad, zoals A en B, en de toetsen op het toetsenbord wanneer u een object op het scherm aanraakt. Overigens staat er touch, maar het werkt ook met muisklikken.

Plaats eerst de knop op het scherm. Omdat u alleen een component bevestigt, werkt deze met andere objecten dan knoppen.

Voeg een invoer- > knop op het scherm toe vanuit de component.

Stel de knop van de Gamepad oostwaarts in vanuit Control Path. Hierdoor lijkt het alsof Button East op de Gamepad is ingedrukt bij aanraking.

Zorg ervoor dat Attack verschijnt wanneer je het spel uitvoert en klik op de knop. Als het een aanraakbaar apparaat is, kunt u bevestigen dat het werkt met aanraking.

Stick op het scherm

Met On-Screen Stick kunt u objecten zoals sticks verplaatsen met uw aanraking. Wanneer je een stick beweegt, is het mogelijk om deze te simuleren alsof je een gamepadstick hebt verplaatst. Naast aanraking is het ook mogelijk om deze met de muis te verplaatsen.

Hiermee plaatst u een knopobject op het scherm dat een aanraakstick wordt. We gebruiken hier een knop, maar deze werkt ook met andere objecten dan knoppen.

Selecteer onder Component toevoegen de optie Invoer > stick op het scherm.

Selecteer in Control Path de Gamepad LeftStick die is gedefinieerd in de actiekaart.

Voer het spel uit en probeer de stickknop te slepen. De knoppen bewegen in een cirkel, alsof ze een stok bewegen. Natuurlijk kunt u ook controleren of de invoerinhoud wordt opgehaald terwijl deze wordt uitgevoerd.

In dit geval hebben we een knop geplaatst, maar het is ook mogelijk om het op een virtuele stok te laten lijken door een cirkelvormig frame en een rond stokobject te plaatsen.

Overigens kan dit beweegbare bereik worden gewijzigd in het "Bewegingsbereik" van de On-Screen Stick.