Λειτουργία με το πληκτρολόγιο (έκδοση πακέτου συστήματος εισόδου)

Σελίδα ενημέρωση :
Ημερομηνία δημιουργίας σελίδας :

Περιβάλλον επαλήθευσης

παράθυρα
  • Παράθυρα 11
Επεξεργαστής ενότητας
  • 2020.3.25στ1
Πακέτο συστήματος εισόδου
  • 1.2.0

Προϋποθέσεις για αυτήν τη συμβουλή

Οι ακόλουθες ρυθμίσεις έχουν γίνει εκ των προτέρων ως προϋπόθεση για την περιγραφή αυτής της συμβουλής.

Προσδιορίστε τη στιγμή που πατάτε ένα συγκεκριμένο πλήκτρο

Όταν πατάτε ένα πλήκτρο, προσπαθήστε να μετακινήσετε το αντικείμενο. Τοποθετήστε ένα αντικείμενο κειμένου στον καμβά για να επιβεβαιώσετε την κίνηση. Το μέγεθος και η θέση μπορεί να είναι κατάλληλα.

Ο χειρισμός του πληκτρολογίου γίνεται με δέσμες ενεργειών. KeyboardOneFrame Σε αυτή την περίπτωση, το δημιουργούμε ως .

Ο κώδικας μοιάζει με αυτό:

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 Μπορείτε να λάβετε το τρέχον πλήκτρο πληκτρολογίου, να πατήσετε κατάσταση κ.λπ. από . keyboard.xxxxxxx.wasPressedThisFrame Επιστρέφει μόνο true το χρονισμό της στιγμής που πατάτε το πλήκτρο. Σε αυτόν τον κώδικα, τη στιγμή που πατάτε το πλήκτρο δρομέα, εκτελείται η λειτουργία Μετακίνηση στο αντικείμενο transform κειμένου . Δεδομένου ότι επεξεργάζεται μόνο τη στιγμή της πίεσης, η κίνηση δεν συνεχίζεται ακόμη και αν πατηθεί το πλήκτρο.

Αφού EventSystem αποθηκεύσετε το σενάριο, επισυνάψτε το στο αντικείμενο και κάντε κλικ στο KeyboardOneFrame Ορίστε το αντικείμενο κειμένου που θα μετακινηθεί στο αντικείμενο κειμένου.

Δοκιμάστε να εκτελέσετε το παιχνίδι και να ελέγξετε αν το σύμβολο @ μετακινείται όταν πατάτε το πλήκτρο δρομέα. Επίσης, βεβαιωθείτε ότι κρατώντας πατημένο το πλήκτρο δεν μετακινείται το σύμβολο @.

Ποιοι τύποι κλειδιών μπορούν να προσδιοριστούν;

Είναι γραμμένο στον επίσημο ιστότοπο, οπότε ελέγξτε εκεί.

Προσδιορίστε τη στιγμή που απελευθερώνεται ένα συγκεκριμένο κλειδί

Δεν δημιουργούμε δείγμα, αλλά τη στιγμή που το πατάτε καθορίζεται από το ακίνητο, ενώ τη στιγμή wasPressedThisFrame wasReleasedThisFrame που το απελευθερώνετε μπορεί να κριθεί από .

Προσδιορισμός κατά το πάτημα ενός συγκεκριμένου πλήκτρου

Αυτό καθορίζεται επίσης από το σενάριο. Μπορείτε να το προσθέσετε στον προηγούμενο κώδικα, αλλά αυτή τη φορά θα δημιουργήσουμε ένα νέο αρχείο σεναρίου που ονομάζεται και γράψτε το KeyboardPress .

Το σενάριο μοιάζει με αυτό:

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

Ενώ πατάτε το πλήκτρο διαστήματος, το αντικείμενο κειμένου περιστρέφεται. keyboard.xxxxxxxx.isPressed Επιστρέφει για όλη true τη διάρκεια του κλειδιού.

Επισυνάψτε την EventSystem αποθηκευμένη δέσμη ενεργειών στο αντικείμενο κειμένου και ορίστε το αντικείμενο κειμένου που θα περιστραφεί.

Βεβαιωθείτε ότι το σύμβολο @ περιστρέφεται σε όλη τη διαδρομή ενώ το παιχνίδι εκτελείται και κρατά πατημένο το πλήκτρο διαστήματος.

Λήψη όλων των πατημένων πλήκτρων

Προσπαθήστε να εμφανίσετε όλα τα πλήκτρα που πατάτε ως κείμενο. Έχετε τοποθετήσει ένα αντικείμενο κειμένου για να εμφανίσετε το πλήκτρο που πατάτε.

KeyboardAllKeys Δημιουργήστε ένα σενάριο με το όνομα .

Το σενάριο μοιάζει με αυτό:

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 σας επιτρέπει να λαμβάνετε πληροφορίες σχετικά με όλα τα πλήκτρα. Μπορείτε να εξαγάγετε μόνο αυτά που είναι αληθή από isPressed αυτά τα πλήκτρα και να ανακτήσετε μόνο τα πλήκτρα που πατάτε. Μετά από αυτό, το πλήκτρο που πατάτε μετατρέπεται σε συμβολοσειρά και εμφανίζεται ως κείμενο.

Η EventSystem δημιουργημένη δέσμη ενεργειών επισυνάπτει και ορίζει ένα αντικείμενο κειμένου για την εμφάνιση του πλήκτρου πατήματος.

Εκτελέστε το παιχνίδι και βεβαιωθείτε ότι εμφανίζεται το πλήκτρο που πατάτε.

Παρεμπιπτόντως, ακόμα κι αν πατήσετε πολλά πλήκτρα, όλα τα πλήκτρα ενδέχεται να μην εμφανίζονται, αλλά μην ανησυχείτε για αυτό γιατί είναι ένα φυσικό πρόβλημα λόγω καλωδίωσης πληκτρολογίου.

Λήψη πληκτρολογημένων χαρακτήρων

Μέχρι τώρα, έχετε τον τύπο του πλήκτρου που πατήσατε, αλλά είναι επίσης δυνατό να λάβετε τους χαρακτήρες που πληκτρολογήσατε πραγματικά. Για παράδειγμα, εάν πατηθεί το πλήκτρο "A", μπορεί να ληφθεί το γράμμα "a" και εάν πατηθεί το πλήκτρο "Shift + A", μπορεί να ληφθεί το γράμμα "A". Εάν είναι ενεργοποιημένη η IME, ενδέχεται επίσης να μπορείτε να ανακτήσετε ιαπωνικά.

Ωστόσο, αυτοί οι χαρακτήρες που έχουν εισαχθεί δεν μπορούν να ανακτηθούν σε ιδιότητες και θα αποκτηθούν με τη μορφή γεγονότων.

Στο δείγμα, τοποθετείται ένα αντικείμενο κειμένου για την εμφάνιση των χαρακτήρων που έχουν εισαχθεί.

Δημιουργήστε ένα σενάριο. KeyboardTextInput Το όνομα είναι .

Εισαγάγετε το σενάριο ως εξής:

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

KeyboardΗ onTextInput τάξη έχει ένα συμβάν που ονομάζεται , το οποίο καλείται κάθε φορά που εισάγεται κείμενο. OnEnable Εδώ, η μέθοδος καταχωρείται κατά το χρόνο καιOnDisable ακυρώνεται κατά OnTextInput OnTextInput το χρόνο . Keyboard.current είναι ένα μοναδικό αντικείμενο που υπάρχει από τη στιγμή που εκτελείται το παιχνίδι μέχρι να τερματιστεί, οπότε OnDisable φροντίστε να το απελευθερώσετε τη στιγμή του . Αν μπορείτε πάντα να συνδυάσετε την εγγραφή και την ακύρωση εκδήλωσης, μπορείτε να την ορίσετε οποιαδήποτε άλλη στιγμή.

OnTextInput Στη μέθοδο, ο εισαγόμενος χαρακτήρας ορίζεται ως όρισμα c , επομένως προσαρτάται ως κείμενο.

Αφού EventSystem αποθηκεύσετε το σενάριο, επισυνάψτε το και ορίστε ένα αντικείμενο κειμένου για εμφάνιση.

Δοκιμάστε να εκτελέσετε το παιχνίδι και να πατήσετε το πλήκτρο. Θα πρέπει να δείτε τους χαρακτήρες που έχουν εισαχθεί. Εάν το πατήσετε ταυτόχρονα με το πλήκτρο Shift, θα πρέπει να μπορείτε να εισαγάγετε κεφαλαία γράμματα και σύμβολα. Μπορείτε επίσης να εισαγάγετε Ιαπωνικά εάν είναι ενεργοποιημένη η IME. Από την άλλη, εάν πατήσετε ένα πλήκτρο που δεν είναι χαρακτήρας, όπως το πλήκτρο δρομέα, δεν θα συμβεί τίποτα.