Működtetés a billentyűzettel (beviteli rendszercsomag verziója)

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.

Egy adott billentyű lenyomásának pillanatának meghatározása

Amikor megnyom egy billentyűt, próbálja meg áthelyezni az objektumot. Helyezzen el egy szöveges objektumot a vásznon az áthelyezés megerősítéséhez. A méret és a pozíció megfelelő lehet.

A billentyűzet kezelése szkriptekkel történik. KeyboardOneFrame Ebben az esetben .

A kód így néz ki:

using UnityEngine;
using UnityEngine.UI;           // 追加
using UnityEngine.InputSystem;  // 追加

public class KeyboardOneFrame : MonoBehaviour
{
  /// <summary>移動させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  // 更新はフレームごとに1回呼び出されます
  void Update()
  {
    if (TextObject == null)
    {
      Debug.Log($"{nameof(TextObject)} が null です。");
      return;
    }

    // キーボードの情報を取得
    var keyboard = Keyboard.current;
    if (keyboard == null)
    {
      Debug.Log("キーボードがありません。");
      return;
    }

    var transform = TextObject.transform;

    // wasPressedThisFrame は押した瞬間のみ true となる
    // キーは「keyboard[Key.RightArrow]」のような指定の仕方もある
    if (keyboard.leftArrowKey.wasPressedThisFrame)
    {
      transform.Translate(-1, 0, 0);
    }
    if (keyboard.rightArrowKey.wasPressedThisFrame)
    {
      transform.Translate(1, 0, 0);
    }
    if (keyboard.upArrowKey.wasPressedThisFrame)
    {
      transform.Translate(0, 1, 0);
    }
    if (keyboard.downArrowKey.wasPressedThisFrame)
    {
      transform.Translate(0, -1, 0);
    }
  }
}

Keyboard.current A billentyűzet aktuális lenyomási állapotát stb. innen kaphatja meg. keyboard.xxxxxxx.wasPressedThisFrame Csak true a billentyű lenyomásának időpontját adja vissza. Ebben a kódban a kurzorbillentyű megnyomásának pillanatában a Move művelet a Text objektumon transform kerül végrehajtásra . Mivel csak a megnyomás pillanatában kerül feldolgozásra, a mozgás akkor sem folytatódik, ha a gombot megnyomják.

A parancsfájl mentése után EventSystem csatolja az objektumhoz KeyboardOneFrame , majd kattintson a Állítsa be a szövegobjektumot a Szöveg objektumba való áthelyezésre.

Próbálja meg futtatni a játékot, és ellenőrizze, hogy a kurzorbillentyű megnyomásakor mozog-e a @ jel. Győződjön meg arról is, hogy a billentyű lenyomva tartása nem mozgatja a @ szimbólumot.

Milyen típusú kulcsok határozhatók meg?

A hivatalos weboldalon van írva, ezért kérjük, ellenőrizze ott.

Egy adott kulcs felszabadításának pillanatának meghatározása

Nem készítünk mintát, de a megnyomás pillanatát az ingatlan határozza meg, míg a kiadás pillanatát wasPressedThisFrame wasReleasedThisFrame az alapján lehet megítélni.

Meghatározás egy adott billentyű lenyomásakor

Ezt a forgatókönyv is meghatározza. Hozzáadhatja az előző kódhoz, de ezúttal létrehozunk egy új szkriptfájlt és írjuk .KeyboardPress

A szkript így néz ki:

using UnityEngine;
using UnityEngine.UI;           // 追加
using UnityEngine.InputSystem;  // 追加

public class KeyboardPress : MonoBehaviour
{
  /// <summary>回転させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  // 更新はフレームごとに1回呼び出されます
  void Update()
  {
    if (TextObject == null)
    {
      Debug.Log($"{nameof(TextObject)} が null です。");
      return;
    }

    // キーボードの情報を取得
    var keyboard = Keyboard.current;
    if (keyboard == null)
    {
      Debug.Log("キーボードがありません。");
      return;
    }

    var transform = TextObject.transform;

    // isPressed は押している間はずっと true となる
    // キーは「Keyboard.current[Key.Space]」のような指定の仕方もある
    if (keyboard.spaceKey.isPressed)
    {
      transform.Rotate(0, 0, 1);
    }
  }
}

A szóköz billentyű lenyomása közben a szövegobjektum elfordul. keyboard.xxxxxxxx.isPressed A kulcs teljes true időtartamára visszatér.

Csatolja a mentett parancsfájlt a Szöveges objektumhoz, és állítsa be a EventSystem szövegobjektumot elforgatásra.

Győződjön meg arról, hogy a @ szimbólum teljesen elfordul, miközben a játék fut, és lenyomva tartja a szóköz billentyűt.

Az összes lenyomott gomb beszerzése

Próbálja meg szövegként megjeleníteni az összes lenyomott billentyűt. Szöveges objektumot helyezett el a lenyomott billentyű megjelenítéséhez.

KeyboardAllKeys Hozzon létre egy szkriptet . névvel

A szkript így néz ki:

using System.Linq;
using UnityEngine;
using UnityEngine.InputSystem;  // 追加
using UnityEngine.UI;           // 追加

public class KeyboardAllKeys : MonoBehaviour
{
  /// <summary>移動させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  // 更新はフレームごとに1回呼び出されます
  void Update()
  {
    if (TextObject == null)
    {
      Debug.Log($"{nameof(TextObject)} が null です。");
      return;
    }

    // キーボードの情報を取得
    var keyboard = Keyboard.current;
    if (keyboard == null)
    {
      Debug.Log("キーボードがありません。");
      TextObject.text = "";
      return;
    }

    // allKeys からすべてのキーの情報を走査し isPressed で押しているキーのみを抽出する
    TextObject.text = string.Join(", ", keyboard.allKeys.Where(x => x.isPressed).Select(x => x.keyCode.ToString()));
  }
}

keyboard.allKeys Lehetővé teszi, hogy információt kapjon az összes kulcsról. Csak azokat nyerheti ki ezekből a billentyűkből isPressed , amelyek igazak, és csak a lenyomott billentyűket kérheti le. Ezután a megnyomott gomb karakterláncgá alakul, és szövegként jelenik meg.

A EventSystem létrehozott szkript csatol és beállít egy szöveges objektumot a nyomógomb megjelenítéséhez.

Futtassa a játékot, és ellenőrizze, hogy megjelenik-e a megnyomott billentyű.

Egyébként, még akkor is, ha sok billentyűt nyom meg, előfordulhat, hogy az összes gomb nem jelenik meg, de ne aggódjon emiatt, mert fizikai probléma a billentyűzet vezetékei miatt.

Beírt karakterek beolvasása

Mostanáig megkapta a lenyomott billentyű típusát, de lehetőség van a ténylegesen beírt karakterek megszerzésére is. Például, ha megnyomja az "A" billentyűt, az "a" betű elérhető, és ha megnyomja a "Shift + A" billentyűt, az "A" betű kapható. Ha az írásjegybevivő engedélyezve van, előfordulhat, hogy a japán nyelvet is le tudja kérni.

Ezek a beírt karakterek azonban nem kérhetők be a tulajdonságokban, és események formájában lesznek beolvasva.

A mintában egy szöveges objektum kerül elhelyezésre a beírt karakterek megjelenítéséhez.

Hozzon létre egy szkriptet. KeyboardTextInput A név .

Adja meg a szkriptet az alábbiak szerint:

using UnityEngine;
using UnityEngine.InputSystem;  // 追加
using UnityEngine.UI;           // 追加

public class KeyboardTextInput : MonoBehaviour
{
  /// <summary>移動させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  /// <summary>
  /// オブジェクトが有効になったときに呼ばれるイベント。
  /// </summary>
  public void OnEnable()
  {
    // 文字が入力されたときに呼ばれるイベントをセット
    Keyboard.current.onTextInput += OnTextInput;
  }

  /// <summary>
  /// オブジェクトが無効になったときに呼ばれるイベント。
  /// </summary>
  public void OnDisable()
  {
    // 文字が入力されたときに呼ばれるイベントを解除
    Keyboard.current.onTextInput -= OnTextInput;
  }

  /// <summary>
  /// 文字を入力するたびに呼ばれる。
  /// </summary>
  /// <param name="c">入力された文字。</param>
  public void OnTextInput(char c)
  {
    TextObject.text += c;
  }
}

KeyboardAz onTextInput osztálynak van egy nevű eseménye, amelyet a rendszer minden szövegbevitelkor meghív. OnEnable Itt a módszert az időzítésében regisztrálják, ésOnDisable az időzítéskor OnTextInput OnTextInput törlik. Keyboard.current egy egyedi objektum, amely a játék végrehajtásától annak befejezéséig létezik, ezért OnDisable ügyeljen arra, hogy a . Ha mindig párosíthatja az esemény regisztrációját és lemondását, bármikor beállíthatja máskor.

OnTextInput A metódusban a beírt karakter argumentumként c van beállítva , így szövegként lesz hozzáfűzve.

A szkript mentése után EventSystem csatolja és állítson be egy szöveges objektumot megjelenítésre.

Próbálja meg futtatni a játékot, és nyomja meg a gombot. Látnia kell a beírt karaktereket. Ha a Shift billentyűvel egyidejűleg nyomja meg, akkor nagybetűket és szimbólumokat kell beírnia. Japán nyelvet is megadhat, ha az írásjegybevivő engedélyezve van. Másrészt, ha megnyom egy nem karakteres billentyűt, például a kurzorbillentyűt, semmi sem történik.