Sprite-ok mozgatása, forgatása és méretezése

Oldal frissítve :
Oldal létrehozásának dátuma :

Ellenőrzési környezet

Windows
  • Windows 11 esetén
Unity-szerkesztő
  • 2020.3.25f1
Bemeneti rendszercsomagok
  • 1.2.0

A tipp előfeltételei

A következő beállítások előre konfigurálva vannak a tippek magyarázatának előfeltételeként.

A sprite mozgatása

A játékokban gyakran vezérlőt használ a karakter mozgatásához. Ezúttal a billentyűzetet szeretném használni a képernyőn megjelenő sprite mozgatására.

Ha megváltoztatja a szkriptet, akkor a billentyűzet mellett egy játékvezérlővel is mozgathatja. Az egyes bemeneteket a Tippek a beviteli rendszerhez című rész foglalja össze, ezért kérjük, olvassa el.

Sprite elhelyezés

Helyezzen egy sprite-ot a nézetbe. A sprite-ok elhelyezésére vonatkozó utasításokat lásd az előző tippekben. Egyelőre a kép típusa és mérete bármi lehet, amíg látható a nézetben.

A művelet magyarázatának szövege is megtalálható, de ez nem befolyásolja ezt a műveletet.

Hozzon létre egy szkriptet, amely lehetővé teszi a sprite-ok mozgatását a billentyűzettel

A sprite bemeneti művelettel való áthelyezéséhez létre kell hoznia egy szkriptet, ezért hozzon létre egy szkriptet a projektben. A név önkényes, de ebben az esetben SpriteMove .

Miután létrehozta és megnyitotta a szkriptet, írja be a következőket: Ez a szkript azon a feltételezésen alapul, hogy az áthelyezendő sprite-hoz lesz csatolva.

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

Annak érdekében, hogy Update a sprite-t rendszeresen mozgassa, le kell írnia a folyamatot egy módszerrel. FixedUpdate Ebben az esetben ott hoztuk létre és írtuk le.

A részleteket egy másik alkalommal részletesen elmagyarázom, deUpdate a metódus másodpercenkénti meghívásainak száma attól függ, hogy milyen környezetben fut. Ezért a mozgás sebessége a végrehajtási környezettől függően változhat. FixedUpdate A metódus másodpercenkénti meghívásainak számát a beállítási érték határozza meg, így a sprite-ot bármilyen környezetben azonos sebességgel mozgathatja.

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

Mivel feltételezzük, hogy ezúttal a billentyűzettel fog működni, a Keyboard.current billentyűzet információit . Ha itt megváltoztatja a kódot, egérrel vagy játékvezérlővel is megkaphatja.

Ha módosítani szeretné, kérjük, olvassa el az alábbi tippeket.

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

SpriteMove Az osztály, amelyből örököl, információkat tartalmaz arról az objektumról, MonoBehaviour amelyhez csatolni kívánja. transform A tulajdonságok elérésekor módosíthatja például az objektum helyét.

Transform.Translate Meghívhat egy metódust, amely áthelyezi az objektum helyzetét az aktuális helyzetéből. Az X és Y koordináták a kurzorbillentyűknek megfelelően mozognak.

Space.World , akkor anélkül mozoghat, hogy az alább leírt forgatás befolyásolná.

// スプライトの移動処理
// 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 Meghívhat egy metódust, amellyel elforgathat egy objektumot az aktuális állapotából. Az argumentum az elforgatás mértéke a megadott tengelyhez képest. Az X tengely a bal és a jobb tengely, az Y tengely a fel és le tengely, a Z tengely pedig a hátrafelé haladó tengely. Ezért 2D-ben, ha megszorozza a forgást a Z tengelyhez képest, akkor az óramutató járásával megegyező és az óramutató járásával ellentétes irányban forog.

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

Egyébként korábban megadtam a Space.World módszerben Translate , de Ha ez nincs megadva, a mozgás iránya a forgásiránynak megfelelően forog.

Például az alábbi ábrán Space.World meg van adva, és a megfelelő mozgási műveletet 45°-os elforgatással hajtják végre.

A következő ábrán a megfelelő mozgási műveletet 45°-os elforgatással hajtjuk végre, Space.World megadás nélkül.

Space.World Ha nem így adja meg, a mozgás iránya az elforgatás irányával változik. Ez hasznos a 3D és rádióvezérelt műveletek megvalósításához.

A méretezéshez nincs módszer a skála növelésére vagy csökkentésére az aktuális skálához képest. localScale Végezzen számításokat a tulajdonságon.

Ha egyszerűen megszorozza az aktuális értéket nagyítással, akkor a billentyűlenyomásnak megfelelően méretezheti. Vector2 Ha az -val állítja be, akkor csak az X irányba nagyíthat, csak az Y irányba nagyíthat stb.

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

Miután mentette a szkriptet, csatolja a sprite-hoz. A hierarchiában lévő sprite neve megegyezik a fájlnévvel, ezért szükség esetén módosítsa azt, hogy könnyebben érthető legyen.

Ezután futtassa a játékot, és nézze meg, hogy működik-e a billentyűzettel.

Azt hiszem, ez elég ahhoz, hogy a hajódat függőleges vagy vízszintes lövöldözős játékban mozgasd. Természetesen, ha automatikusan kiszámítja az ellenség mozgását, ugyanazzal a kóddal mozgathatja.