Přesouvání, otáčení a změna velikosti sprajtů

Stránky aktualizovány :
Datum vytvoření stránky :

Ověřovací prostředí

Windows
  • Systém Windows 11
Unity Editor
  • 2020.3.25f1
Balíčky vstupního systému
  • 1.2.0

Předpoklady pro tento tip

Následující nastavení jsou předem nakonfigurovaná jako předpoklad pro vysvětlení těchto tipů.

Přesunutí sprajtu

Ve hrách často používáte ovladač k pohybu své postavy. Tentokrát bych chtěl použít klávesnici k pohybu sprajtu zobrazeného na obrazovce.

Pokud skript změníte, můžete jej kromě klávesnice přesouvat také pomocí gamepadu. Každý vstup je shrnut v Tipy pro vstupní systém, proto se na něj prosím podívejte.

Umístění sprajtů

Umístěte jeden pohyblivý symbol do pohledu. Pokyny pro umisťování sprajtů najdete v předchozích tipech. Prozatím může být typ a velikost obrázku libovolná, pokud je viditelná na pohledu.

K dispozici je také text vysvětlení operace, ale to nemá vliv na tuto operaci.

Vytvořte skript, který vám umožní přesouvat sprajty pomocí klávesnice

Aby bylo možné přesunout sprajt vstupní operací, musíte vytvořit skript, takže vytvořte skript ve svém projektu. Název je libovolný, ale v tomto případě SpriteMove je .

Po vytvoření a otevření skriptu zadejte následující: Tento skript je založen na předpokladu, že bude připojen ke sprajtu, který má být přesunut.

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

Aby bylo možné Update pohyblivý prvek pravidelně přesouvat, je třeba popsat proces metodou. FixedUpdate V tomto případě jsme to tam vytvořili a popsali.

Podrobnosti podrobně vysvětlím jindy, aleUpdate počet volání metody za sekundu závisí na prostředí, ve kterém běží. Rychlost pohybu se proto může měnit v závislosti na prostředí provádění. FixedUpdate Počet volání metody za sekundu je určen hodnotou nastavení, takže pohyblivý symbol můžete pohybovat stejnou rychlostí v jakémkoli prostředí.

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

Vzhledem k tomu, že se předpokládá, že tentokrát bude ovládán klávesnicí, informace o Keyboard.current klávesnici se získávají pomocí . Pokud zde změníte kód, můžete jej získat také pomocí myši nebo gamepadu.

Pokud jej chcete změnit, postupujte podle následujících tipů.

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

SpriteMove Třída, ze které dědíte, obsahuje informace o objektu, ke kterému se připojujete MonoBehaviour . transform Při přístupu k vlastnostem můžete například manipulovat s umístěním objektu.

Transform.Translate Můžete zavolat metodu pro přesunutí polohy objektu z jeho aktuální pozice. Souřadnice X a Y se posouvají podle kurzorových kláves.

Space.World , můžete se pohybovat, aniž byste byli ovlivněni rotací popsanou níže.

// スプライトの移動処理
// 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 Můžete zavolat metodu pro otočení objektu z jeho aktuálního stavu. Argumentem je velikost otočení vzhledem k zadané ose. Osa X je levá a pravá osa, osa Y je osa nahoru a dolů a osa Z je osa, která jde dozadu. Pokud tedy ve 2D vynásobíte rotaci vzhledem k ose Z, bude se otáčet ve směru a proti směru hodinových ručiček.

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

Mimochodem, specifikoval jsem v metodě Space.World dříve Translate , ale Pokud toto není zadáno, směr pohybu se bude otáčet podle směru otáčení.

Například na obrázku Space.World níže je specifikován a operace správného pohybu se provádí s otočením o 45°.

Na následujícím obrázku Space.World je operace správného pohybu provedena s otočením o 45° bez zadání .

Space.World Pokud to neurčíte tímto způsobem, směr pohybu se změní se směrem, ve kterém otáčíte. To je užitečné pro implementaci 3D a rádiem řízených operací.

Pro změnu měřítka neexistuje žádná metoda, jak zvětšit nebo zmenšit měřítko vzhledem k aktuálnímu měřítku. localScale Proveďte výpočty na nemovitosti.

Pokud aktuální hodnotu jednoduše vynásobíte zvětšením, můžete ji škálovat podle stisknutí klávesy. Vector2 Pokud jej nastavíte pomocí , můžete přiblížit pouze směr X, přiblížit pouze směr Y atd.

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

Jakmile skript uložíte, připojte ho ke svému sprajtu. Název sprajtu v hierarchii je stejný jako název souboru, takže v případě potřeby jej změňte, aby byl srozumitelnější.

Poté spusťte hru a zjistěte, zda funguje s vaší klávesnicí.

Myslím, že to stačí pro pohyb vaší lodi ve vertikální nebo horizontální střílečce. Samozřejmě, pokud automaticky vypočítáte pohyb nepřítele, můžete jej přesunout se stejným kódem.