Verschieben, Drehen und Skalieren von Sprites
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.