Érintésre optimalizált beviteli vezérlők használata a Képernyő-vezérléssel

Oldal frissítve :
Oldal létrehozásának dátuma :

Ellenőrzési környezet

Windows
  • Windows 11 esetén
Unity-szerkesztő
  • 2020.3.25f1
Bemeneti rendszercsomag
  • 1.2.0

A tipp előfeltételei

A következő beállításokat előre elvégeztük a tipp leírásának előfeltételeként.

Ismernie kell a következő tippeket is:

Információk az érintésvezérléshez használható képernyő-vezérlésről

Gyakran használok billentyűzetet vagy játékvezérlőt a játékhoz. A csak érintéssel működtethető eszközökön, például okostelefonokon érintéssel játszhatja a játékot.

A Unity beviteli rendszercsomagja a képernyőn megjelenő vezérlés segítségével szimulálja az érintéses interakciókat, mintha azokat egy vezérlő vezérelné.

A képernyőn megjelenő vezérlés előtt

Ez a cikk egy kicsit hosszú, de ez a témakör nem kapcsolódik közvetlenül a Képernyő-vezérléshez. Ha a beviteli rendszercsomagot más lépésekben is használhatja a bemenet ellenőrzésére, például egy játékvezérlőre, az rendben van.

Ebben a tippben létrehozunk egy műveleti térképet. Ismerteti, hogyan szimulálható a játékvezérlő megérintése úgy, mintha interakcióba lépne vele.

Egyébként támogatja az osztályok és Gamepad osztályok szkriptekben Keyboard való használatának módját a műveleti térképek helyett. Ezúttal nem magyarázom el, de ha ki akarod próbálni ezekkel az osztályokkal, akkor elkészítheted a következő oldalon leírt kódot.

Először helyezzen el egy szöveges objektumot a vásznon a bemenetek megjelenítéséhez. Később az érintőobjektumot alulra helyezzük, így hagyjon helyet.

Először hozzon létre egy művelettérképet az alábbiak szerint: Ugyanazt a műveletet hozza létre, mint amikor leírta a művelettérképet.

Mivel az akciótérkép magyarázata nem a legfontosabb, a kötés egyszerű. A cselekvési térképekkel kapcsolatos részletekért tekintse meg a következő oldalt.

Ezúttal a bemenetek beszerzését szkript hajtja végre az "Üzenetek küldése" vagy az "Unity-események meghívása" helyett. Ez nem korlátozódik a szkriptekre, és akkor is megfelelően működik, ha az "Üzenetek küldése" stb. Funkciót használja.

Győződjön meg arról, hogy a kódot a művelettérképről hozta létre.

A szkript így néz ki: Majdnem ugyanaz, mint a cselekvési térkép magyarázatakor.

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

A EventSystem szkript a következőhöz van csatolva: .

Futtassa a játékot, és ellenőrizze, hogy működik-e akciótérképként.

Képernyőn megjelenő gomb

A Képernyőn megjelenő gomb szimulálja a játékvezérlő gombjainak (például az A és a B) megnyomását, valamint a billentyűzet billentyűit, amikor megérint egy tárgyat a képernyőn. By the way, azt mondja, érintés, de egérkattintással is működik.

Először helyezze a gombot a képernyőre. Mivel csak egy összetevőt csatol, a gombokon kívül más objektumokkal is működik.

Adjon hozzá egy beviteli > képernyőn megjelenő gombot az összetevőből.

Állítsa a játékvezérlő gombját keletre a Control Path-tól. Ez úgy néz ki, mintha a Gamepad keleti gombját megérintve megnyomták volna.

Győződjön meg arról, hogy az Attack megjelenik a játék futtatásakor, majd kattintson a gombra. Ha megérinthető eszközről van szó, ellenőrizheti, hogy működik-e érintéssel.

Képernyőn megjelenő botkormány

A Képernyő-botkormány lehetővé teszi a tárgyak, például a botok érintéssel történő mozgatását. Amikor mozgat egy botot, szimulálhatja azt, mintha egy játékvezérlő botot mozgatott volna. Az érintés mellett az egérrel is mozgatható.

Egy gombobjektumot helyez a képernyőre, amely egy érintőkar lesz. Itt egy gombot használunk, de a gombokon kívül más tárgyakkal is működik.

Az Add Component (Összetevő hozzáadása) alatt válassza az Input > On-Screen Stick (Bevitel a képernyőn) lehetőséget.

A Control Path (Vezérlési útvonal) menüben válassza ki a művelettérképen definiált Gamepad LeftStick (Játékvezérlő balkar) lehetőséget.

Futtassa a játékot, és próbálja meg húzni a Stick gombot. A gombok körben mozognak, mintha egy botot mozgatnának. Természetesen azt is ellenőrizheti, hogy a bemeneti tartalom futás közben lekérhető-e.

Ebben az esetben elhelyeztünk egy gombot, de lehetőség van arra is, hogy egy kör alakú keret és egy kerek bottárgy elhelyezésével virtuális botnak tűnjön.

Egyébként ez a mozgatható tartomány megváltoztatható a képernyőn megjelenő bot "Mozgástartományában".