Μετακίνηση, περιστροφή και κλιμάκωση αντικειμένων

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

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

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

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

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

Μετακίνηση του αντικειμένου

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

Εάν αλλάξετε το σενάριο, μπορείτε να το μετακινήσετε με ένα gamepad εκτός από το πληκτρολόγιο. Κάθε είσοδος συνοψίζεται στις Συμβουλές για το σύστημα εισόδου, οπότε ανατρέξτε σε αυτήν.

Τοποθέτηση Sprite

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

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

Δημιούργησε ένα σενάριο που σου επιτρέπει να μετακινείς αντικείμενα με το πληκτρολόγιο

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

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

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

public class SpriteMove : MonoBehaviour
{
  // 一定時間ごとに呼ばれます
  void FixedUpdate()
  {
    // キーボードの情報を取得
    var keyboard = Keyboard.current;
    if (keyboard == null)
    {
      Debug.Log("キーボードがありません。");
      return;
    }

    // スプライトの移動処理
    // Translate メソッドでスプライトの位置が移動します
    // Space.World を指定すると回転の影響をうけません
    if (keyboard.leftArrowKey.isPressed)
    {
      transform.Translate(-0.1f, 0, 0, Space.World);
    }
    if (keyboard.rightArrowKey.isPressed)
    {
      transform.Translate(0.1f, 0, 0, Space.World);
    }
    if (keyboard.upArrowKey.isPressed)
    {
      transform.Translate(0, 0.1f, 0, Space.World);
    }
    if (keyboard.downArrowKey.isPressed)
    {
      transform.Translate(0, -0.1f, 0, Space.World);
    }

    // スプライトの回転処理
    // Rotate メソッドでスプライトが回転します
    if (keyboard.spaceKey.isPressed)
    {
      transform.Rotate(0, 0, 5f);
    }

    // スプライトの拡大縮小
    // メソッドはないので localScale プロパティに倍率をかけます
    if (keyboard.aKey.isPressed)
    {
      transform.localScale *= 1.02f;
    }
    if (keyboard.zKey.isPressed)
    {
      transform.localScale /= 1.02f;
    }
  }
}

Για να μετακινείς το αντικείμενο σε τακτική βάση, πρέπει να Update περιγράψεις τη διαδικασία με μια μέθοδο. FixedUpdate Σε αυτή την περίπτωση, το δημιουργήσαμε και το περιγράψαμε εκεί.

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

public class SpriteMove : MonoBehaviour
{
  // 一定時間ごとに呼ばれます
  void FixedUpdate()
  {
    // :
  }
}

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

Εάν θέλετε να το αλλάξετε, ανατρέξτε στις παρακάτω συμβουλές.

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

SpriteMove Η κλάση από την οποία κληρονομείτε περιέχει πληροφορίες σχετικά με το αντικείμενο στο οποίο συνδέεστε MonoBehaviour . transform Όταν αποκτάτε πρόσβαση σε ιδιότητες, μπορείτε, για παράδειγμα, να χειριστείτε τη θέση του αντικειμένου.

Transform.Translate Μπορείτε να καλέσετε μια μέθοδο για να μετακινήσετε τη θέση του αντικειμένου από την τρέχουσα θέση του. Οι συντεταγμένες X και Y μετακινούνται σύμφωνα με τα πλήκτρα δρομέα, αντίστοιχα.

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

// スプライトの移動処理
// Translate メソッドでスプライトの位置が移動します
// Space.World を指定すると回転の影響をうけません
if (keyboard.leftArrowKey.isPressed)
{
  transform.Translate(-0.1f, 0, 0, Space.World);
}
if (keyboard.rightArrowKey.isPressed)
{
  transform.Translate(0.1f, 0, 0, Space.World);
}
if (keyboard.upArrowKey.isPressed)
{
  transform.Translate(0, 0.1f, 0, Space.World);
}
if (keyboard.downArrowKey.isPressed)
{
  transform.Translate(0, -0.1f, 0, Space.World);
}

Transform.Rotate Μπορείτε να καλέσετε μια μέθοδο περιστροφής ενός αντικειμένου από την τρέχουσα κατάστασή του. Το όρισμα είναι το ποσό περιστροφής σε σχέση με τον καθορισμένο άξονα. Ο άξονας X είναι ο αριστερός και ο δεξιός άξονας, ο άξονας Y είναι ο άξονας πάνω και κάτω και ο άξονας Z είναι ο άξονας που πηγαίνει προς τα πίσω. Επομένως, σε 2D, εάν πολλαπλασιάσετε την περιστροφή σε σχέση με τον άξονα Z, θα περιστραφεί δεξιόστροφα και αριστερόστροφα.

// スプライトの回転処理
// Rotate メソッドでスプライトが回転します
if (keyboard.spaceKey.isPressed)
{
  transform.Rotate(0, 0, 5f);
}

Παρεμπιπτόντως, διευκρίνισα στη Space.World μέθοδο νωρίτερα Translate , αλλά Εάν αυτό δεν έχει καθοριστεί, η κατεύθυνση κίνησης θα περιστραφεί σύμφωνα με την κατεύθυνση περιστροφής.

Για παράδειγμα, στο παρακάτω σχήμα Space.World , καθορίζεται και η σωστή λειτουργία κίνησης εκτελείται με περιστροφή 45°.

Στο παρακάτω σχήμα, Space.World η σωστή λειτουργία κίνησης εκτελείται με περιστροφή 45° χωρίς προσδιορισμό .

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

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

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

// スプライトの拡大縮小
// メソッドはないので localScale プロパティに倍率をかけます
if (keyboard.aKey.isPressed)
{
  transform.localScale *= 1.02f;
}
if (keyboard.zKey.isPressed)
{
  transform.localScale /= 1.02f;
}

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

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

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