Spritų perkėlimas, pasukimas ir mastelio keitimas

Puslapis atnaujintas :
Puslapio sukūrimo data :

Tikrinimo aplinka

Windows
  • Langai 11
"Unity" redaktorius
  • 2020.3.25f1
Įvesties sistemos paketai
  • 1.2.0

Būtinos šio patarimo sąlygos

Toliau nurodyti parametrai yra iš anksto sukonfigūruoti kaip būtina šių patarimų paaiškinimo sąlyga.

"Sprite" perkėlimas

Žaidimuose dažnai naudojate valdiklį, kad perkeltumėte savo simbolį. Šį kartą norėčiau naudoti klaviatūrą, kad perkelčiau ekrane rodomą sprite.

Jei pakeisite scenarijų, galite jį perkelti ne tik klaviatūra, bet ir žaidimų pultu. Kiekviena įvestis yra apibendrinta įvesties sistemos patarimuose, todėl žiūrėkite ją.

"Sprite" paskirties vieta

Įdėkite vieną sprite į rodinį. Norėdami gauti instrukcijas, kaip įdėti spritus, skaitykite ankstesnius patarimus. Kol kas vaizdo tipas ir dydis gali būti bet koks, jei jis matomas rodinyje.

Taip pat yra operacijos paaiškinimo tekstas, tačiau jis neturi įtakos šiai operacijai.

Sukurkite scenarijų, leidžiantį perkelti spritus klaviatūra

Norėdami perkelti "sprite" įvesties operacija, turite sukurti scenarijų, todėl sukurkite scenarijų savo projekte. Pavadinimas yra savavališkas, bet šiuo atveju SpriteMove , tai yra .

Sukūrę ir atidarę scenarijų, įveskite: Šis scenarijus grindžiamas prielaida, kad jis bus pritvirtintas prie perkeliamo sprite.

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

Update Norint reguliariai perkelti "sprite", turite aprašyti procesą metodu. FixedUpdate Šiuo atveju mes jį sukūrėme ir aprašėme ten.

Detales išsamiai paaiškinsiu kitą kartą, tačiauUpdate tai, kiek kartų metodas iškviečiamas per sekundę, priklauso nuo aplinkos, kurioje jis veikia. Todėl judėjimo greitis gali keistis priklausomai nuo vykdymo aplinkos. FixedUpdate Kiek kartų metodas vadinamas per sekundę, nustatomas pagal nustatymo vertę, todėl sprite galite perkelti tuo pačiu greičiu bet kurioje aplinkoje.

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

Kadangi daroma prielaida, kad šį kartą ji bus valdoma klaviatūra, Keyboard.current klaviatūros informacija gaunama naudojant . Jei čia pakeisite kodą, taip pat galite jį gauti naudodami pelę arba žaidimų planšetę.

Jei norite jį pakeisti, vadovaukitės šiais patarimais.

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

SpriteMove Klasėje, iš kurios paveldite, yra informacijos apie objektą, prie kurio MonoBehaviour pridedate. transform Kai pasiekiate ypatybes, galite, pavyzdžiui, manipuliuoti objekto vieta.

Transform.Translate Galite iškviesti metodą, kaip perkelti objekto padėtį iš dabartinės padėties. X ir Y koordinatės perkeliamos atitinkamai pagal žymeklio klavišus.

Space.World , galite judėti nepaveikdami toliau aprašyto sukimosi.

// スプライトの移動処理
// 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 Galite iškviesti metodą, kaip pasukti objektą iš dabartinės būsenos. Argumentas yra sukimosi dydis nurodytos ašies atžvilgiu. X ašis yra kairė ir dešinė ašis, Y ašis yra aukštyn ir žemyn ašis, o Z ašis yra ašis, einanti atgal. Todėl 2D formatu, jei padauginsite sukimąsi Z ašies atžvilgiu, jis suksis pagal laikrodžio rodyklę ir prieš laikrodžio rodyklę.

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

Beje, metode nurodžiau Space.World anksčiau Translate , bet Jei tai nenurodyta, judėjimo kryptis sukasi pagal sukimosi kryptį.

Pavyzdžiui, žemiau esančiame paveikslėlyje Space.World nurodoma, o dešiniojo judėjimo operacija atliekama pasukant 45° kampu.

Kitame paveikslėlyje Space.World dešiniojo judėjimo operacija atliekama pasukant 45° kampu, nenurodant .

Space.World Jei tokiu būdu nenurodysite, judėjimo kryptis pasikeis priklausomai nuo krypties, kuria sukasitės. Tai naudinga įgyvendinant 3D ir radijo bangomis valdomas operacijas.

Mastelio keitimui nėra metodo, kaip padidinti ar sumažinti skalę, atsižvelgiant į dabartinę skalę. localScale Atlikite turto skaičiavimus.

Jei tiesiog padauginsite dabartinę vertę padidindami, galite ją keisti pagal klavišo paspaudimą. Vector2 Jei nustatysite jį su , galite priartinti tik X kryptimi, priartinti tik Y kryptimi ir pan.

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

Išsaugoję scenarijų, pridėkite jį prie "sprite". Sprite pavadinimas hierarchijoje yra toks pat kaip failo vardas, todėl, jei reikia, pakeiskite jį, kad būtų lengviau suprasti.

Po to paleiskite žaidimą ir pažiūrėkite, ar jis veikia su klaviatūra.

Manau, kad to pakanka norint perkelti savo laivą vertikaliame ar horizontaliame šaudymo žaidime. Žinoma, jei automatiškai apskaičiuojate priešo judėjimą, galite jį perkelti tuo pačiu kodu.