Mutarea, rotirea și scalarea personajelor

Pagina actualizată :
Data creării paginii :

Mediul de verificare

Windows
  • Ferestre 11
Unity Editor
  • 2020.3.25F1
Pachete de sisteme de intrare
  • 1.2.0

Cerințe preliminare pentru acest sfat

Următoarele setări sunt preconfigurate ca o condiție prealabilă pentru explicarea acestor sfaturi.

Mutarea personajului

În jocuri, folosiți adesea un controler pentru a vă muta personajul. De data aceasta, aș dori să folosesc tastatura pentru a muta personajul afișat pe ecran.

Dacă schimbați scriptul, îl puteți muta cu un gamepad în plus față de tastatură. Fiecare intrare este rezumată în Sfaturi pentru sistemul de introducere, așa că vă rugăm să o consultați.

Plasarea Sprite

Plasați un personaj în vizualizare. Pentru instrucțiuni privind plasarea personajelor, consultați sfaturile anterioare. Pentru moment, tipul și dimensiunea imaginii pot fi orice, atâta timp cât este vizibilă pe vizualizare.

Există, de asemenea, un text al explicației operației, dar nu afectează această operație.

Creați un script care vă permite să mutați personaje cu tastatura

Pentru a muta personajul prin operația de intrare, trebuie să creați un script, deci creați un script în proiectul dvs. Numele este arbitrar, dar în acest caz SpriteMove , este .

După ce ați creat și deschis scriptul, introduceți următoarele: Acest scenariu se bazează pe presupunerea că va fi atașat la personajul care urmează să fie mutat.

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

Pentru a Update muta personajul în mod regulat, trebuie să descrieți procesul într-o metodă. FixedUpdate În acest caz, am creat-o și am descris-o acolo.

Voi explica detaliile în detaliu altă dată, darUpdate de câte ori este apelată o metodă pe secundă depinde de mediul în care rulează. Prin urmare, viteza de mișcare se poate modifica în funcție de mediul de execuție. FixedUpdate Numărul de apelări ale metodei pe secundă este determinat de valoarea setării, astfel încât să puteți muta personajul cu aceeași viteză în orice mediu.

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

Deoarece se presupune că va fi operat cu tastatura de data aceasta, informațiile despre Keyboard.current tastatură sunt obținute cu . Dacă schimbați codul aici, îl puteți obține și cu un mouse sau gamepad.

Dacă doriți să o modificați, vă rugăm să consultați următoarele sfaturi.

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

SpriteMove Clasa de la care moșteniți conține informații despre obiectul de care MonoBehaviour sunteți atașat. transform Când accesați proprietăți, puteți manipula locația obiectului, de exemplu.

Transform.Translate Puteți apela o metodă pentru a muta poziția obiectului din poziția sa curentă. Coordonatele X și Y sunt deplasate în funcție de tastele cursorului, respectiv.

Space.World , vă puteți deplasa fără a fi afectat de rotația descrisă mai jos.

// スプライトの移動処理
// 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 Puteți apela o metodă pentru a roti un obiect din starea sa curentă. Argumentul este cantitatea de rotație în raport cu axa specificată. Axa X este axa stânga și dreapta, axa Y este axa sus și jos, iar axa Z este axa care merge înapoi. Prin urmare, în 2D, dacă înmulțiți rotația în raport cu axa Z, aceasta se va roti în sensul acelor de ceasornic și în sens invers acelor de ceasornic.

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

Apropo, am specificat în Space.World metoda mai devreme Translate , dar Dacă acest lucru nu este specificat, direcția de mișcare se va roti în funcție de direcția de rotație.

De exemplu, în figura Space.World de mai jos, este specificată, iar operația de mișcare corectă este efectuată cu o rotație de 45 °.

În figura următoare, Space.World operația de mișcare corectă este efectuată cu o rotație de 45° fără a specifica .

Space.World Dacă nu specificați în acest fel, direcția de deplasare se modifică odată cu direcția în care vă rotiți. Acest lucru este util pentru implementarea operațiunilor 3D și radio-controlate.

Pentru scalare, nu există nicio metodă de mărire sau micșorare a scării în raport cu scara curentă. localScale Efectuați calcule asupra proprietății.

Dacă înmulțiți pur și simplu valoarea curentă cu o mărire, o puteți scala în funcție de apăsarea tastei. Vector2 Dacă îl setați cu , puteți mări numai direcția X, puteți mări numai direcția Y etc.

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

După ce ai salvat scriptul, atașează-l la personajul tău. Numele personajului din ierarhie este același cu numele fișierului, așa că, dacă este necesar, modificați-l pentru a-l face mai ușor de înțeles.

După aceea, rulați jocul și vedeți dacă funcționează cu tastatura.

Cred că acest lucru este suficient pentru a vă muta nava într-un joc de fotografiere vertical sau orizontal. Desigur, dacă calculați automat mișcarea inamicului, îl puteți muta cu același cod.