Flyt, roter og skaler sprites

Side opdateret :
Dato for oprettelse af side :

Miljø til bekræftelse

Windows
  • Windows 11
Enhedslistens redaktør
  • 2020.3.25f1
Input System Pakker
  • 1.2.0

Forudsætninger for dette tip

Følgende indstillinger er forudkonfigureret som en forudsætning for forklaringen af disse tip.

Flytning af sprite

I spil bruger du ofte en controller til at flytte din karakter. Denne gang vil jeg gerne bruge tastaturet til at flytte sprite, der vises på skærmen.

Hvis du ændrer scriptet, kan du flytte det med en gamepad ud over tastaturet. Hvert input er opsummeret i Tips til inputsystemet, så se det.

Sprite placering

Placer en sprite i udsigten. For instruktioner om placering af sprites, se de tidligere tip. Indtil videre kan billedets type og størrelse være hvad som helst, så længe det er synligt på visningen.

Der er også en tekst til operationsforklaringen, men den påvirker ikke denne operation.

Opret et script, der giver dig mulighed for at flytte sprites med tastaturet

For at flytte sprite ved inputoperation skal du oprette et script, så opret et script i dit projekt. Navnet er vilkårligt, men i dette tilfælde SpriteMove er det .

Når du har oprettet og åbnet scriptet, skal du indtaste følgende: Dette script er baseret på den antagelse, at det vil blive knyttet til spriten, der skal flyttes.

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

For at Update flytte sprite regelmæssigt skal du beskrive processen i en metode. FixedUpdate I dette tilfælde har vi oprettet og beskrevet det der.

Jeg forklarer detaljerne detaljeret en anden gang, menUpdate antallet af gange, en metode kaldes pr. Sekund, afhænger af det miljø, hvor den kører. Derfor kan bevægelseshastigheden ændre sig afhængigt af udførelsesmiljøet. FixedUpdate Antallet af gange, metoden kaldes pr. sekund, bestemmes af indstillingsværdien, så du kan flytte spriten med samme hastighed i ethvert miljø.

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

Da det antages, at det vil blive betjent med tastaturet denne gang, Keyboard.current opnås tastaturoplysningerne med . Hvis du ændrer koden her, kan du også få den med en mus eller gamepad.

Hvis du vil ændre det, henvises til følgende tip.

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

SpriteMove Den klasse, du arver fra, indeholder oplysninger om det objekt, du MonoBehaviour er knyttet til. transform Når du får adgang til egenskaber, kan du f.eks. manipulere objektets placering.

Transform.Translate Du kan kalde en metode til at flytte objektets position fra dets aktuelle position. X- og Y-koordinaterne flyttes i henhold til henholdsvis piletasterne.

Space.World , kan du bevæge dig uden at blive påvirket af den rotation, der er beskrevet nedenfor.

// スプライトの移動処理
// 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 Du kan kalde en metode til at rotere et objekt fra dets aktuelle tilstand. Argumentet er rotationsmængden i forhold til den angivne akse. X-aksen er venstre og højre akse, Y-aksen er op- og nedaksen, og Z-aksen er den akse, der går bagud. Derfor, i 2D, hvis du multiplicerer rotationen i forhold til Z-aksen, roterer den med uret og mod uret.

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

Forresten, jeg specificerede Space.World i metoden tidligere Translate , men Hvis dette ikke er angivet, roterer bevægelsesretningen i henhold til rotationsretningen.

For eksempel er i nedenstående figur Space.World angivet, og den rigtige bevægelsesoperation udføres med en 45 ° rotation.

I den følgende figur Space.World udføres den rigtige bevægelsesoperation med en 45 ° rotation uden at angive .

Space.World Hvis du ikke angiver på denne måde, ændres bevægelsesretningen med den retning, du roterer i. Dette er nyttigt til implementering af 3D- og radiostyrede operationer.

Til skalering er der ingen metode til at øge eller mindske skalaen i forhold til den aktuelle skala. localScale Udfør beregninger på ejendommen.

Hvis du blot multiplicerer den aktuelle værdi med en forstørrelse, kan du skalere den i henhold til tastetrykket. Vector2 Hvis du indstiller det med , kan du kun zoome i X-retningen, kun zoome i Y-retningen osv.

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

Når du har gemt dit script, skal du vedhæfte det til din sprite. Navnet på spriten i hierarkiet er det samme som filnavnet, så skift det om nødvendigt for at gøre det lettere at forstå.

Kør derefter spillet og se om det fungerer med dit tastatur.

Jeg tror, det er nok til at flytte dit skib i et lodret eller vandret skydespil. Selvfølgelig, hvis du automatisk beregner fjendens bevægelse, kan du flytte den med samme kode.