Преместване, завъртане и мащабиране на спрайтове

Страницата се актуализира :
Дата на създаване на страница :

Среда за проверка

Уиндоус
  • Прозорци 11
Редактор на единство
  • 2020.3.25ф1
Пакети на входната система
  • 1.2.0

Предпоставки за този съвет

Следните настройки са предварително конфигурирани като предпоставка за обяснението на тези съвети.

Преместване на спрайта

В игрите често използвате контролер, за да преместите героя си. Този път бих искал да използвам клавиатурата, за да преместя спрайта, показан на екрана.

Ако промените скрипта, можете да го преместите с геймпад в допълнение към клавиатурата. Всеки вход е обобщен в Съвети за входната система, така че, моля, направете справка с него.

Поставяне на спрайт

Поставете един спрайт в изгледа. За инструкции за поставяне на спрайтове, вижте предишните съвети. За момента видът и размерът на изображението могат да бъдат всичко, стига да се вижда на изгледа.

Има и текст на обяснението на операцията, но то не засяга тази операция.

Създайте скрипт, който ви позволява да премествате спрайтове с клавиатурата

За да преместите спрайт чрез входна операция, трябва да създадете скрипт, така че създайте скрипт във вашия проект. Името е произволно, но в този случай SpriteMove е .

След като създадете и отворите скрипта, въведете следното: Този скрипт се основава на предположението, че той ще бъде прикрепен към спрайта, който ще бъде преместен.

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 опишете процеса в метод. FixedUpdate В случая сме го създали и описали там.

Ще обясня подробностите подробно друг път, ноUpdate броят пъти, които един метод се извиква в секунда, зависи от средата, в която се изпълнява. Следователно, скоростта на движение може да се промени в зависимост от средата на изпълнение. FixedUpdate Броят пъти, в които методът се извиква в секунда, се определя от стойността на настройката, така че можете да премествате спрайта с една и съща скорост във всяка среда.

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

Тъй като се предполага, че този път ще се работи с клавиатурата, информацията за клавиатурата Keyboard.current се получава с . Ако промените кода тук, можете да го получите и с мишка или геймпад.

Ако искате да го промените, моля, вижте следните съвети.

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

SpriteMove Класът, който наследявате, съдържа информация за обекта, към който прикачвате MonoBehaviour . transform Когато осъществявате достъп до свойства, можете например да манипулирате местоположението на обекта.

Transform.Translate Можете да извикате метод за преместване на позицията на обекта от текущата му позиция. Координатите X и Y се преместват съответно според клавишите на курсора.

Space.World , можете да се движите, без да бъдете засегнати от въртенето, описано по-долу.

// スプライトの移動処理
// 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 Можете да извикате метод за завъртане на обект от текущото му състояние. Аргументът е размерът на въртене по отношение на зададената ос. Оста X е лявата и дясната ос, оста Y е оста нагоре и надолу, а оста Z е оста, която върви назад. Следователно, в 2D, ако умножите въртенето по отношение на оста Z, тя ще се завърти по посока на часовниковата стрелка и обратно на часовниковата стрелка.

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

Между другото, аз посочих в Space.World метода по-рано Translate , но Ако това не е посочено, посоката на движение ще се върти според посоката на въртене.

Например, на фигурата Space.World по-долу е посочено и правилната операция за движение се извършва с въртене на 45 °.

На следващата фигура Space.World правилната операция за движение се извършва с въртене на 45°, без да се уточнява .

Space.World Ако не посочите по този начин, посоката на движение се променя с посоката, в която се въртите. Това е полезно за изпълнение на 3D и радиоуправляеми операции.

За мащабиране няма метод за увеличаване или намаляване на мащаба по отношение на текущата скала. localScale Извършване на изчисления върху свойството.

Ако просто умножите текущата стойност с увеличение, можете да я мащабирате според натискането на клавиша. Vector2 Ако го зададете с , можете да увеличите само посоката X, да увеличите само посоката Y и т.н.

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

След като сте запазили скрипта си, прикачете го към вашия спрайт. Името на спрайт в йерархията е същото като името на файла, така че ако е необходимо, променете го, за да го направите по-лесен за разбиране.

След това стартирайте играта и вижте дали работи с клавиатурата ви.

Мисля, че това е достатъчно, за да преместите кораба си във вертикална или хоризонтална игра на стрелба. Разбира се, ако автоматично изчислите движението на врага, можете да го преместите със същия код.