Memindahkan, memutar, dan menskalakan sprite

Halaman Diperbarui :
Tanggal pembuatan halaman :

Lingkungan verifikasi

Windows
  • jendela 11
Editor Kesatuan
  • 25f1/3/2020
Paket Sistem Input
  • 1.2.0

Prasyarat untuk tip ini

Pengaturan berikut telah dikonfigurasi sebelumnya sebagai prasyarat untuk penjelasan tips ini.

Memindahkan sprite

Dalam game, Anda sering menggunakan pengontrol untuk memindahkan karakter Anda. Kali ini, saya ingin menggunakan keyboard untuk memindahkan sprite yang ditampilkan di layar.

Jika Anda mengubah skrip, Anda dapat memindahkannya dengan gamepad selain keyboard. Setiap input dirangkum dalam Tips untuk sistem input, jadi silakan merujuknya.

Penempatan Sprite

Tempatkan satu sprite dalam tampilan. Untuk petunjuk tentang menempatkan sprite, lihat tips sebelumnya. Untuk saat ini, jenis dan ukuran gambar bisa apa saja asalkan terlihat pada tampilan.

Ada juga teks penjelasan operasi, tetapi tidak mempengaruhi operasi ini.

Buat skrip yang memungkinkan Anda memindahkan sprite dengan keyboard

Untuk memindahkan sprite dengan operasi input, Anda perlu membuat skrip, jadi buat skrip di proyek Anda. Namanya sewenang-wenang, tetapi dalam kasus SpriteMove ini , itu adalah .

Setelah Anda membuat dan membuka skrip, masukkan yang berikut ini: Skrip ini didasarkan pada asumsi bahwa itu akan dilampirkan pada sprite yang akan dipindahkan.

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

Untuk Update memindahkan sprite secara teratur, Anda perlu menjelaskan prosesnya dalam suatu metode. FixedUpdate Dalam hal ini, kami telah membuat dan menjelaskannya di sana.

Saya akan menjelaskan detailnya secara rinci di lain waktu, tetapiUpdate berapa kali metode dipanggil per detik tergantung pada lingkungan di mana ia berjalan. Oleh karena itu, kecepatan gerakan dapat berubah tergantung pada lingkungan eksekusi. FixedUpdate Berapa kali metode dipanggil per detik ditentukan oleh nilai pengaturan, sehingga Anda dapat memindahkan sprite dengan kecepatan yang sama di lingkungan apa pun.

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

Karena diasumsikan bahwa itu akan dioperasikan dengan keyboard kali ini, Keyboard.current informasi keyboard diperoleh dengan . Jika Anda mengubah kode di sini, Anda juga bisa mendapatkannya dengan mouse atau gamepad.

Jika Anda ingin mengubahnya, silakan lihat tips berikut.

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

SpriteMove Kelas yang Anda warisi berisi informasi tentang objek yang Anda MonoBehaviour lampirkan. transform Ketika Anda mengakses properti, Anda dapat memanipulasi lokasi objek, misalnya.

Transform.Translate Anda dapat memanggil metode untuk memindahkan posisi objek dari posisinya saat ini. Koordinat X dan Y masing-masing dipindahkan sesuai dengan tombol kursor.

Space.World , Anda dapat bergerak tanpa terpengaruh oleh rotasi yang dijelaskan di bawah ini.

// スプライトの移動処理
// 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 Anda dapat memanggil metode untuk memutar objek dari keadaan saat ini. Argumennya adalah jumlah rotasi sehubungan dengan sumbu yang ditentukan. Sumbu X adalah sumbu kiri dan kanan, sumbu Y adalah sumbu atas dan bawah, dan sumbu Z adalah sumbu yang mundur. Oleh karena itu, dalam 2D, jika Anda mengalikan rotasi sehubungan dengan sumbu Z, itu akan berputar searah jarum jam dan berlawanan arah jarum jam.

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

Ngomong-ngomong, saya tentukan dalam metode sebelumnya Space.World Translate , tapi Jika ini tidak ditentukan, arah gerakan akan berputar sesuai dengan arah rotasi.

Misalnya, pada gambar Space.World di bawah ini, ditentukan, dan operasi gerakan yang tepat dilakukan dengan rotasi 45°.

Pada gambar berikut, Space.World operasi gerakan yang tepat dilakukan dengan rotasi 45° tanpa menentukan .

Space.World Jika Anda tidak menentukan dengan cara ini, arah gerakan berubah dengan arah di mana Anda memutar. Ini berguna untuk menerapkan operasi 3D dan radio kontrol.

Untuk penskalaan, tidak ada metode untuk menambah atau mengurangi skala sehubungan dengan skala saat ini. localScale Lakukan perhitungan pada properti.

Jika Anda hanya mengalikan nilai saat ini dengan pembesaran, Anda dapat menskalakannya sesuai dengan penekanan tombol. Vector2 Jika Anda mengaturnya dengan , Anda hanya dapat memperbesar arah X, memperbesar hanya arah Y, dll.

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

Setelah Anda menyimpan skrip Anda, lampirkan ke sprite Anda. Nama sprite dalam hierarki sama dengan nama file, jadi jika perlu, ubah agar lebih mudah dipahami.

Setelah itu, jalankan game dan lihat apakah itu berfungsi dengan keyboard Anda.

Saya pikir ini cukup untuk memindahkan kapal Anda dalam permainan menembak vertikal atau horizontal. Tentu saja, jika Anda secara otomatis menghitung pergerakan musuh, Anda dapat memindahkannya dengan kode yang sama.