Переміщення, обертання та масштабування спрайтів

Сторінка оновлюється :
Дата створення сторінки :

Середовище верифікації

Вікна
  • Вікна 11
Редактор Unity
  • 2020.3.25f1
Вхідні системні пакети
  • 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;
}

Після того, як ви зберегли сценарій, прикріпіть його до спрайту. Ім'я спрайту в ієрархії збігається з ім'ям файлу, тому при необхідності змініть його, щоб було простіше зрозуміти.

Після цього запустіть гру і подивіться, чи працює вона з вашою клавіатурою.

Думаю, цього достатньо для переміщення вашого корабля у вертикальній або горизонтальній стрілялці. Звичайно, якщо автоматично обчислити рух противника, то можна переміщати його за допомогою того ж коду.