Utilizarea comenzilor de intrare optimizate pentru atingere cu Control pe ecran

Pagina actualizată :
Data creării paginii :

Mediul de verificare

Windows
  • Ferestre 11
Unity Editor
  • 2020.3.25F1
Pachet sistem de intrare
  • 1.2.0

Cerințe preliminare pentru acest sfat

Următoarele setări au fost făcute în avans ca premisă pentru descrierea acestui sfat.

De asemenea, trebuie să cunoașteți următoarele sfaturi:

Despre controlul vizual pentru funcțiile tactile

Folosesc adesea o tastatură sau un gamepad pentru a juca jocuri. Pe dispozitivele care pot fi operate numai prin atingere, cum ar fi smartphone-urile, veți juca jocul prin atingere.

Pachetul sistemului de intrare Unity utilizează controlul pe ecran pentru a simula interacțiunile tactile ca și cum ar fi controlate de un controler.

Înainte de controlul pe ecran

Acest articol este puțin cam lung, dar acest subiect nu este direct legat de controlul pe ecran. Dacă puteți utiliza pachetul sistemului de intrare în alți pași pentru a verifica intrarea, cum ar fi un gamepad, este în regulă.

În acest sfat, vom crea o hartă de acțiune. Descrie cum să simulați atingerea unui gamepad ca și cum ați interacționa cu acesta.

Apropo, acceptă și metoda de utilizare a claselor și Gamepad claselor în Keyboard scripturi în loc de hărți de acțiune. Nu voi explica de data aceasta, dar dacă doriți să încercați cu acele clase, puteți pregăti codul descris pe pagina următoare.

Mai întâi, plasați un obiect text pe Planșă pentru a afișa intrările. Mai târziu, vom plasa obiectul tactil în partea de jos, așa că lăsați spațiu.

Mai întâi, creați o hartă de acțiune după cum urmează: Creați aceeași acțiune ca atunci când ați descris harta acțiunii.

Deoarece explicația hărții de acțiune nu este principalul lucru, legarea este simplă. Vă rugăm să consultați pagina următoare pentru detalii despre hărțile de acțiune.

De data aceasta, achiziția de intrări este efectuată prin script în loc de "Trimiteți mesaje" sau "Invocați evenimente de unitate". Acest lucru nu se limitează, de asemenea, la scripturi și funcționează corect chiar dacă utilizați "Trimiteți mesaje" etc.

Asigurați-vă că ați generat codul din harta acțiunilor.

Scenariul arată astfel: Este aproape la fel ca atunci când explicați harta acțiunii.

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

Scriptul EventSystem este atașat la .

Rulați jocul pentru a vedea dacă funcționează ca o hartă de acțiune.

Buton pe ecran

Butonul vizual simulează apăsarea butoanelor de pe un gamepad, cum ar fi A și B, și tastele de pe tastatură atunci când atingeți un obiect de pe ecran. Apropo, scrie atingere, dar funcționează și cu clicuri de mouse.

Mai întâi plasați butonul pe ecran. Deoarece doar atașați o componentă, aceasta funcționează cu alte obiecte decât butoanele.

Adăugați un buton de intrare > pe ecran din componentă.

Setați butonul gamepadului la est de calea de control. Acest lucru face să pară că Button East de pe gamepad a fost apăsat atunci când a fost atins.

Asigurați-vă că apare Attack atunci când rulați jocul și faceți clic pe buton. Dacă este un dispozitiv tactil, puteți confirma că funcționează prin atingere.

Stick pe ecran

Stick-ul de pe ecran vă permite să mutați obiecte precum bețe cu atingerea. Când mutați un stick, este posibil să îl simulați ca și cum ați fi mutat un stick de gamepad. În plus față de atingere, este posibil să îl mutați și cu mouse-ul.

Plasează un obiect buton pe ecran care va fi un touch stick. Folosim un buton aici, dar funcționează și cu alte obiecte decât butoanele.

Sub Add Component, selectați Input > On-Screen Stick.

Din Control Path, selectați Gamepad LeftStick definit în harta de acțiune.

Rulați jocul și încercați să trageți butonul Stick. Butoanele se mișcă într-un cerc, ca și cum ar mișca un băț. Desigur, puteți verifica, de asemenea, dacă conținutul de intrare este preluat în timp ce rulează.

În acest caz, am plasat un buton, dar este, de asemenea, posibil să-l facem să arate ca un stick virtual prin plasarea unui cadru circular și a unui obiect rotund.

Apropo, acest interval mobil poate fi modificat în "Intervalul de mișcare" al stick-ului de pe ecran.