Spraidide liigutamine, pööramine ja skaleerimine

Lehekülg uuendatud :
Lehe loomise kuupäev :

Kontrollimise keskkond

Windows
  • Windows 11
Ühtsuse toimetaja
  • 2020.3.25f1
Sisendsüsteemi paketid
  • 1.2.0

Selle näpunäite eeltingimused

Järgmised sätted on eelkonfigureeritud nende näpunäidete selgitamise eeltingimusena.

Spraidi liigutamine

Mängudes kasutate oma tegelase liigutamiseks sageli kontrollerit. Seekord tahaksin klaviatuuri abil ekraanil kuvatavat spraiti liigutada.

Kui muudate skripti, saate seda lisaks klaviatuurile ka mängupuldiga teisaldada. Iga sisend on kokku võetud sisendsüsteemi näpunäidetes, nii et palun vaadake seda.

Sprite paigutus

Asetage vaatesse üks sprait. Spraidide paigutamise juhised leiate eelmistest näpunäidetest. Praegu võib pildi tüüp ja suurus olla ükskõik milline, kui see on vaates nähtav.

Samuti on olemas operatsiooni selgituse tekst, kuid see ei mõjuta seda toimingut.

Looge skript, mis võimaldab teil klaviatuuriga spraite liigutada

Spraidi liigutamiseks sisendoperatsiooni abil peate looma skripti, nii et looge oma projektis skript. Nimi on meelevaldne, kuid antud juhul SpriteMove , see on .

Kui olete skripti loonud ja avanud, sisestage järgmine teave. See skript põhineb eeldusel, et see kinnitatakse liigutatava spraidi külge.

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

Spraidi regulaarseks liigutamiseks Update peate protsessi kirjeldama meetodil. FixedUpdate Sel juhul oleme selle seal loonud ja kirjeldanud.

Ma selgitan üksikasju üksikasjalikult veel üks kord, kuidUpdate meetodi kutsumise kordade arv sekundis sõltub keskkonnast, kus see töötab. Seetõttu võib liikumise kiirus muutuda sõltuvalt täitmiskeskkonnast. FixedUpdate Meetodi sekundis kutsumise kordade arvu määrab seadistusväärtus, nii et saate spraiti liigutada sama kiirusega igas keskkonnas.

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

Kuna eeldatakse, et seda kasutatakse seekord klaviatuuriga, Keyboard.current saadakse klaviatuuri teave . Kui muudate koodi siin, saate selle ka hiire või mängupuldiga.

Kui soovite seda muuta, lugege palun järgmisi näpunäiteid.

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

SpriteMove Klass, kust pärite, sisaldab teavet objekti kohta, millele lisate MonoBehaviour . transform Atribuutidele juurdepääsul saate manipuleerida näiteks objekti asukohaga.

Transform.Translate Võite helistada meetodile objekti asukoha teisaldamiseks selle praegusest asukohast. X- ja Y-koordinaate liigutatakse vastavalt kursoriklahvidele.

Space.World saate liikuda, ilma et allpool kirjeldatud pöörlemine teid mõjutaks.

// スプライトの移動処理
// 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 Võite helistada meetodile objekti pööramiseks selle praegusest olekust. Argument on pöörlemise suurus määratud telje suhtes. X-telg on vasak ja parem telg, Y-telg on üles- ja allatelg ning Z-telg on telg, mis läheb tagasi. Seega, kui korrutate 2D-s pöörlemist Z-telje suhtes, pöörleb see päripäeva ja vastupäeva.

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

Muide, ma täpsustasin meetodis Space.World varem Translate , kuid Kui seda pole täpsustatud, pöörleb liikumissuund vastavalt pöörlemissuunale.

Näiteks on alloleval joonisel Space.World täpsustatud ja õige liikumine toimub 45° pöörlemisega.

Järgmisel joonisel Space.World teostatakse õige liikumise toiming 45° pöörlemisega ilma täpsustamata .

Space.World Kui te sel viisil ei täpsusta, muutub liikumise suund pöörlemissuunaga. See on kasulik 3D- ja raadio teel juhitavate toimingute rakendamiseks.

Skaleerimiseks ei ole meetodit skaala suurendamiseks või vähendamiseks praeguse skaala suhtes. localScale Tehke vara arvutused.

Kui korrutate praeguse väärtuse lihtsalt suurendusega, saate selle klahvivajutuse järgi skaleerida. Vector2 Kui seadistate selle , saate suumida ainult X-suunas, suumida ainult Y-suunas jne.

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

Kui olete skripti salvestanud, lisage see oma spraidile. Spraidi nimi hierarhias on sama, mis failinimi, nii et vajadusel muutke seda, et seda oleks lihtsam mõista.

Pärast seda käivitage mäng ja vaadake, kas see töötab teie klaviatuuriga.

Ma arvan, et sellest piisab laeva liigutamiseks vertikaalses või horisontaalses tulistamismängus. Muidugi, kui arvutate vaenlase liikumise automaatselt, saate seda sama koodiga liigutada.