Premikanje, vrtenje in prilagajanje velikosti grafičnih likov

Stran posodobljena :
Datum ustvarjanja strani :

Okolje za preverjanje

Windows
  • Windows 11
Urejevalnik Unity
  • 2020.3.25F1
Paketi vhodnih sistemov
  • 1.2.0

Predpogoji za ta nasvet

Naslednje nastavitve so vnaprej konfigurirane kot predpogoj za razlago teh nasvetov.

Premikanje duhovnika

V igrah pogosto uporabljate krmilnik za premikanje lika. Tokrat bi rad s tipkovnico premaknil sprite, prikazan na zaslonu.

Če spremenite skript, ga lahko poleg tipkovnice premaknete tudi z igralno konzolo. Vsak vnos je povzet v Nasvetih za vhodni sistem, zato si ga oglejte.

Namestitev Sprite

Postavite enega duhovnika v pogled. Za navodila o namestitvi spritesov glejte prejšnje nasvete. Zaenkrat sta lahko vrsta in velikost slike karkoli, dokler je vidna na pogledu.

Obstaja tudi besedilo razlage operacije, vendar to ne vpliva na to operacijo.

Ustvarite skript, ki vam omogoča premikanje grafičnih likov s tipkovnico

Če želite premakniti sprite z operacijo vnosa, morate ustvariti skript, zato ustvarite skript v svojem projektu. Ime je poljubno, vendar je v tem primeru SpriteMove .

Ko ustvarite in odprete skript, vnesite naslednje: Ta scenarij temelji na predpostavki, da bo pritrjen na duhovnika, ki ga je treba premakniti.

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

Da bi Update redno premikali duhovnika, morate postopek opisati v metodi. FixedUpdate V tem primeru smo ga tam ustvarili in opisali.

Podrobnosti bom podrobno razložil drugič, vendarUpdate je število poklicev metode na sekundo odvisno od okolja, v katerem se izvaja. Zato se lahko hitrost gibanja spremeni glede na izvedbeno okolje. FixedUpdate Kolikokrat se metoda pokliče na sekundo, je določena z vrednostjo nastavitve, tako da lahko sprite premikate z enako hitrostjo v katerem koli okolju.

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

Ker se predpostavlja, da bo tokrat deloval s tipkovnico, se informacije o Keyboard.current tipkovnici pridobijo z . Če kodo spremenite tukaj, jo lahko dobite tudi z miško ali igralno konzolo.

Če ga želite spremeniti, si oglejte naslednje nasvete.

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

SpriteMove Razred, po katerem podedujete, vsebuje informacije o predmetu, na katerega se pripnete MonoBehaviour . transform Ko dostopate do lastnosti, lahko na primer manipulirate z lokacijo predmeta.

Transform.Translate Pokličete lahko metodo za premikanje položaja predmeta s trenutnega položaja. Koordinati X in Y se premikata glede na tipke kazalca.

Space.World , se lahko premikate, ne da bi na vas vplivalo spodaj opisano vrtenje.

// スプライトの移動処理
// 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 Pokličete lahko način za vrtenje predmeta iz trenutnega stanja. Argument je količina vrtenja glede na določeno os. Os X je leva in desna os, os Y je os gor in dol, os Z pa os, ki gre nazaj. Zato se bo v 2D, če pomnožite vrtenje glede na os Z, vrtela v smeri urinega kazalca in v nasprotni smeri urinega kazalca.

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

Mimogrede, v metodi Space.World sem navedel prej Translate , vendar Če to ni določeno, se bo smer gibanja vrtela glede na smer vrtenja.

Na spodnji sliki Space.World je na primer podana pravilna operacija gibanja s 45-stopinjskim vrtenjem.

Na naslednji sliki Space.World se pravilno premikanje izvede z vrtenjem 45° brez navedbe .

Space.World Če na ta način ne določite, se smer gibanja spreminja s smerjo, v kateri se vrtite. To je uporabno za izvajanje 3D in radijsko vodenih operacij.

Za skaliranje ni metode za povečanje ali zmanjšanje lestvice glede na trenutno lestvico. localScale Izvedite izračune na nepremičnini.

Če preprosto pomnožite trenutno vrednost s povečavo, jo lahko prilagodite glede na pritisk tipke. Vector2 Če ga nastavite z , lahko povečate samo smer X, povečate samo smer Y itd.

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

Ko shranite skript, ga priložite duhovniku. Ime sprite v hierarhiji je enako imenu datoteke, zato ga po potrebi spremenite, da ga boste lažje razumeli.

Po tem zaženite igro in preverite, ali deluje s tipkovnico.

Mislim, da je to dovolj za premikanje vaše ladje v navpični ali horizontalni strelski igri. Seveda, če samodejno izračunate gibanje sovražnika, ga lahko premaknete z isto kodo.