Spostare, ruotare e ridimensionare gli sprite

Pagina aggiornata :
Data di creazione della pagina :

Ambiente di verifica

Finestre
  • finestre 11
Unity Editor
  • 2020.3.25f1
Pacchetti del sistema di input
  • 1.2.0

Prerequisiti per questo suggerimento

Le seguenti impostazioni sono preconfigurate come prerequisito per la spiegazione di questi suggerimenti.

Spostare lo sprite

Nei giochi, usi spesso un controller per muovere il tuo personaggio. Questa volta, vorrei usare la tastiera per spostare lo sprite visualizzato sullo schermo.

Se modifichi lo script, puoi spostarlo con un gamepad oltre che con la tastiera. Ogni input è riassunto in Suggerimenti per il sistema di input, quindi si prega di fare riferimento ad esso.

Posizionamento degli sprite

Posizionate uno sprite nella vista. Per istruzioni sul posizionamento degli sprite, fare riferimento ai suggerimenti precedenti. Per il momento, il tipo e le dimensioni dell'immagine possono essere qualsiasi cosa, purché siano visibili sulla vista.

C'è anche un testo della spiegazione dell'operazione, ma non influisce su questa operazione.

Creare uno script che consenta di spostare gli sprite con la tastiera

Per spostare lo sprite tramite un'operazione di input, è necessario creare uno script, quindi creare uno script nel progetto. Il nome è arbitrario, ma in questo caso SpriteMove lo è .

Dopo aver creato e aperto lo script, immettere quanto segue: Questo script si basa sul presupposto che verrà attaccato allo sprite da spostare.

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

Per Update spostare lo sprite su base regolare, è necessario descrivere il processo in un metodo. FixedUpdate In questo caso, l'abbiamo creato e descritto lì.

Spiegherò i dettagli in dettaglio un'altra volta, maUpdate il numero di volte in cui un metodo viene chiamato al secondo dipende dall'ambiente in cui è in esecuzione. Pertanto, la velocità di movimento può variare a seconda dell'ambiente di esecuzione. FixedUpdate Il numero di volte in cui il metodo viene chiamato al secondo è determinato dal valore dell'impostazione, in modo da poter spostare lo sprite alla stessa velocità in qualsiasi ambiente.

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

Poiché si presume che questa volta verrà utilizzato con la tastiera, le informazioni sulla Keyboard.current tastiera vengono ottenute con . Se modifichi il codice qui, puoi anche ottenerlo con un mouse o un gamepad.

Se si desidera modificarlo, fare riferimento ai seguenti suggerimenti.

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

SpriteMove La classe da cui si eredita contiene informazioni sull'oggetto a cui si MonoBehaviour sta collegando. transform Quando si accede alle proprietà, è possibile, ad esempio, modificare la posizione dell'oggetto.

Transform.Translate È possibile chiamare un metodo per spostare la posizione dell'oggetto dalla posizione corrente. Le coordinate X e Y vengono spostate rispettivamente in base ai tasti cursore.

Space.World , è possibile spostarsi senza essere influenzati dalla rotazione descritta di seguito.

// スプライトの移動処理
// 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 È possibile chiamare un metodo per ruotare un oggetto dallo stato corrente. L'argomento è la quantità di rotazione rispetto all'asse specificato. L'asse X è l'asse sinistro e destro, l'asse Y è l'asse su e giù e l'asse Z è l'asse che va indietro. Pertanto, in 2D, se si moltiplica la rotazione rispetto all'asse Z, ruoterà in senso orario e antiorario.

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

A proposito, ho specificato nel Space.World metodo prima Translate , ma Se questo non è specificato, la direzione di movimento ruoterà in base alla direzione di rotazione.

Ad esempio, nella figura Space.World seguente, viene specificato e l'operazione di movimento corretta viene eseguita con una rotazione di 45°.

Nella figura seguente, Space.World l'operazione di movimento corretto viene eseguita con una rotazione di 45° senza specificare .

Space.World Se non si specifica in questo modo, la direzione di spostamento cambia in base alla direzione di rotazione. Ciò è utile per l'implementazione di operazioni 3D e radiocomandate.

Per il ridimensionamento, non esiste un metodo per aumentare o diminuire la scala rispetto alla scala corrente. localScale Eseguire calcoli sulla proprietà.

Se si moltiplica semplicemente il valore corrente per un ingrandimento, è possibile ridimensionarlo in base alla pressione del tasto. Vector2 Se lo si imposta con , è possibile eseguire lo zoom solo nella direzione X, ingrandire solo la direzione Y, ecc.

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

Una volta salvato lo script, allegalo allo sprite. Il nome dello sprite nella gerarchia è lo stesso del nome del file, quindi se necessario, modificalo per renderlo più facile da capire.

Successivamente, esegui il gioco e verifica se funziona con la tastiera.

Penso che questo sia sufficiente per muovere la tua nave in un gioco di tiro verticale o orizzontale. Naturalmente, se si calcola automaticamente il movimento del nemico, è possibile spostarlo con lo stesso codice.