Verschieben, Drehen und Skalieren von Sprites

Diese Seite wurde aktualisiert :
Erstellungsdatum der Seite :

Verifikations-Umgebung

Fenster
  • Windows 11
Unity-Editor
  • 2020.3.25f1
Eingabesystem-Pakete
  • 1.2.0

Voraussetzungen für diesen Tipp

Die folgenden Einstellungen sind als Voraussetzung für die Erläuterung dieser Tipps vorkonfiguriert.

Verschieben der Figur

In Spielen verwendest du oft einen Controller, um deinen Charakter zu bewegen. Dieses Mal möchte ich die Tastatur verwenden, um das auf dem Bildschirm angezeigte Sprite zu bewegen.

Wenn Sie das Skript ändern, können Sie es zusätzlich zur Tastatur mit einem Gamepad verschieben. Jede Eingabe ist in Tipps für das Eingabesystem zusammengefasst, also beziehen Sie sich bitte darauf.

Sprite-Platzierung

Platzieren Sie ein Sprite in der Ansicht. Anweisungen zum Platzieren von Sprites finden Sie in den vorherigen Tipps. Vorerst kann die Art und Größe des Bildes beliebig sein, solange es in der Ansicht sichtbar ist.

Es gibt auch einen Text der Vorgangserklärung, der sich jedoch nicht auf diesen Vorgang auswirkt.

Erstellen Sie ein Skript, mit dem Sie Sprites mit der Tastatur verschieben können

Um das Sprite per Eingabevorgang zu verschieben, müssen Sie ein Skript erstellen, also erstellen Sie ein Skript in Ihrem Projekt. Der Name ist willkürlich, aber in diesem Fall SpriteMove ist es .

Nachdem Sie das Skript erstellt und geöffnet haben, geben Sie Folgendes ein: Dieses Skript basiert auf der Annahme, dass es an das zu verschiebende Sprite angehängt wird.

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

Um Update das Sprite regelmäßig zu bewegen, müssen Sie den Prozess in einer Methode beschreiben. FixedUpdate In diesem Fall haben wir es dort erstellt und beschrieben.

Ich werde die Details ein anderes Mal ausführlich erläutern, aberUpdate wie oft eine Methode pro Sekunde aufgerufen wird, hängt von der Umgebung ab, in der sie ausgeführt wird. Daher kann sich die Bewegungsgeschwindigkeit je nach Ausführungsumgebung ändern. FixedUpdate Die Häufigkeit, mit der die Methode pro Sekunde aufgerufen wird, wird durch den Einstellungswert bestimmt, sodass Sie das Sprite in jeder Umgebung mit der gleichen Geschwindigkeit bewegen können.

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

Da davon ausgegangen wird, dass es diesmal mit der Tastatur bedient wird, werden die Keyboard.current Tastaturinformationen mit bezogen. Wenn du den Code hier änderst, kannst du ihn auch mit einer Maus oder einem Gamepad abrufen.

Wenn Sie es ändern möchten, beachten Sie bitte die folgenden Tipps.

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

SpriteMove Die Klasse, von der Sie erben, enthält Informationen über das Objekt, an das Sie MonoBehaviour anfügen. transform Wenn Sie auf Eigenschaften zugreifen, können Sie z. B. die Position des Objekts ändern.

Transform.Translate Sie können eine Methode aufrufen, um die Position des Objekts von seiner aktuellen Position zu verschieben. Die X- und Y-Koordinaten werden entsprechend den Cursortasten verschoben.

Space.World können Sie sich bewegen, ohne von der unten beschriebenen Drehung betroffen zu sein.

// スプライトの移動処理
// 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 Sie können eine Methode aufrufen, um ein Objekt aus seinem aktuellen Zustand zu drehen. Das Argument ist der Grad der Drehung in Bezug auf die angegebene Achse. Die X-Achse ist die linke und rechte Achse, die Y-Achse ist die Aufwärts- und Abwärtsachse und die Z-Achse ist die Achse, die rückwärts geht. Wenn Sie also in 2D die Drehung in Bezug auf die Z-Achse multiplizieren, dreht sie sich im und gegen den Uhrzeigersinn.

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

Übrigens habe ich in der Space.World Methode vorhin Translate angegeben, aber Wenn dies nicht angegeben ist, dreht sich die Bewegungsrichtung entsprechend der Drehrichtung.

Zum Beispiel wird in der folgenden Abbildung Space.World angegeben, und der Rechtsbewegungsvorgang wird mit einer 45°-Drehung ausgeführt.

In der folgenden Abbildung wird der Vorgang für die rechte Bewegung mit einer Drehung um 45° ausgeführt, Space.World ohne dass angegeben wird.

Space.World Wenn Sie diese Angabe nicht machen, ändert sich die Bewegungsrichtung mit der Drehrichtung. Dies ist nützlich für die Umsetzung von 3D- und funkgesteuerten Operationen.

Für die Skalierung gibt es keine Methode, um die Skala in Bezug auf die aktuelle Skala zu vergrößern oder zu verkleinern. localScale Führen Sie Berechnungen für die Eigenschaft durch.

Multipliziert man den aktuellen Wert einfach mit einer Vergrößerung, kann man ihn entsprechend dem Tastendruck skalieren. Vector2 Wenn Sie es mit festlegen, können Sie nur in X-Richtung, nur in Y-Richtung usw. zoomen.

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

Nachdem Sie Ihr Skript gespeichert haben, hängen Sie es an Ihr Sprite an. Der Name des Sprites in der Hierarchie ist identisch mit dem Dateinamen, ändern Sie ihn also bei Bedarf, um ihn leichter verständlich zu machen.

Starten Sie danach das Spiel und prüfen Sie, ob es mit Ihrer Tastatur funktioniert.

Ich denke, das reicht aus, um dein Schiff in einem vertikalen oder horizontalen Schießspiel zu bewegen. Wenn Sie die Bewegung des Gegners automatisch berechnen, können Sie ihn natürlich mit dem gleichen Code bewegen.