Moure, girar i escalar sprites

Pàgina actualitzada :
Data de creació de la pàgina :

Entorn de verificació

Windows
  • Finestres 11
Editor d'unitat
  • 25.3.2020
Paquets del sistema d'entrada
  • 1.2.0

Requisits previs per a aquest consell

Els següents paràmetres estan preconfigurats com a requisit previ per a l'explicació d'aquests consells.

Moure l'sprite

En els jocs, sovint utilitzeu un controlador per moure el vostre personatge. Aquesta vegada, m'agradaria utilitzar el teclat per moure l'sprite que es mostra a la pantalla.

Si canvies l'script, pots moure'l amb un gamepad a més del teclat. Cada entrada es resumeix en Consells per al sistema d'entrada, així que consulteu-la.

Col·locació de Sprite

Col·loqueu un personatge a la vista. Per obtenir instruccions sobre la col·locació de personatges, consulteu els consells anteriors. De moment, el tipus i la mida de la imatge pot ser qualsevol cosa sempre que sigui visible a la vista.

També hi ha un text de l'explicació de l'operació, però no afecta aquesta operació.

Creeu un script que us permeti moure personatges amb el teclat

Per moure l'sprite per l'operació d'entrada, heu de crear un script, així que creeu un script al vostre projecte. El nom és arbitrari, però en aquest cas SpriteMove , és .

Un cop hàgiu creat i obert l'script, introduïu el següent: Aquest guió es basa en la suposició que s'adjuntarà a l'sprite a moure.

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 moure Update l'sprite regularment, heu de descriure el procés amb un mètode. FixedUpdate En aquest cas, l'hem creat i descrit allà.

Explicaré els detalls detalladament una altra vegada, peròUpdate el nombre de vegades que es crida un mètode per segon depèn de l'entorn en què s'estigui executant. Per tant, la velocitat de moviment pot canviar en funció de l'entorn d'execució. FixedUpdate El nombre de vegades que es crida el mètode per segon està determinat pel valor de configuració, de manera que podeu moure el personatge a la mateixa velocitat en qualsevol entorn.

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

Com que se suposa que aquesta vegada s'operarà amb el teclat, la informació del teclat s'obté Keyboard.current amb . Si canvieu el codi aquí, també podeu obtenir-lo amb un ratolí o un gamepad.

Si voleu canviar-lo, consulteu els consells següents.

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

SpriteMove La classe de la qual hereteu conté informació sobre l'objecte al qual esteu MonoBehaviour adjuntant. transform Quan accediu a propietats, podeu manipular la ubicació de l'objecte, per exemple.

Transform.Translate Podeu trucar a un mètode per moure la posició de l'objecte des de la seva posició actual. Les coordenades X i Y es mouen segons les tecles del cursor, respectivament.

Space.World , es pot moure sense veure's afectat per la rotació que es descriu a continuació.

// スプライトの移動処理
// 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 Podeu trucar a un mètode per girar un objecte des del seu estat actual. L'argument és la quantitat de rotació respecte a l'eix especificat. L'eix X és l'eix esquerre i dret, l'eix Y és l'eix amunt i avall, i l'eix Z és l'eix que va cap enrere. Per tant, en 2D, si multipliqueu la rotació respecte a l'eix Z, girarà en sentit horari i antihorari.

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

Per cert, he especificat en el Space.World mètode anterior Translate , però Si no s'especifica, la direcció del moviment girarà segons la direcció de rotació.

Per exemple, a la figura Space.World següent, s'especifica i l'operació de moviment adequat es realitza amb una rotació de 45°.

A la figura següent, Space.World l'operació de moviment adequat es realitza amb una rotació de 45° sense especificar .

Space.World Si no especifiqueu d'aquesta manera, el sentit del moviment canvia amb la direcció en què gireu. Això és útil per implementar operacions 3D i radiocontrolades.

Per escalar, no hi ha cap mètode per augmentar o disminuir l'escala respecte a l'escala actual. localScale Realitzar càlculs sobre l'immoble.

Si simplement multipliqueu el valor actual per un augment, podeu escalar-lo segons la tecla premuda. Vector2 Si l'establiu amb , podeu ampliar només la direcció X, fer zoom només en la direcció Y, etc.

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

Un cop hagis desat l'script, adjunta'l al personatge. El nom de l'sprite a la jerarquia és el mateix que el nom del fitxer, de manera que, si cal, canvieu-lo perquè sigui més fàcil d'entendre.

Després d'això, executeu el joc i comproveu si funciona amb el teclat.

Crec que això és suficient per moure la teva nau en un joc de tir vertical o horitzontal. Per descomptat, si calculeu automàticament el moviment de l'enemic, podeu moure'l amb el mateix codi.