Χρήση χαρτών ενεργειών για αντιστοίχιση κουμπιών σε συμπεριφορές παιχνιδιών

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

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

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

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

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

Πληροφορίες για τους Χάρτες ενεργειών

Τα προγράμματα εισαγωγής χρηστών σε πληκτρολόγια, ποντίκια και gamepads δήλωσαν βασικά ότι μια συγκεκριμένη ενέργεια εκτελέστηκε όταν πατήθηκε ένα κουμπί. Στον χάρτη ενεργειών, για παράδειγμα, μπορείτε να ορίσετε τη δράση του "άλματος" και να αντιστοιχίσετε κουμπιά ελεγκτή και πλήκτρα πληκτρολογίου σε αυτό. Ως αποτέλεσμα, το πρόγραμμα χρειάζεται μόνο να περιγράψει τη διαδικασία όταν εκτελείται μια συγκεκριμένη ενέργεια. Ακόμα κι αν αντιστοιχίσετε ένα κουμπί σε άλλο χειριστήριο ως δεύτερη σκέψη, μπορείτε να το εφαρμόσετε χωρίς να αλλάξετε το λειτουργικό πρόγραμμα.

Δημιουργία χάρτη δράσης

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

Κάντε δεξί κλικ σε οποιονδήποτε φάκελο του έργου για να δημιουργήσετε μια ενέργεια εισόδου. Η θέση του φακέλου που θα δημιουργηθεί είναι αυθαίρετη, αλλά διαχειριστείτε τον σύμφωνα με το έργο σας. Το όνομα αρχείου είναι επίσης αυθαίρετο, αλλά εδώ InputActionSample είναι .

Όταν κάνετε διπλό κλικ στο αρχείο που δημιουργήθηκε, θα εμφανιστεί το ακόλουθο παράθυρο.

Πρώτα, κάντε κλικ στο κουμπί + στους Χάρτες ενεργειών για να δημιουργήσετε έναν χάρτη ενεργειών. Ως μονάδα δημιουργίας, εάν το περιεχόμενο της λειτουργίας αλλάζει ανάλογα με τη σκηνή, θα οριστεί σε αυτήν την ενότητα. Για παράδειγμα, στην περίπτωση ενός παιχνιδιού δράσης πλευρικής κύλισης, τα περιεχόμενα της λειτουργίας αλλάζουν κατά τη διάρκεια της δράσης και στο μενού, οπότε θα δημιουργήσετε έναν χάρτη δράσης για το καθένα.

Εδώ, για παράδειγμα, ορίζουμε μια ενέργεια πλευρικής κύλισης και την ονομάζουμε "SideScrollActionMap".

Στη συνέχεια, δημιουργήστε Ενέργειες. Δεδομένου ότι είναι ένα δείγμα, δεν θα κάνω πολλά από αυτά, αλλά εδώ θα δημιουργήσουμε ενέργειες "Move" για κίνηση και "Attack" για επίθεση. Δεδομένου ότι ένα έχει ήδη δημιουργηθεί, αλλάξτε το όνομα ή δημιουργήστε ένα νέο, κάντε κλικ στο κουμπί + στην επάνω δεξιά γωνία και εισαγάγετε το.

Πρώτα, διαμορφώστε τη ρύθμιση παραμέτρων μετακίνησης. Ο ελεγκτής υποθέτει ότι χρησιμοποιείτε τα πλήκτρα μοχλού, πληκτρολογίου κατεύθυνσης και δρομέα πληκτρολογίου. Στην περίπτωση μιας ενέργειας πλευρικής κύλισης, υπάρχουν περιπτώσεις όπου χρησιμοποιούνται μόνο αριστερά και δεξιά, αλλά εδώ υποθέτουμε ότι χρησιμοποιείτε τέσσερις κατευθύνσεις εξετάζοντας το άλμα με το επάνω πλήκτρο και το σκύψιμο με το κάτω πλήκτρο.

Όταν επιλέγετε Μετακίνηση, υπάρχει μια επιλογή Τύπος ενέργειας στα δεξιά, οπότε ορίστε την σε "Τιμή".

Θα δείτε τον τύπο ελέγχου παρακάτω, οπότε επιλέξτε Vector2. Αυτό συμβαίνει επειδή το επάνω και το κάτω μέρος εκχωρούνται στο Y και το αριστερό και το δεξί εκχωρούνται στο X.

Στη συνέχεια, επιλέξτε το κλειδί που θέλετε να αντιστοιχίσετε σε αυτό το συμβάν. Επιλέξτε No Binding στη μέση και επιλέξτε Path στα δεξιά. Εδώ επιλέγουμε το GamePad LeftStick.

Αυτό συνδέει το LeftStick του GamePad με την κίνηση.

Για να συνδέσετε και άλλα χειριστήρια, επιλέξτε "Add Binding" από το κουμπί + στα δεξιά του Move.

Τώρα που προστέθηκε το No Binding, εκχωρούμε ένα Dpad για το GamePad.

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

Τα sticks και τα Dpads είναι κουμπιά που υποθέτουν πάνω, κάτω, αριστερά και δεξιά, επομένως μπορούν να προστεθούν με αυτό, αλλά στην περίπτωση των πληκτρολογίων, είναι όλα μεμονωμένα πλήκτρα, επομένως δεν υπάρχει ορισμός για πάνω, κάτω, αριστερά και δεξιά. Για να ρυθμίσετε το πληκτρολόγιο επάνω, κάτω, αριστερά ή δεξιά, επιλέξτε Add Up Down Left Right Composite από το κουμπί +.

Στη συνέχεια, θα προστεθεί ένα 2D Vector και μπορείτε να το αντιστοιχίσετε σε κάθε Up Down Left Right, όπως φαίνεται στο παρακάτω σχήμα.

Για παράδειγμα, εάν χρησιμοποιείτε το Up, ρυθμίστε το "Επάνω βέλος" στο πληκτρολόγιό σας. Παρεμπιπτόντως, εάν είστε ενοχλητικοί για να βρείτε ένα κλειδί, μπορείτε εύκολα να το επιλέξετε πατώντας το πλήκτρο προορισμού ενώ κάνετε κλικ στο κουμπί "Ακρόαση".

Το Up έχει πλέον οριστεί σε Up Arrow.

Ομοίως, ορίστε Κάτω, Αριστερά και Δεξιά και τελειώσατε.

Φυσικά, όχι μόνο τα πλήκτρα δρομέα αλλά και το WASD μπορούν να ρυθμιστούν.

Στη συνέχεια, διαμορφώστε το Attack. Η επίθεση είναι εύκολο να εκχωρηθεί επειδή είναι ένα μόνο κουμπί. Πρώτα, επιλέξτε Επίθεση και βεβαιωθείτε ότι ο Τύπος ενέργειας είναι ένα κουμπί.

Στη συνέχεια, επιλέξτε No Binding (Χωρίς δέσμευση) και επιλέξτε το κουμπί που θέλετε να αντιστοιχίσετε από τη διαδρομή.

Εάν θέλετε να προσθέσετε περισσότερα, επιλέξτε "Προσθήκη δέσμευσης" από το κουμπί +.

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

Όταν ολοκληρωθούν όλες οι ρυθμίσεις, κάντε κλικ στην επιλογή "Αποθήκευση στοιχείου" για αποθήκευση. Μπορείτε να κλείσετε αυτό το παράθυρο.

Τέλος, με το αρχείο inputactions του έργου (σε αυτήν την περίπτωση, το αρχείο InputActionSample που δημιουργήσατε νωρίτερα), επιλέξτε "Generate C# Class" στο inspector. Η παράμετρος θα προστεθεί, αλλά κάντε κλικ στο κουμπί "Εφαρμογή" ως έχει.

Αυτό θα δημιουργήσει ένα αρχείο δέσμης ενεργειών με το ίδιο όνομα. Περιέχει που είναι χρήσιμες για τη χρήση χαρτών ενεργειών από προγράμματα.

Πώς να λαμβάνετε πληροφορίες εισόδου

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

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

Λήψη πληροφοριών εισόδου στην Αποστολή μηνυμάτων

Η πρώτη μέθοδος εδώ είναι πώς να λαμβάνετε πληροφορίες εισόδου στο "Αποστολή μηνυμάτων".

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

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

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

Στο "Add Component", υπάρχει "Player Input" στην κατηγορία "Input", οπότε προσθέστε το.

Μόλις προστεθεί το στοιχείο εισαγωγής παίκτη, ορίστε τον χάρτη ενεργειών που δημιουργήσατε στις "Ενέργειες". Αποθέστε το από το έργο ή επιλέξτε το από το εικονίδιο + στα δεξιά.

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

Βεβαιωθείτε ότι η συμπεριφορά είναι "Αποστολή μηνυμάτων".

Στη συνέχεια, δημιουργήστε ένα σενάριο. Το όνομα αρχείου μπορεί να είναι οτιδήποτε, αλλά εδώ InputSendMessage είναι .

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

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;

public class InputSendMessage : MonoBehaviour
{
  /// <summary>情報を表示させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  /// <summary>
  /// Move アクションが実行されたときに呼ばれる。
  /// </summary>
  /// <param name="inputValue">入力量。</param>
  public void OnMove(InputValue inputValue)
  {
    var vec = inputValue.Get<Vector2>();
    TextObject.text = $"Move:({vec.x:f2}, {vec.y:f2})\n{TextObject.text}";
  }

  /// <summary>
  /// Attack アクションが実行されたときに呼ばれる。
  /// </summary>
  public void OnAttack(InputValue inputValue)
  {
    TextObject.text = $"Attack:{inputValue.isPressed}\n{TextObject.text}";
  }
}
  • Το αντικείμενο έχει συνημμένη μια είσοδο προγράμματος αναπαραγωγής που ορίζει την επιλογή Αποστολή μηνυμάτων
  • Κληρονομώντας από το MonoBehavior

Εάν πληρούνται οι προϋποθέσεις, τότε εάν ορίσετε μια μέθοδο που ονομάζεται "OnXXXXXXXX", Η μέθοδος προορισμού θα κληθεί όταν εκτελεστεί η καθορισμένη λειτουργία ενέργειας. "XXXXXXXX" είναι το όνομα των ενεργειών που δημιουργούνται στον χάρτη ενεργειών. Εδώ, δημιουργήσαμε ενέργειες "Μετακίνηση" και "Επίθεση", επομένως τα ονόματα των μεθόδων είναι "OnMove" και "OnAttack", αντίστοιχα.

OnMove Μπορείτε να λάβετε το ποσό που εισάγεται από το όρισμα InputValue . Δεδομένου ότι ο τύπος ελέγχου έχει οριστεί σε "Διάνυσμα 2", η τιμή InputValue.Get<Vector2> εισόδου θα ληφθεί στο .

OnAttackInputValue.isPressed Μπορείτε να πάρετε αν πιέζετε επίσης.

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

Τρέξτε το παιχνίδι και ρίξτε μια ματιά. Αυτή τη φορά, έχω συμπεριλάβει τον ορισμό του gamepad και του πληκτρολογίου, οπότε θα πρέπει να λειτουργεί ανεξάρτητα από το ποιο λειτουργείτε.

Όπως μπορείτε να δείτε όταν το μετακινείτε, μπορείτε να δείτε ότι η μέθοδος καλείται μόνο όταν υπάρχει αλλαγή στην τιμή από την προηγούμενη κατάσταση. Για παράδειγμα, ενώ μετακινείτε το ραβδί προς τα αριστερά, ονομάζεται μονόπλευρα, αλλά όχι προς τα αριστερά (- OnMove 1,0). OnMove Το κουμπί επίθεσης ανταποκρίνεται επίσης μόνο τη στιγμή που πατιέται και αν πατηθεί και κρατηθεί, η μέθοδος δεν καλείται.

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

Παρεμπιπτόντως, στην τρέχουσα κατάσταση, δεν καλείται όταν απελευθερώνεται το κουμπί, επομένως δεν είναι δυνατό να προσδιοριστεί πότε OnAttack απελευθερώνεται το κουμπί. Για να απαντήσετε σε αυτό, επιλέξτε την ενέργεια επίθεσης που ορίζει το κουμπί στις ρυθμίσεις χάρτη ενεργειών και προσθέστε "Πάτημα" από το "Αλληλεπιδράσεις". Μετά από αυτό, ορίστε τη συμπεριφορά ενεργοποίησης του προστιθέμενου Τύπου σε "Press And Release" και αποθηκεύστε το.

Όταν εκτελείται, μπορείτε να δείτε ότι καλείται ακόμα και OnAttack όταν απελευθερωθεί το κουμπί. isPressed false Δεδομένου ότι γίνεται , είναι επίσης δυνατό να προσδιοριστεί εάν είναι ο χρόνος απελευθέρωσης.

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

Λάβετε πληροφορίες με το Invoke Unity Events

Ένας δεύτερος τρόπος για να λάβετε πληροφορίες είναι το Invoke Unity Events, οπότε ας δοκιμάσουμε αυτό. Όπως αναφέρθηκε παραπάνω, η χρήση πολλαπλών μεθόδων εισαγωγής μπορεί να προκαλέσει επεξεργασία σε διένεξη, οπότε εάν είναι ενεργοποιημένη άλλη επεξεργασία, απενεργοποιήστε την.

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

Η επιλογή Invoke Unity Events δημιουργεί ένα κενό αντικείμενο που εκτελεί σχετικές λειτουργίες.

Προσθέστε Input > Player Input στο κενό αντικείμενο.

Ορίστε το αρχείο χάρτη ενεργειών που δημιουργήσατε για τις Ενέργειες (σε αυτήν την περίπτωση, InputActionSample) και ορίστε τον Χάρτη ενεργειών που δημιουργήσατε (σε αυτήν την περίπτωση, SideScrollActionMap) σε Προεπιλεγμένος χάρτης. Ορίστε τη συμπεριφορά για να καλέσετε συμβάντα ενότητας.

Δημιουργήστε ένα σενάριο. Το όνομα είναι αυθαίρετο, αλλά στην περίπτωση InputInvokeUnityEvents αυτή είναι .

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

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;

public class InputInvokeUnityEvents : MonoBehaviour
{
  /// <summary>情報を表示させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  /// <summary>
  /// Move 操作を行ったときに呼ばれる。
  /// </summary>
  /// <param name="context">コールバック内容。</param>
  public void OnMove(InputAction.CallbackContext context)
  {
    var vec = context.ReadValue<Vector2>();
    TextObject.text = $"Move:({vec.x:f2}, {vec.y:f2})\n{TextObject.text}";
  }

  /// <summary>
  /// Move 操作を行ったときに呼ばれる。
  /// </summary>
  /// <param name="context">コールバック内容。</param>
  public void OnAttack(InputAction.CallbackContext context)
  {
    var value = context.ReadValueAsButton();
    TextObject.text = $"Attack:{value}\n{TextObject.text}";
  }
}

Το όνομα OnMoveOnAttack της μεθόδου που καλείται όταν ο χρήστης αλληλεπιδρά με αυτήν είναι , όπως στην περίπτωση της αποστολής μηνυμάτων. Στο Invoke Unity Events, μπορείτε να ορίσετε αυτό το όνομα μεθόδου όπως θέλετε.

Όταν καλείται το καθένα, μεταβιβάζεται ως InputAction.CallbackContext όρισμα, ώστε να μπορείτε να λάβετε την κατάσταση εισόδου από εκεί. Εάν ορίσετε μια "τιμή" στη δράση, μπορείτε να την λάβετε στη μέθοδο και εάν ReadValue ορίσετε ReadValueAsButton ένα "κουμπί", μπορείτε να την λάβετε στη μέθοδο.

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

Στη συνέχεια, αναπτύξτε το "Event" και το "Action Map Name (SideScrollActionMap)" στην Εισαγωγή παίκτη και θα πρέπει να δείτε τις ενέργειες "Move" και "Attack" που δημιουργήσατε.

Πρώτα, κάντε κλικ στο κουμπί + στο Move για να το προσθέσετε.

Το αντικείμενο στην κάτω αριστερή γωνία είναι το δικό σας αντικείμενο και η συνάρτηση έχει οριστεί στη μέθοδο που μόλις δημιουργήσατε OnMove .

Διαμορφώστε επίσης το συμβάν επίθεσης.

Εκτελέστε το παιχνίδι για να δείτε πώς λειτουργεί.

Βασικά, καλείται μόνο όταν αλλάζει η ίδια τιμή με την Αποστολή μηνυμάτων, αλλά για κάποιο λόγο η μέθοδος μπορεί να καλείται δύο φορές ταυτόχρονα. Δεν ξέρω την αιτία, αλλά νομίζω ότι είναι πιθανώς επειδή η διαδικασία έναρξης και η συνεχής διαδικασία εκτελούνται ταυτόχρονα. Ωστόσο, νομίζω ότι δεν υπάρχει πρόβλημα εάν διατηρήσετε μόνο την εισαγόμενη τιμή όπως στην περίπτωση της Αποστολής μηνυμάτων και εκτελέσετε την πραγματική επεξεργασία παιχνιδιού ξεχωριστά στη διαδικασία ενημέρωσης.

Χρησιμοποιήστε μια δέσμη ενεργειών που δημιουργείται αυτόματα για να λάβετε πληροφορίες εισόδου

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

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

Τοποθετήστε ένα αντικείμενο κειμένου για να εμφανίσετε τις πληροφορίες εισαγωγής.

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

Η δέσμη ενεργειών που δημιουργείται αυτόματα από τον χάρτη ενεργειών είναι απλώς μια βιβλιοθήκη, επομένως δημιουργήστε μια ξεχωριστή δέσμη ενεργειών ελέγχου. Το όνομα είναι αυθαίρετο, αλλά στην περίπτωση InputScript αυτή είναι .

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

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.UI;

public class InputScript : MonoBehaviour
{
  /// <summary>情報を表示させるテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  /// <summary>アクションマップから自動生成されたクラス。</summary>
  private InputActionSample _actionMap;

  private void Awake()
  {
    // 各操作を行ったときに呼ばれるイベントを設定する
    _actionMap = new InputActionSample();
    _actionMap.SideScrollActionMap.Move.performed += context => OnMove(context);
    _actionMap.SideScrollActionMap.Attack.performed += 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}";
  }
}

Ορίστε μια κλάση InputActionSample που δημιουργείται αυτόματα από τον χάρτη ενεργειών στο πεδίο. Αυτή η κλάση ορίζει κάθε σύνολο ενεργειών στο χάρτη ενεργειών και μπορείτε να ορίσετε τα συμβάντα που καλούνται όταν εκτελούνται αυτές οι ενέργειες.

Awake Στη μέθοδο, InputActionSample δημιουργείται μια παρουσία του και ορίζεται το συμβάν που καλείται κατά τη στιγμή της ενέργειας. Όταν OnMoveεκτελείτε αυτές τις λειτουργίες, καλείται τώρα η μέθοδος , OnAttack .

Ωστόσο, δεδομένου ότι ορίζουμε μόνο το συμβάν εδώ, πρέπει να καλέσουμε OnEnable τη μέθοδο όταν Enable καλείται να ενεργοποιήσουμε τον χάρτη δράσης.

Επίσης, δεδομένου ότι η συμπεριφορά εισόδου του χρήστη αντιμετωπίζεται ως καθολική λειτουργία, Για να αποτρέψετε OnDisable τον χάρτη ενεργειών από το να κάνει επιπλέον μετά την ακύρωση αυτού του αντικειμένου, καλούμε τη μέθοδο στη Disable μέθοδο απενεργοποίησής του.

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

Εκτελέστε το παιχνίδι για να δείτε πώς λειτουργεί.

Όπως μπορείτε να δείτε, η μέθοδος δεν καλείται όταν OnMove γίνει η λειτουργία Μετακίνηση (0, 0). Δεν είμαι σίγουρος γιατί, αλλά φαίνεται ότι το εκτελεσμένο συμβάν παίρνει μόνο αυτό με ενεργοποιημένες τις πληκτρολογήσεις.

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

Για να το χειριστείτε αυτό, πρέπει να canceled ρυθμίσετε ένα συμβάν. Εάν δεν θέλετε να εκτελέσετε ειδική επεξεργασία στο (0, 0), μπορείτε να καλέσετε τη μέθοδο ως έχει OnMove . Το ίδιο ισχύει και για το Attack.

private void Awake()
{
  // 各操作を行ったときに呼ばれるイベントを設定する
  _actionMap = new InputActionSample();
  _actionMap.SideScrollActionMap.Move.performed += context => OnMove(context);
  _actionMap.SideScrollActionMap.Attack.performed += context => OnAttack(context);
  _actionMap.SideScrollActionMap.Move.canceled += context => OnMove(context);       // 追加
  _actionMap.SideScrollActionMap.Attack.canceled += context => OnAttack(context);   // 追加
}

Εκτελέστε και βεβαιωθείτε ότι εμφανίζεται το Move:(0, 0) ή το Attack:False.