Pārvietot, pagriezt un mērogot sprites

Lapa atjaunota :
Lapas izveides datums :

Verifikācijas vide

Windows
  • Operētājsistēmā Windows 11
Vienotības redaktors
  • 2020.3.25f1
Ievades sistēmas pakotnes
  • 1.2.0

Priekšnoteikumi šim padomam

Tālāk norādītie iestatījumi ir iepriekš konfigurēti kā priekšnosacījums šo padomu skaidrojumam.

Sprite pārvietošana

Spēlēs jūs bieži izmantojat kontrolieri, lai pārvietotu savu varoni. Šoreiz es gribētu izmantot tastatūru, lai pārvietotu ekrānā redzamo sprite.

Ja maināt skriptu, varat to pārvietot ar gamepad papildus tastatūrai. Katra ievade ir apkopota ievades sistēmas padomos, tāpēc, lūdzu, skatiet to.

Sprite izvietojums

Novietojiet skatā vienu sprite. Norādījumus par sprites ievietošanu skatiet iepriekšējos padomos. Pagaidām attēla veids un izmērs var būt jebkas, ja vien tas ir redzams skatā.

Ir arī operācijas skaidrojuma teksts, bet tas neietekmē šo darbību.

Izveidojiet skriptu, kas ļauj pārvietot sprites ar tastatūru

Lai pārvietotu sprite ar ievades operāciju, jums jāizveido skripts, tāpēc izveidojiet skriptu savā projektā. Nosaukums ir patvaļīgs, bet šajā gadījumā SpriteMove – tas ir .

Kad skripts ir izveidots un atvērts, ievadiet: Šis skripts ir balstīts uz pieņēmumu, ka tas tiks pievienots pārvietojamajam spritei.

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

Lai Update regulāri pārvietotu sprite, jums ir jāapraksta process metodē. FixedUpdate Šajā gadījumā mēs to esam izveidojuši un aprakstījuši tur.

Es sīkāk paskaidrošu detaļas citu reizi, betUpdate tas, cik reižu metode tiek izsaukta sekundē, ir atkarīga no vides, kurā tā darbojas. Tāpēc kustības ātrums var mainīties atkarībā no izpildes vides. FixedUpdate To, cik reižu metode tiek izsaukta sekundē, nosaka iestatīšanas vērtība, tāpēc jūs varat pārvietot sprite ar tādu pašu ātrumu jebkurā vidē.

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

Tā kā tiek pieņemts, ka šoreiz tas tiks darbināts ar tastatūru, tastatūras informācija tiek iegūta Keyboard.current ar . Ja maināt kodu šeit, varat to iegūt arī ar peli vai gamepad.

Ja vēlaties to mainīt, lūdzu, skatiet tālāk sniegtos padomus.

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

SpriteMove Mācību priekšmets, no kura mantojat, satur informāciju par objektu, kuram MonoBehaviour pievienojat. transform Piekļūstot rekvizītiem, varat manipulēt, piemēram, ar objekta atrašanās vietu.

Transform.Translate Jūs varat izsaukt metodi, lai pārvietotu objekta pozīciju no tā pašreizējās pozīcijas. X un Y koordinātas tiek pārvietotas attiecīgi atbilstoši kursora taustiņiem.

Space.World , jūs varat pārvietoties, neietekmējot tālāk aprakstīto rotāciju.

// スプライトの移動処理
// 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 Jūs varat izsaukt metodi, lai pagrieztu objektu no tā pašreizējā stāvokļa. Arguments ir rotācijas apjoms attiecībā pret norādīto asi. X ass ir kreisā un labā ass, Y ass ir augšupvērstā un lejupējā ass, un Z ass ir ass, kas iet atpakaļ. Tāpēc 2D, ja reizināsiet rotāciju attiecībā pret Z asi, tas pagriezīsies pulksteņrādītāja virzienā un pretēji pulksteņrādītāja virzienam.

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

Starp citu, es iepriekš norādīju metodē Space.World Translate , bet Ja tas nav norādīts, kustības virziens griezīsies atbilstoši rotācijas virzienam.

Piemēram, zemāk redzamajā attēlā Space.World ir norādīts, un pareizā kustības darbība tiek veikta ar 45° rotāciju.

Nākamajā attēlā labā kustības darbība tiek veikta ar 45° rotāciju, Space.World nenorādot .

Space.World Ja jūs nenorādāt šādā veidā, kustības virziens mainās līdz ar virzienu, kurā jūs rotējat. Tas ir noderīgi 3D un radio vadāmu darbību ieviešanai.

Mērogošanai nav metodes, kā palielināt vai samazināt skalu attiecībā pret pašreizējo skalu. localScale Veiciet aprēķinus par īpašumu.

Ja jūs vienkārši reizināt pašreizējo vērtību ar palielinājumu, varat to mērogot atbilstoši taustiņa nospiešanai. Vector2 Ja to iestatāt ar , varat tuvināt tikai X virzienu, tuvināt tikai Y virzienu utt.

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

Kad esat saglabājis skriptu, pievienojiet to savam sprite. Sprite nosaukums hierarhijā ir tāds pats kā faila nosaukums, tāpēc, ja nepieciešams, mainiet to, lai būtu vieglāk saprast.

Pēc tam palaidiet spēli un pārbaudiet, vai tā darbojas ar tastatūru.

Es domāju, ka tas ir pietiekami, lai pārvietotu savu kuģi vertikālā vai horizontālā šaušanas spēlē. Protams, ja jūs automātiski aprēķināsiet ienaidnieka kustību, varat to pārvietot ar to pašu kodu.