Spriten siirtäminen, kiertäminen ja skaalaaminen

Sivu päivitetty :
Sivun luontipäivämäärä :

Varmennusympäristö

Windows
  • Windows 11
Unity-editori
  • 2020.3.25F1
Syöttöjärjestelmän paketit
  • 1.2.0

Tämän vinkin edellytykset

Seuraavat asetukset on määritetty valmiiksi näiden vihjeiden selityksen edellytykseksi.

Spriten siirtäminen

Peleissä käytät usein ohjainta hahmosi siirtämiseen. Tällä kertaa haluaisin käyttää näppäimistöä näytöllä näkyvän spriten siirtämiseen.

Jos muutat komentosarjaa, voit siirtää sitä peliohjaimella näppäimistön lisäksi. Jokaisesta syötteestä on yhteenveto kohdassa Vihjeitä syöttöjärjestelmälle, joten tutustu siihen.

Sprite-sijoitus

Aseta yksi hahmo näkymään. Katso ohjeet spriten sijoittamisesta edellisistä vinkeistä. Toistaiseksi kuvan tyyppi ja koko voivat olla mitä tahansa, kunhan se näkyy näkymässä.

Operaation selityksestä on myös teksti, mutta se ei vaikuta tähän toimintaan.

Luo skripti, jonka avulla voit siirtää spritejä näppäimistöllä

Jotta voit siirtää sprite by input -toimintoa, sinun on luotava komentosarja, joten luo komentosarja projektiisi. Nimi on mielivaltainen, mutta tässä tapauksessa SpriteMove se on .

Kun olet luonut ja avannut komentosarjan, kirjoita seuraava: Tämä skripti perustuu oletukseen, että se liitetään siirrettävään spriteen.

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

Jotta sprite voidaan Update siirtää säännöllisesti, sinun on kuvattava prosessi menetelmällä. FixedUpdate Tässä tapauksessa olemme luoneet ja kuvanneet sen siellä.

Selitän yksityiskohdat yksityiskohtaisesti toisen kerran, muttaUpdate kuinka monta kertaa menetelmää kutsutaan sekunnissa, riippuu ympäristöstä, jossa se on käynnissä. Siksi liikkeen nopeus voi muuttua suoritusympäristöstä riippuen. FixedUpdate Se, kuinka monta kertaa menetelmää kutsutaan sekunnissa, määräytyy asetusarvon mukaan, joten voit siirtää spritea samalla nopeudella missä tahansa ympäristössä.

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

Koska oletetaan, että sitä käytetään tällä kertaa näppäimistöllä, näppäimistön Keyboard.current tiedot saadaan . Jos muutat koodia täällä, voit saada sen myös hiirellä tai peliohjaimella.

Jos haluat muuttaa sitä, tutustu seuraaviin vinkkeihin.

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

SpriteMove Luokka, josta perit, sisältää tietoja objektista, johon liität MonoBehaviour . transform Kun käytät ominaisuuksia, voit esimerkiksi muokata objektin sijaintia.

Transform.Translate Voit kutsua menetelmää objektin sijainnin siirtämiseksi nykyisestä sijainnistaan. X- ja Y-koordinaatteja siirretään kohdistinnäppäinten mukaan.

Space.World , voit liikkua ilman, että alla kuvattu kierto vaikuttaa sinuun.

// スプライトの移動処理
// 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 Voit kutsua menetelmää objektin kiertämiseksi sen nykyisestä tilasta. Argumentti on pyörimisen määrä määritettyyn akseliin nähden. X-akseli on vasen ja oikea akseli, Y-akseli on ylös- ja alas-akseli ja Z-akseli on taaksepäin menevä akseli. Siksi 2D: ssä, jos kerrotaan kierto Z-akseliin nähden, se pyörii myötäpäivään ja vastapäivään.

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

Muuten, määrittelin menetelmässä Space.World aiemmin Translate , mutta Jos tätä ei ole määritetty, liikesuunta pyörii pyörimissuunnan mukaan.

Esimerkiksi alla olevassa kuvassa Space.World on määritelty, ja oikea liiketoiminto suoritetaan 45° kierrolla.

Seuraavassa kuvassa Space.World oikea liiketoiminto suoritetaan 45° kierrolla määrittämättä .

Space.World Jos et määritä tällä tavalla, liikkeen suunta muuttuu kiertosuunnan mukaan. Tästä on hyötyä 3D- ja radio-ohjattujen toimintojen toteuttamisessa.

Skaalausta varten ei ole menetelmää asteikon nostamiseksi tai pienentämiseksi suhteessa nykyiseen mittakaavaan. localScale Suorita laskelmat omaisuudelle.

Jos yksinkertaisesti kerrot nykyisen arvon suurennuksella, voit skaalata sen näppäimen painalluksen mukaan. Vector2 Jos asetat sen arvolla , voit zoomata vain X-suuntaan, zoomata vain Y-suuntaan jne.

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

Kun olet tallentanut skriptin, liitä se spriteen. Spriten nimi hierarkiassa on sama kuin tiedostonimi, joten muuta sitä tarvittaessa, jotta se on helpompi ymmärtää.

Suorita sen jälkeen peli ja katso, toimiiko se näppäimistön kanssa.

Mielestäni tämä riittää aluksen siirtämiseen pystysuorassa tai vaakasuorassa ammuntapelissä. Tietenkin, jos lasket automaattisesti vihollisen liikkeen, voit siirtää sen samalla koodilla.